网站运维、系统运维管理研究
2007/12/18L i n u x系统

没有评论
45 views

Linux的拨号设置(拨出与拨入)

本文以step by step的方式介绍了linux下如何拨出和拨入,就是如何让linux机器做ppp的客户端和服务器,并且介绍了回拨服务器的设置。本文尽力做到由浅入深,条理清楚。如果你对linux的拨号一窍不通,通过阅读本文,再加上你的实践和努力,精通linux拨号并非难事。

——————————————————————————–

版权声明:

本文版权属于胡晓峰。本文件可以在非商业目的下自由传播,但必须保持本文的完整,并包含本版权声明。如果要将本文的全部或部分用于商业目的,需要得到本人同意。

 

目录

Linux的拨号设置(拨出与拨入) *

目录 *

1. Linux下如何拨出(客户) *

1.1编译内核使其支持ppp *

1.2设置串行端口和调制解调器 *

串口设备文件 *

设置中断号和I/O地址 *

设置调制解调器 *

1.3掌握你的ISP的信息 *

1.4安装拨号所需软件 *

1.5手动方式建立ppp连接 *

用minicom测试拨号 *

用pppd建立ppp连接 *

断开连接 *

1.6使ppp连接自动化 *

pppd脚本ppp-on *

chat脚本ppp-on-dialer *

拨号上网 *

断开连接 *

1.7设置域名解析(DNS) *

设置域名服务器 *

自动化 *

1.8其他问题 *

2. linux下如何拨入(服务器) *

2.1设置基本的拨号服务器 *

使linux能够接受电话拨入 *

启动pppd与客户建立ppp连接 *

针对win95客户的特殊设置 *

2.2回拨(callback) *

服务器端设置 *

客户端设置 *

2.3小结 *

 

Linux下如何拨出(客户)

本节的目的是在linux下设置ppp,使其能拨号并连接到你的ISP,从而将你的机器与Internet相连,进而你就可以在网上为所欲为了,呵呵。

我喜欢条理清晰的文章,所以我写的东西也尽量做到有条理。下面就是linux ppp客户端设置的一般步骤:

编译内核使其支持ppp。

设置串行端口和调制解调器。

掌握你的ISP的信息。

安装拨号所需软件并进行设置。

手动方式建立ppp连接。

使ppp连接自动化。

设置域名解析(DNS)。

其他问题。

1.1编译内核使其支持ppp

要实现ppp客户,一是需要内核支持ppp,另外就是需要ppp的软件pppd(ppp daemon)。编译内核虽然不难,但也并非简单的一塌糊涂,庆幸的是,在大多数情况下,你不用重新编译你的内核。我使用的是RedHat 6.0,它带的内核就已经支持ppp了。其他各种发布版本的linux内核也是支持ppp的。如果你在使用自己编译的内核,你就要注意这个内核是否支持ppp。编译内核并不是本文的范围,如果你确实要自己重新编译内核,请查阅相关文档。

1.2设置串行端口和调制解调器

串口设备文件

调制解调器是串行设备,外置的需要连到一个串口上,内置自己有一个串口。大家知道,UNIX系统对外设的操作都是通过特定的设备文件完成的,Linux下串口设备文件的命名和DOS的关系如下:

* DOS COM1 = Linux /dev/cua0 (and /dev/ttyS0)

* DOS COM2 = Linux /dev/cua1 (and /dev/ttyS1)

等等

一般来说/dev/cua*是用来拨出的,/dev/ttyS*是用来拨入的,但现在好像已经不加以区分了,统统用的是/dev/ttyS*。如果你的机器上没有/dev/ttyS*,你需要用mknod来自己建立这些设备文件,但有个脚本程序MAKEDEV可以简化这个工作:

# cd /dev

# ./MAKEDEV ttyS0

设置中断号和I/O地址

你不需要阅读这一节,除非你想要使用三个或更多的串行设备,比如一个串行鼠标,三个modem。

一般来讲COM1和COM3共用IRQ3,COM2和COM4共用IRQ4,一个设备必须唯一对应一个IRQ号才行,如果有三个以上的串行设备,就要把别处没用的中断号拿过来用了。使用如下命令设置中断号:

/sbin/setserial /dev/ttyS0 irq 3 #串行鼠标

/sbin/setserial /dev/ttyS1 irq 4 # MODEM 1

/sbin/setserial /dev/ttyS2 irq 5 # MODEM 2

/sbin/setserial /dev/ttyS3 irq 9 # MODEM 3

你有必要将这些命令放在/etc/rc.d/rc.local中,使其在linux启动时运行。你可以使用

cat /proc/interrupts

来察看系统的中断设置,以确保没有中断冲突。

I/O地址与中断一样,必须唯一。你可以设置硬件跳线来改变I/O地址。一般串行口的I/O地址是这样的:

ttyS0 address 0×3f8

ttyS1 address 0×2f8

ttyS2 address 0×3e8

ttyS3 address 0×2e8

一般情况下,你没有必要改变串行口的I/O地址。可以使用命令

cat /proc/ioports

来察看系统的I/O地址设置,以确保没有冲突。

设置调制解调器

一般情况下,调制解调器的出厂设置就很合适了,不用改变什么。但如果你把调制解调器搞得一塌糊涂,就需要对它进行从新设置。由于我这方面没有实践经验,如果你真的不幸遇到这种情况,就去看看调制解调器的说明吧。

需要说明的是,linux不支持所谓winmodem,这种modem需要特殊的windows驱动程序才能使用,目前还没有linux下的驱动。据说这种winmodem就是所谓的“软猫”,我看有点像。

1.3掌握你的ISP的信息

由于你是通过ISP与Internet连接的,所以掌握ISP的信息对于你拨号是很重要的,下面列出了你应该知道的基本信息:

拨号服务的电话号码

服务器使用动态IP地址分配还是静态的IP?

ISP 的域名服务器(DNS)IP地址是什么?

登录服务器时都要回答什么问题?

如果服务器是Windows NT,它是否使用微软的PAP/CHAP系统?

这里可能会有一个问题.Windows 95系列的拨号设置允许让DNS的地址在连线过程中传到客户端。因此你的ISP可能会告诉你不需要知道DNS服务器的IP地址。对于Linux来说,它不允许在连线之时动态地指定DNS的IP地址。所以你需要知道DNS地址并自己设置DNS。

对于第5点,由于我没有实践经验,并且实际应用比较少见,就不做讨论了。请参阅相关文档。

1.4安装拨号所需软件

ppp客户所需的程序有chat和pppd,如果你的机器上还没有这两个程序,就要安装它们。在RedHat中,使用如下命令:

rpm -Uvh ppp-2.3.7-2.i386.rpm

另外还有一个终端通讯程序minicom,在我们这里是用来测试拨号用的,也要安装上。

rpm -Uvh minicom-1.82-5.i386.rpm

chat程序的用途是拨号并等待提示,根据提示输入用户名和密码等登录信息。pppd的用途是建立并维持与服务器的ppp连接,传输数据。

1.5手动方式建立ppp连接

在进行了上面4项内容后,我们就要进行拨号了!这一节介绍的是一种手动的方法,目的是用来测试的。不管是手动还是后面要讲的自动方式,整个ppp连接很明显的分成两个步骤:

拨通ISP的电话,建立物理线路的连接,并启动ISP端的pppd程序。

启动本机的pppd程序与服务器端的pppd进行握手,建立ppp连接。

你会在以后的叙述中很清楚的看到这两个步骤。

如果你想节约时间,可以越过本节,直接配置自动ppp。但是作为step by step的建议,你还是应该阅读本节,虽然你并不一定要实际的操作它。

用minicom测试拨号

首先我们用minicom测试一下,看看能否拨通ISP。我使用的是RedHat6.0自带的minicom,其他版本的minicom可能热键不同。在运行minicom之前,需要建立/dev/modem这个设备文件,比如我的modem接在COM2上,使用如下命令建立/dev/modem:

ln /dev/ttyS1 /dev/modem

运行minicom,输入Ctrl-A,再敲Z就可以看到帮助,此时按D,就是拨号,会出现一个界面,此时选择manual(手动),并输入ISP的电话号码,调制解调器一阵乱响之后,会有几声音乐响,并在屏幕上提示按任意键继续,按任意一个键,就会出现你ISP的信息,并提示输入username,password,有可能还要提示你选择ppp连接还是slip连接等等。现在服务器端的pppd应该被启动,表现就是会出现如下的垃圾字符:

}8}!}$}%U}"}&} } } } }%}& …}}"}(}"} .~~y}

至此,说明你的机器拨号正常,可以与你的ISP正常连接。在这一步,你需要记录下拨号服务器的提问,以及你的回答,以便今后实现自动拨号。

用pppd建立ppp连接

上面只是测试拨号能否成功,下面就是要建立ppp连接。

还是用minicom,如前所示进行拨号,直到出现垃圾字符,此时退出minicom(Ctrl-A,Q),注意:不是reset,只是退出。然后执行pppd程序如下:

pppd debug lock modem crtscts defaultroute /dev/ttyS1 115200&

debug是说要在/var/log/messages留下调试信息。Lock是说锁定串口设备。Modem是说用调制解调器的控制信号。Crtscts是说使用硬件数据流控制,defaultroute 是说在本机路由表中加入一项缺省路由,它使你不仅能连到拨号服务器,还能通过它连接整个Internet。/dev/ttyS1是说modem在COM2口上,115200是串口的速率。&是说这个程序在后台执行。

等一段时间,ppp连接建立之后,运行ifconfig,这是你就会看到ppp0的网络接口,并能看出你被分配的ip地址和对端服务器的ip地址。运行route,你会看到对端服务器的ip地址也被加入了路由表。好了!你的拨号成功了!此时可以ping一下Internet上的某个主机的IP地址,因该是没问题的。

现在还不能使用域名,因为还没配(废话)。

如果你的机器本身是连在局域网上的,你要确保在拨号之前没有缺省路由,就是在route命令中看不到default或0.0.0.0。原因很简单,拨号会产生一个缺省路由,如果原来就有一个,拨号产生的缺省路由就不起作用,你就不能连到Internet上,而还是在局域网里。可以用命令

route del -net default

删除以前的缺省路由,再进行拨号,从而使拨号产生的缺省路由有效。

怎样才能知道ppp连接建立了呢?在一个单独的虚拟控制台上运行

tail -f /var/log/messages

你就可以动态的观察各种日志信息,包括pppd的调试信息。当你看到:

Jun 23 16:10:31 hxf pppd[1234]: local IP address 210.78.131.151

Jun 23 16:10:31 hxf pppd[1234]: remote IP address 192.168.10.21

这样的信息就说明ppp连接成功了,服务器已经给你分配了地址,接着你就可以运行ifconfig、route、ping等程序来测试你的拨号网络了!当然,如果没有成功,你也可以根据pppd的调试信息判断错误原因,以便进行改正。

断开连接

当测试通过后,需要把连接断掉,使用如下命令:

killall pppd

1.6使ppp连接自动化

在经过手动连接测试之后,我们就要把这些变成自动的,我们的目的是只用一个命令就能实现拨号连接。

前面我们说过,要使拨号自动化需要两个程序chat 和pppd。在RedHat6里,它们包含在ppp-2.3.7-2.i386.rpm这个包里面,安装这个软件包,就会生成/etc/ppp目录和/usr/doc/ppp-2.3.7目录,在/etc/ppp目录中是几个pppd的配置文件,在/usr/doc/ppp-2.3.7中是pppd的文档,在scripts子目录里有如下几个文件:

/usr/doc/ppp-2.3.7/scripts/ppp-on # pppd程序的脚本文件

/usr/doc/ppp-2.3.7/scripts/ppp-on-dialer # chat程序的脚本文件

/usr/doc/ppp-2.3.7/scripts/ppp-off #断线脚本文件

这就是我们要讨论的几个文件。我们需要修改的是前两个文件。

ppp-on-dialer的功能是完成拨打电话,并输入所需登录信息完成登录,并启动服务器端的pppd,就是我们曾经看到的垃圾字符。ppp-on-dialer实际上就是完成我们在测试时用minicom拨号所实现的那部分功能。

ppp-on的功能就是测试时pppd程序完成的功能,它启动本机的pppd,与服务器端的pppd进行对话,实现端对端(ppp)的连接。

我们的目的是把这两部分连接起来,用一个命令就能完成整个拨号连接的过程,这是通过pppd程序的一个参数connect完成的,你会在下面看到它的用法。下面就详细介绍这两个脚本文件:

pppd脚本ppp-on

下面就是ppp-on的内容,我们先来看看有什么东西:

———————————————————————————-

#!/bin/sh

#

# Script to initiate a ppp connection. This is the first part of the

# pair of scripts. This is not a secure pair of scripts as the codes

# are visible with the ps command. However, it is simple.

#

# These are the parameters. Change as needed.

TELEPHONE=555-1212 # The telephone number for the connection

ACCOUNT=george # The account name for logon (as in George Burns)

PASSWORD=gracie # The password for this account (and Gracie Allen)

LOCAL_IP=0.0.0.0 # Local IP address if known. Dynamic = 0.0.0.0

REMOTE_IP=0.0.0.0 # Remote IP address if desired. Normally 0.0.0.0

NETMASK=255.255.255.0 # The proper netmask if needed

#

# Export them so that they will be available at ppp-on-dialer time.

export TELEPHONE ACCOUNT PASSWORD

#

# This is the location of the script which dials the phone and logs

# in. Please use the absolute file name as the $PATH variable is not

# used on the connect option. (To do so on a oot account would be

# a security hole so don ask.)

#

DIALER_SCRIPT=/etc/ppp/ppp-on-dialer

#

# Initiate the connection

#

# I put most of the common options on this command. Please, don

# forget the lock option or some programs such as mgetty will not

# work. The asyncmap and escape will permit the PPP link to work with

# a telnet or rlogin connection. You are welcome to make any changes

# as desired. Don use the defaultroute option if you currently

# have a default route to an ethernet gateway.

#

exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS0 38400

asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP

noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT

———————————————————————————–

带#的行是注释,蓝颜色的地方是你应该注意并根据实际情况修改的。

文件的前一部分定义了ISP的电话和用户信息,并用export命令将这几个变量输出到当前运行的环境中,使它们可以在其他文件中被使用,一会儿我们将看到在ppp-on-dialer文件中使用了这几个变量。

在文件的中间部分定义了变量DIALER_SCRIPT,它的值是ppp-on-dialer的完整路径,你要根据你的具体情况加以修改。

文件尾部就是我们曾经见过的pppd和它一大堆的参数,exec是执行的意思,每一行末尾有一个“”,表示这一行没有结束,下一行的内容是这一行的继续,不算两行。这里我们需要修改的是modem的串行口设备文件和速率,串口速率我一般都写成115200,不要认为这是modem的速率,这只是串口速率,修改这个值不能提高你的modem速率。其他参数有些我们已经做过说明,connect $DIALER_SCRIPT的意思是通过执行DIALER_SCRIPT所指的拨号脚本,实现拨号。通过connect参数,把ppp-on和ppp-on-dialer两个脚本联系起来,实现整个拨号连接过程。

chat脚本ppp-on-dialer

现在你应该明白ppp-on和ppp-on-dialer的关系了,下面就看看ppp-on-dialer是怎么实现自动拨号的:

———————————————————————————–

#!/bin/sh

#

# This is part 2 of the ppp-on script. It will perform the connection

# protocol for the desired connection.

#

exec chat -v

TIMEOUT 3

ABORT BUSYr

ABORT NO ANSWERr

ABORT RINGINGrnrnRINGINGr

rAT

OK-+++c-OK ATH0

TIMEOUT 30

OK ATDT$TELEPHONE

CONNECT

ogin:–ogin: $ACCOUNT

assword: $PASSWORD

———————————————————————————–

整个脚本就是一个程序chat和它的一堆参数。

-v是说把调试信息写入/var/log/messages。TIMEOUT 3是说以下操作的超时时间为3秒。3个ABORT是说如果收到服务器的BUSY等消息就退出chat程序。“”是什么都不等,直接发出“AT”指令,开始与服务器对话。当收到OK-+++c-OK字符串后发出ATH0指令。然后TIMEOUT 30将超时时间设成30秒。在收到OK字符后,发出ATDT$TELEPHONE指令,ATDT的意思是拨电话,号码就是在ppp-on脚本中定义的那个TELEPHONE。电话拨通后会收到CONNECT字符,发出一个空串“”。下面就是收到验证用户的提示并发出用户信息了。这里要改成你的ISP的具体提示,比如有的提示用户名不是用Login:而是用username:,你需要根据实际情况修改。还有的ISP在问完用户名和密码后还有别的提示,比如263就会问你

Please select Protocol:

1:PPP;

2:SLIP;

3:Exit;

Please select(1~3):

根据263的提问修改后的最后几行就像下面这样:

username: $ACCOUNT

assword: $PASSWORD

" select(1~3):" 1

注意不要落掉password行最后的“”。因为在select(1~3):中有~等特殊字符,所以要把整个字符串加上引号表示是一个整体。

现在我们明白了整个过程:

由pppd调用chat程序

chat程序负责拨号登录,启动服务器端的pppd,然后chat结束

由pppd继续chat的工作,与服务器端的pppd进行握手,建立ppp连接

拨号上网

上面我们说明了原理,下面就来试一试。

我们将/usr/doc/ppp-2.3.7/scripts/的几个文件拷到自己喜欢的地方,比如/etc/ppp/,按照上面所说的进行修改。然后将这三个脚本文件改成可执行的,用如下命令:

chmod +x ppp-o*

在脚本所在目录运行

./ppp-on

你将会听到modem拨号的声音。与此同时,你应该对这个过程进行监视,在另外一个虚拟终端上(Alt+F1~F6可以切换6个虚拟控制台,X-Windows就运行另一个终端程序就可以了)运行:

tail -f /var/log/messages

来监视chat和pppd程序的运行情况,你会看到chat程序与拨号服务器的对话过程,并将看到pppd的连接过程,最后pppd报告说本机和远端机器的IP被分配好了,就像我们在测试的时候看到的那样,这时ppp连接就建立好了。接着你就可以用ifconfig和route命令察看网络接口和路由,ping网上的其他IP地址。你的拨号成功了!

断开连接

断开连接就用ppp-off脚本,运行

./ppp-off

在执行tail -f /var/log/messages的那个终端上你就会看到断开连接的信息,告诉你这次连接持续了多长时间,发送接收了多少字节等。

至此,ppp的自动化就完成了。有关pppd和chat的其他参数的意思请查阅man手册,这里就不再解释了。

1.7设置域名解析(DNS)

到这里我们已经可以像win95一样方便的使用拨号网络了。但是还有一个域名服务器问题没有解决。Win95上拨号时,域名服务器的地址是服务器传过来的,但linux下就没有这么方便,域名服务器需要自己设定。

设置域名服务器

/etc/resolv.conf文件是存放域名服务器地址的地方,它的内容看起来是这样的:

————————————————————-

domain your.isp.domain.name

nameserver 202.96.0.133

nameserver 202.96.1.133

————————————————————-

你所需做的就是把你的ISP的域名服务器地址填到这个文件里。如果你连在一个局域网里,并设置了局域网的域名服务器地址,不要担心,就把你的ISP的域名服务器地址加在下面好了,查找域名时是按先后顺序的。

现在你的域名也设好了,你可以ping某个域名了。从此你将享受完整的网络功能!

自动化

你也许想只在拨号才加上域名服务器地址,别的时间不想要,除了手动之外,还可以让这个过程自动化。你可以建立/etc/ppp/ip-up.local和/etc/ppp/ip-down.local两个可执行的脚本文件,pppd启动之后,会执行/etc/ppp/ip-up.local里的命令,而pppd结束时,会执行/etc/ppp/ip-down.local里的命令。你可以先生成一个包含域名服务器的文件,在ip-up.local中将这个文件改成/etc/resolv.conf,并将/etc/resolv.conf保存下来。在ip-down.local中再将保存的/etc/resolv.conf恢复回来。这样就可以实现添加域名服务器的自动化了。

1.8其他问题

至此,linux下如何拨出(客户)就介绍完了。我想不出还有什么问题了。呵呵。如果你还有什么问题,可以与我联系,希望我能会(我也并非全能呀,呵呵)。

linux下如何拨入(服务器)

这一节我们的目的是将自己的linux设置成跟ISP一样的拨号服务器。我们假设你在公司用linux设置了拨号服务器,然后在家里通过拨号连到公司的拨号服务器上,进而访问公司的局域网,如此就可以实现“家庭办公”了。如果公司是连在Internet上的,你就可以浏览Internet了。 “设置基本的拨号服务器”这一节就告诉你怎样实现这一功能。“回拨(callback)”这一节讲述怎样节省联网所需的电话费。

因为我们已经讲过如何用linux做ppp客户,所以这一节我们用win95做客户来配合讲述linux的服务器,因为毕竟win95做客户还是多数么。

2.1设置基本的拨号服务器

在这一节里,我们一步一步的建立拨号服务器,力求做到条理清楚。做拨号服务器的方法很多,这里讲的只是其中一种方法而已。

我们首先要确保linux的内核支持ppp,并且支持IP转发(IP forwording),这个功能让你通过linux拨号服务器访问局域网上其他的机器,进而访问Internet,而不只是拨号服务器本身。幸好现在的linux发布版本所带的内核都支持这些功能,如果你使用自己编译的内核,你就要注意这个问题了。

在内核支持IP转发之后,还要激活IP转发这个功能。使用如下命令:

echo "1">/proc/sys/net/ipv4/ip_forward

如果使用RedHat,可以将/etc/sysconfig/network文件里的FORWARD_IPV4=false改成true就行了。之后需要重启动以激活IP转发。

使linux能够接受电话拨入

要实现这个功能,要用到一个叫getty的程序,它的功能就是向用户显示login:和password:这样的登录提示,并调用login程序实现登录。我们平时在局域网里用telnet登录某台unix主机时,也是这个过程。只不过现在我们走的物理线路不同,我们走的是电话线—〉modem—〉串口,而telnet程序走的是网线和网卡。

目前linux上有三种getty:getty_ps,agetty,mgetty。getty_ps就是所说的getty,另外两种也都实现了getty的功能。其中mgetty的功能比较强大,我们决定就用mgetty了。

RedHat6包含了mgetty的四个软件包,mgetty-1.1.14-8.i386.rpm是必须安装的,如果你要用回拨功能,就要安装mgetty-sendfax-1.1.14-8.i386.rpm,callback程序包含在这个包里(不明白为什么在这个包里)。我反正不管那么多,rpm -Uvh mgetty*,全安装上算了。

我们现在要做的就是使modem所接的那个串口可以接受外来连接。打开/etc/inittab,你会看到这样的几行:

# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

在这几行之后,加上如下一行:

7:2345:respawn:/sbin/mgetty ttyS1

它的意思就是让mgetty在串口ttyS1上监听,等待连接,如果有连接请求,mgetty就向用户提示用户名和密码。Mgetty也有好多参数,预知详情,请看mgetty的手册页。注意:程序的名字是megtty而不是上面几行写的mingetty。Mingetty是RedHat自己的终端程序,它不支持modem连接。我的一个同学曾经把mgetty错敲成mingetty,结果怎么拨电话,linux也不接。另外,这行开头的数字“7”并不是一定的,只要是在文件中没有重的,唯一的就行了,可以是两个字符或数字。

改好之后,要使修改有效,运行:

init q

为了从远端登录,我们要有一个账号,用useradd命令加一个叫ppp的用户,并用passwd命令为它设置口令。

下面我们就用win95的客户来试一试,我们在win95下新建一个连接,电话号码当然要填对,然后右键单击这个连接,依次选择属性-〉常规-〉设置-〉选项,将“拨号后出现终端窗口”打上勾,再按两次确定关闭对话框。现在双击这个连接,用户名和密码不用填,直接按“连接”,你会听到拨号声和一阵乱叫,接着会弹出一个黑底白字的窗口,这就是登录的终端窗口了!你会看到这与你登录linux时是一样的,输入用户名ppp和密码,你看到的是shell提示符,你通过modem登录到linux主机上了!但这种终端的形式上网,并不是ppp连接,相信你一定不会满意,你需要的是有WWW,FTP等丰富功能的网络。我们下面就来看看怎么实现ppp连接,现在在shell提示符下输入exit退出。

启动pppd与客户建立ppp连接

上面一小节已经实现跟telnet差不多的终端联网,但还很不够,现在我们要用pppd实现端对端的连接,实现真正的联网。

为了给客户分配IP地址,我们要编辑一个新文件:/etc/ppp/options.ttyXX。文件名中的ttyXX就是你所用到的串口设备文件,我的就是/etc/ppp/options.ttyS1。在这个文件中给出一个IP地址对,就像这样:

10.39.1.1:10.39.1.123

冒号前面的的拨号服务器的IP地址,后面的是要分配给客户的IP地址。

在前面讲述ppp客户时我们已经清楚,pppd程序要在服务器和客户机分别启动,并进行握手,实现连接。客户的pppd程序现在是用win95的拨号网络,我们就不管了,服务器端的pppd怎么启动呢?诚然,你可以登录后手工输入下面命令来启动pppd:

pppd debug proxyarp asyncmap 0 lock modem crtscts

但这似乎太过麻烦,我们需要pppd能自动启动,下面就来看看怎么搞!

打开/etc/passwd文件,找到用户ppp的哪一行,差不多是这样的:

ppp:x:500:500::/home/ppp: /bin/bash

你可以看出用户ppp使用的shell程序是bash,我们现在要做的就是用pppd换掉这个bash,这样当用ppp登录时,就不会执行bash,而是执行pppd,如此,pppd就在服务器端启动了。

具体我们可以这样做:在/etc/ppp建立一个ppplogin文件,内容如下:

#!/bin/sh

exec /usr/sbin/pppd debug passive asyncmap 0 proxyarp lock modem crtscts

pppd的参数大多都见过,其中proxyarp的意思就是让ppp客户通过ppp服务器访问网上其他机器,而不只是ppp服务器一台。将ppplogin设成可执行的:

chmod +x ppplogin

用ppplogin替换用户ppp的登录shell,就像这样:

ppp:x:500:500::/home/ppp:/etc/ppp/ppplogin

由于pppd执行必须要root权限,还要将pppd设成以root权限执行:

chmod u+s /usr/sbin/pppd

替换了登录shell和修改pppd属性之后,我们来试一试。与上一小节一样的进行拨号,在输入了用户名和密码之后,你是否看到pppd所特有垃圾字符?并且一行一行的没完?如果看到的话,恭喜你!服务器端pppd已经启动了!你接着点继续按钮,也就是启动客户的pppd,与服务器的pppd进行握手,一会儿,你就会看到登录网络成功,那个熟悉的绿色小电脑又出现了!你是不是意识到什么?对了!你可以上网了!如果你使用linux做客户的话,工作就完成了。但是由于win95的一些特殊要求,我们还要针对win95做一些特殊设置。

针对win95客户的特殊设置

前面谈到了win95与linux做客户,对域名服务器的要求是不一样的。Win95要求域名服务器在连接的时候传给它,这在linux拨号服务器上怎么做呢?

如果你看过pppd的手册页,你可能已经看到pppd有个参数ms-dns,它就是用来传dns给客户的。在你的ppplogin里加上这个参数就可以了,比如:

#!/bin/sh

exec /usr/sbin/pppd debug passive asyncmap 0 proxyarp lock

modem crtscts ms-dns 10.39.0.133 ms-dns 10.39.1.133

两个dns第一个是主,第二个是辅。

在前面讲win95拨号时,我们使用“拨号后出现终端窗口”,然后手工输入才登录上的,而别的ISP却不是这样。我们把“拨号后出现终端窗口”选项去掉,按照常规在拨号对话框里填入用户名和密码,但这样会出错,怎样才能按照常规那样拨号不用弹出终端窗口呢?

Mgetty有几个配置文件在/etc/mgetty+sendfax,其中login.config是比较重要的。在login.config中有下面这样一行:

#/AutoPPP/ – a_ppp /usr/sbin/pppd auth -chap +pap login debug modem crtscts proxyarp lock

我们把行首的注释#去掉就行了。由于拨号连接可以是ppp也可以是slip,Win95客户与拨号服务器对话的时候,要求自动使用ppp,win95客户向拨号服务器发出某种信号,让拨号服务器自动启动ppp。我们这里所做的就是让mgetty响应这个信号并启动pppd实现AutoPPP。我们看到这里的pppd程序的参数多了几个:auth -chap +pap login,我们只要知道这些跟win95的安全认证有关系就行了,具体含义请看pppd的手册页。为了支持这几个参数,需要编辑/etc/ppp/pap-secrets文件。这个文件是pap认证用的,我们不做研究,在里面填上一行最通用的就行了,如果你要对用户进行安全认证,请参阅pppd所带的例子和相关的文档。这个文件的内容就像这样:

# Secrets for authentication using PAP

# client server secret IP addresses

* * "" *

现在我们用win95建立一个新的拨号连接,就像连接别的ISP一样输入用户名和口令,也可以在“保存口令”上打上勾,好了,连接吧!你会看到你的linux拨号服务器工作的像别的ISP一样好!

2.2回拨(callback)

Callback就是当用户拨号连到拨号服务器时,服务器先断掉连接,然后再拨回给用户,用户的modem接收这个呼叫,从而建立拨号连接。如此,电话费就是拨号服务器来付了,这样就给所谓“家庭办公”创造了有利条件,你可以在家里用回拨的方式连到公司进行办公,而不必担心电话费了。

服务器端设置

在设置之前,你应该确保mgetty的callback程序安装好了。

将下面这行内容加到/etc/mgetty+sendfax/login.config中:

call_hxf – - /usr/sbin/callback -d -l ttyS1 -s 115200 -S 62345678

前面的call_hxf是指为mgetty增加一个叫call_hxf的用户入口。这个用户只是mgetty用来启动callback程序的,不是linux系统中的用户,不要真的用useradd添加一个call_hxf用户,这个call_hxf用户名只是mgetty用的,不是系统的。当用户通过modem连到linux上,mgetty向用户提示输入用户名时,如果输入的是call_hxf,mgetty就调用/usr/sbin/callback程序来处理回拨。参数-d是指在/var/log/mgetty.ttyS1留下调试信息,-l ttyS1是指使用ttyS1为拨出设备,-s 115200是串口速率,-S 62345678是指定的回拨电话号码,如果没有-S参数,mgetty就会提示你输入回拨的目的电话号码。基于安全的考虑,建议在这里指定回拨的目的号码,不然的话,别人用call_hxf登录同样也可以使用回拨了。关于Callback的详细信息请察看手册页。

现在我们来试一试,在win95,还是使用那个“拨号后出现终端窗口”的拨号连接,当出现终端窗口并提示login时,输入call_hxf,如果你在login.config中没有指定回拨号码,现在就有提示问你回拨的电话号码了,输入现在你使用的号码,此时服务器断开电话准备回拨,但是win95会认为服务器断了,弹出一个对话框告诉你服务器断开连接,请稍候在试。一会儿,你就会惊喜的听到你的电话在震铃,服务器正在回拨,但是win95已经不理会了,看来win95上还要搞一搞才能协调起来。现在你还是把linux服务器上的那个callback进程kill了吧,要不然它会一直播下去的,呵呵。

客户端设置

服务器准备回拨的时候要把电话先断掉,我们现在的目的是让win95检测不到这个变化,这样win95就不会退出拨号程序了。我们打开所使用的拨号连接的属性-〉常规-〉设置-〉连接-〉高级-〉附加设置,将AT&C这个命令写在附加设置里。这个命令的意思就是让串口的载波检测(Carrier Detect)那根线保持有效,这样win95就会认为电话一直是通的,服务器回拨时断掉电话win95就检测不出来了,这样win95的拨号客户程序就可以继续与服务器对话并建立连接了。

下面的工作就是使win95能接听服务器回拨的电话,并通过服务器的用户认证。我们建立一个脚本文件callback.scp如下:

proc main

waitfor "ogin: "

transmit "call_hxf^M"

waitfor "number for callback: "

transmit "62345678^M"

waitfor "RING"

transmit "ATA^M"

waitfor "ogin: "

transmit $USERID

transmit "^M"

waitfor "assword: "

transmit $PASSWORD

transmit "^M"

endproc

我们在所使用的拨号连接的属性-〉制作脚本里填上这个文件的全路径和文件名。你需要根据你的情况修改蓝色的地方

这个脚本很简单,它由一个一个的waitfor–transmit对组成,收到登录提示符login:,就发送callback的用户名call_hxf。(这里login没有第一个字母l,这是因为字母l有可能是大写的L,就像这样:Login:,为了不出错,干脆就不要字母l了。同样,下面的password也没有字母p。)如果在服务器没有指定回拨的电话号码,现在就要问你了,在收到number for callback:这样的字符串后,发送自己的电话号码。如果服务器指定了号码,这两行就不要了。当你给了回拨号码后(或服务器已经指定),服务器就挂断电话,进行回拨。客户端的modem检测到一个震铃,就向串口发送一个RING字符串,win95从串口读到这个字符串,就会向modem发出ATA命令,让modem接听这个电话。这样连接就建立了。之后,mgetty向客户提示输入用户名和密码,这里的$USERID和$PASSWORD,就是引用你在拨号的那个对话框里填入的用户名和密码。“拨号后出现终端窗口”那个选项在这里就不需要了。那个“^M”可以理解成回车的意思。

现在我们来试一试,双击刚修改过“AT&C”的拨号连接,在用户名和密码填入ppp和它的密码,这个ppp用户的登录shell是我们曾经改成ppplogin的。连接后你首先听到你的modem在拨出,并与服务器对话,一会儿,你就听到你的电话响了起来,这是服务器在回拨,你的modem立刻接起这个电话,并与服务器对话,安全认证通过之后,你熟悉的那个绿色小电脑又出现了!你的回拨成功了!在这个过程中,win95的拨号程序一直告诉你正在验证用户名和口令,因为它不知道我们在做回拨,所以只好认为是在验证口令了。在整个回拨过程中,不要随便按“取消”,因为服务器端的callback程序并不知道你取消了,它会一直拨你的电话的。这个callback程序的反应速度不是很快,在服务器断掉电话到你听到回拨的电话铃声,可能要等20秒到30秒的样子,需要耐心等待。在回拨过程中,你会发现有一个被最小化的终端窗口,它就是你的callback.scp脚本文件执行时的窗口,你会在这里看到“NO CARRIER”,这是说没有载波,因为你的设置了“AT&C”,所以没有载波拨号程序也不会退出。在你听到回拨的电话铃声时,你会在这个窗口里看到“RING”,这表示modem收到一个震铃。接着你的callback.scp就会发出“ATA”接听这个电话,如此这般,你的PPP就通了。

我们只讲述了win95的客户怎么配置回拨,linux下不准备说了,但是linux的pppd软件包还带了几个脚本文件是用来支持回拨的。我们在搞清楚回拨的工作过程之后,参考这些脚本程序,就不难配置linux客户的来支持回拨了。

2.3小结

至此,linux拨号服务器以及回拨服务器的配置就讲完了。大概你可能觉得做服务器不如做客户条理清楚,头绪比较繁杂。的确,linux配置拨号服务器细碎的地方比较多,下面就把服务器的配置过程整理一下:

使IP转发有效echo "1">/proc/sys/net/ipv4/ip_forward,RedHat可以修改/etc/sysconfig/network

安装mgetty。编辑/etc/inittab文件,加入7:2345:respawn:/sbin/mgetty ttyS1这一行。init q使修改有效。

编辑拨号登录文件ppplogin,内容就是执行pppd程序。将ppplogin设置成可执行chmod +x ppplogin。将pppd程序设置成以root权限执行chmod u+s /usr/sbin/pppd。

用useradd加一个拨号用户,比如ppp。用passwd为这个用户设置密码。编辑/etc/passwd文件,修改此用户的登录shell为ppplogin。

为客户分配IP地址,编辑文件:/etc/ppp/options.ttyXX,填入IP地址对。

为支持AutoPPP,修改/etc/mgetty+sendfax/login.config文件,把AutoPPP前的#去掉。再编辑/etc/ppp/pap-secrets文件,加入一行* * "" *,以支持AutoPPP。

以上是设置基本的拨号服务器的步骤,完成这些设置后,就可以进一步设置回拨服务器了,下面是设置回拨服务器的步骤。

Linux服务器:编辑/etc/mgetty+sendfax/login.config,加入一个回拨用户,就是类似这样的一行:call_hxf – - /usr/sbin/callback -d -l ttyS1 -s 115200

Win95客户:打开所使用的拨号连接的属性-〉常规-〉设置-〉连接-〉高级-〉附加设置,将AT&C这个命令写在附加设置里。

Win95客户:编辑并使用回拨脚本,如本文所述的callback.scp。

现在,你可以按照这些步骤来轻松的配置你的拨号服务器甚至是回拨服务器了!

至此,linux下的拨出和拨入就全部介绍完了。本文是以实用为目的,介绍我的一些经验,并没有讲述很多理论。如果有错误或是不足还请指出,也让我提高提高。希望这篇文章对你有所帮助。谢谢。

2007/12/10路由网络

没有评论
42 views

专用Cisco路由器的替代品Zebra

动态、健壮的路由对于 Internet 网络来说极其重要,因此任何一个初涉此领域的网络工程师不仅需要理解路由的概念,而且要有能力在真正的环境下驾驭它。 但是,路由领域由高端网络设备供应商(比如 Cisco)提供的产品一统天下,这就意味着对于大多数人来说,只能在学校或者实验室环境中才能学习路由,而且还要一直受到实践时间和实践条件的困扰。

我们在组织一门关于 TCP/IP 路由的课程时就遇到了这样的困难。在一个小型的测试环境下,我们想演示在使用路由信息协议(RIP)和开放式最短路径优先协议(OSPF)时各种不同的负载平衡情形。但是,我们手头上的 Cisco 路由器数量有限。不过我们有一些 PC 机可以使用,于是我们开始想办法用 Linux 来仿真 Cisco 路由器以解决这个问题。

开始时我们尝试使用传统的路由和网关守护进程来构建我们的测试网络,但我们很快就发现对它们进行配置比较困难,而且它们的能力有限,我们的工作得不偿失。于是我们决定尝试使用更先进的方法来完成我们的测试网络,很幸运,我们找到了 Zebra。

什么是 Zebra?

Zebra 是一个 TPC/IP 路由软件,支持 BGP-4、BGP-4+、OSPFv2、OSPFv3、RIPv1、RIPv2 和 RIPng。它的发行遵循 GNU 通用公共许可协议,可以运行于 Linux 以及其他一些 Unix 变体操作系统上。Zebra 是那些系统最新的发行版本中的路由软件。最新版本的Zebra以及文档可以从GNU Zebra网站上下载http://www.zebra.org/

最初的 Zebra 软件包由 Kunihiro Ishiguro 和 Yoshinari Yoshikawa 于1996年完成。现在,这个软件包主要由 IP Infusion――CTO 是 Ishiguro 先生――在多名网络工程师以及开源志愿者的帮助下来维持。

Zebra 的设计独特,采用模块的方法来管理协议。可以根据网络需要启用或者禁用协议。

Zebra 最为实用的一点是它的配置形式同 Cisco IOS 极其类似。尽管它的配置与 IOS 相比还是有一些不同,但是这对于那些已经熟悉 IOS 的网络工程师来说在这种环境下工作将相当自如。

安装 Zebra

我们的 Zebra 测试平台是一台旧的但是依然很好用的 ThinkPad X20,其运行的是 Red Hat Linux 9。ThinkPad 有一个内置的以太网接口,我们又给它加了一块 PCMCIA 以太网卡,使之可以完成路由器的功能。在安装 Zebra 之前,我们确认两块网卡都已经被 Linux 认出并且正常工作。

在 Red Hat 9 中已经附带了 Zebra-0.93b 的 RPM 安装包。这个版本与 Zebra 网站上提供的版本相同,因此我们决定直接使用它,而不再去从网上下载并自己编译。Zebra RPM 将安装二进制文件、脚本和配置文件,以及必需的手册、例子和文档文件。

Zebra 基本配置

zebra 守护进程是实际的路由管理者,控制着其他模块;而且用户主要通过它进行交互。我们最先需要配置 Zebra 守护进程,对应的配置文件是 /etc/zebra/zebra.conf。

Zebra RPM 包中有一个完整的配置文件样例。不过,就最简化的情形来说,我们实际上只需要创建一个包含以下几行的 /etc/zebra/zebra.conf 文件:

清单 1.一个最简的 Zebra 配置文件

hostname speedmetal

password zebra

enable password zebra

hostname 指定了当您进入交互式配置方式时的路由器名。它可以是任何一个标识,不一定要和机器的主机名相同。

assword 指定了登录进入交互式 Zebra 终端时需要的密码。

enable password 指定了当您想要改变配置时以较高级别身份访问 Zebra 所需要的密码。

创建了 /etc/zebra/zebra.conf 文件以后,我们现在可以执行下面的命令来启动 zebra 守护进程:

# service zebra start

现在通过 telnet 到我们的机器的 2601 端口就可以进入 Zebra 交互式会话。

清单 2. 一个 Zebra 会话样例

[root@speedmetal zebra]# telnet 127.0.0.1 2601

Trying 127.0.0.1…

Connected to 127.0.0.1.

Escape character is '^]'.

Hello, this is zebra (version 0.93b).

Copyright 1996-2002 Kunihiro Ishiguro.

User Access Verification

Password: zebra

speedmetal> enable

Password: zebra

speedmetal# ?

configure Configuration from vty interface

copy Copy configuration

debug Debugging functions (see also 'undebug')

disable Turn off privileged mode command

end End current mode and change to enable mode.

exit Exit current mode and down to previous mode

help Description of the interactive help system

list Print command list

no Negate a command or set its defaults

quit Exit current mode and down to previous mode

show Show running system information

terminal Set terminal line parameters

who Display who is on vty

write Write running configuration to memory, network, or terminal

speedmetal#

在交互式终端中操作很简单。要获得可用命令的提示,您可以在任何时刻按 ?键,然后命令的选项就会出现在屏幕上。如果您正在构建您自己的 Zebra 路由器,而且您有配置 Cisco 路由器的经验的话,您会觉得这个配置过程非常熟悉。

到现在为止,还只有 Zebra 被配置好并且运行起来了,但是还没有任何其他的协议。接下来将开始配置的实质内容,我们将向您介绍我们的这一过程。

MRLG 的配置和使用

Multi-Router Looking Glass,简称 MRLG,由 EnterZone 的 John Frazier 开发,是一个基于 Web 的工具,可以用来显示 Zebra 识别出来的接口和路由。MRLG 其实仅仅是 Zebra shell 的一个 Web 界面,只能使用有限的命令集,但是在我们的测试过程中,我们发现使用它是显示路由的一个快速而有效的途径。所以,在开始配置 Zebra 协议之前,我们先向您介绍如何安装 MRLG。

MRLG 需要 Net::Telnet Perl 软件包的支持才能与 Zebra shell 通信。

由于 MRLG 是作为一个 CGI 应用程序来运行,因此我们还需要安装一个 Web 服务器。如果您是自己在尝试这些事情,您可以直接使用 Red Hat 9 自带的 httpd RPM。

我们将 /usr/share/doc/zebra-0.93b/tools 目录中的 mrlg.cgi 文件拷贝到 /var/www/cgi-gin 目录下。然后,我们修改 mrlg.cgi 文件的第36行,将

$url="http://www.sample.com/mrlg.cgi";

修改为:

$url="http://127.0.0.1/cgi-bin/mrlg.cgi";

我们还修改了第168行到第174行的部分内容,如下所示:

if ($Form{'router'} eq 'router1') { $server = '127.0.0.1'; $login_pass = 'zebra'; $bgpd = "2605"; $zebra = "2601"; $full_tables=1;

图 1. Multi-Router Looking Glass

http://www.vlan9.com/ArtImage/20051012/92_1.jpg

基本的实验室配置

我们的实验室配置包括两个 Cisco 3620 路由器和一个 ThinkPad X20(有一个内置的以太网接口和一个 Home-and-Away PCMCIA 以太网卡)。两个路由器通过串行线联接起来,并且每个路由器通过以太网连接到 ThinkPad。见我们的连接图:

图 2. 实验室连接图

http://www.vlan9.com/ArtImage/20051012/92_2.gif

使用 Zebra 配置接口

我们首先从 RIP 协议开始讲述使用 Zebra 来管理路由。如前所述,我们已经在 ThinkPad 上安装了 Zebra。由于我们在 ThinkPad 上还需要另一个网络接口,我们安装了一个虚拟的网络设备,如下:

# modprobe dummy

# ifconfig dummy0

我们 telnet 到 Zebra 端口来开始配置。我们按照以下顺序与 Zebra 会话:

清单 3. 配置 IP 接口

User Access Verification

Password: zebra

speedmetal> enable

Password: zebra

speedmetal# configure terminal

speedmetal(config)# interface eth0

speedmetal(config-if)# ip address 192.168.2.1/30

speedmetal(config-if)# quit

speedmetal(config)# interface eth1

speedmetal(config-if)# ip address 192.168.1.1/30

speedmetal(config-if)# quit

speedmetal(config)# interface dummy0

speedmetal(config-if)# ip address 10.0.2.1/24

speedmetal(config-if)# write

Configuration saved to /etc/zebra/zebra.conf

speedmetal(config-if)# end

speedmetal# show run

Current configuration:

!

hostname speedmetal

password zebra

enable password zebra

!

interface lo

!

interface eth0

ip address 192.168.2.1/30

!

interface dummy0

ip address 10.0.2.1/24

!

interface eth1

ip address 192.168.1.1/30

!

!

line vty

!

end

要注意的是我们没有用常规的方法设置 ThinkPad 的 IP 地址;而是通过 Zebra 来设置它们。这些设置保存在 /etc/zebra/zebra.conf 配置文件中,因此每次当 Zebra 服务启动时,这些设置就会生效。

Zebra.conf 文件中由 Zebra 修改的部分如下:

清单 4. 由 Zebra 修改过的 /etc/zebra/zebra.conf 文件

!

! Zebra configuration saved from vty

! 2003/08/20 00:07:51

!

hostname speedmetal

password zebra

enable password zebra

!

interface lo

!

interface eth0

ip address 192.168.2.1/30

!

interface dummy0

ip address 10.0.2.1/24

!

interface eth1

ip address 192.168.1.1/30

!

!

line vty

!

我们还可以用 MRLG 来检查接口的状态,方法是:选择默认值,"router1",选中单选按钮 "show interface",然后点击 "Execute"。

使用 Zebra 安装配置 RIP 路由

我们已经在 ThinkPad/router 上安装配置了网络接口,接下来我们再对它进行配置,使之可以与 RIP 更新协同工作。正如我们已经提到过的,Zebra 使用单独的守护进程来实现路由协议,所以我们必须首先为 RIP 守护进程在/etc/zebra 目录下创建一个简单的配置文件ripd.conf。

清单 5. 一个基本的 /etc/zebra/ripd.conf 文件

hostname speedmetal-rip

password zebra

enable password zebra

然后我们启动 ripd 守护进程 :

# service ripd start

完成后,我们可以 telnet 到我们的 Zebra 路由器的 2602 端口来配置 RIP 守护进程。

清单 6. 配置 RIP

User Access Verification

Password: zebra

speedmetal-rip> enable

Password: zebra

speedmetal-rip# configure terminal

speedmetal-rip(config)# router rip

speedmetal-rip(config-router)# network 10.0.0.0/8

speedmetal-rip(config-router)# network 192.168.0.0/16

speedmetal-rip(config-router)# end

speedmetal-rip# show run

Current configuration:

!

hostname speedmetal-rip

password zebra

enable password zebra

!

interface lo

!

interface eth0

!

interface dummy0

!

router rip

network 0.0.0.0/0

network 192.168.0.0/16

!

line vty

!

end

speedmetal-rip# write

Configuration saved to /etc/zebra/ripd.conf

speedmetal-rip#

生成的 ripd.conf 配置文件如下所示:

清单 7. 生成的 /etc/zebra/ripd.conf 文件

!

! Zebra configuration saved from vty

! 2003/08/19 13:50:30

!

hostname speedmetal-rip

password zebra

enable password zebra

!

interface lo

!

interface eth0

!

interface eth1

!

interface dummy0

!

router rip

network 10.0.0.0/8

network 192.168.0.0/16

!

line vty

!

在 Cisco 路由器上安装配置 RIP 路由

我们将两个 Cisco 路由器称为 "A" 和 "B",为了简化这两个路由器的配置,我们只配置了一些让路由器能正常运行的基本设置,包括设置接口的 IP 地址、环回地址,以及用于串口通信的串口时钟频率。

清单 8. 配置路由器 A

Router#config terminal

Router(config)#hostname RouterA

RouterA(config)#int s0/0

RouterA(config-if)#ip address 192.168.0.1 255.255.255.252

RouterA(config-if)#no shut

RouterA(config-if)# interface fastEthernet 0/0

RouterA(config-if)#ip address 192.168.2.2 255.255.255.252

RouterA(config-if)#no shut

RouterA(config-if)#int loopback 0

RouterA(config-if)#ip address 10.0.0.1 255.255.255.0

RouterA(config-if)#end

RouterA#write

类似地,我们配置好路由器 "B"。

清单 9. 配置路由器 B

Router#configure terminal

Router(config)#hostname RouterB

RouterB(config)#int s0/0

RouterB(config-if)#ip address 192.168.0.2 255.255.255.252

RouterB(config-if)#no shut

RouterB(config-if)#int fastEthernet0/0

RouterB(config-if)#ip address 192.168.1.2 255.255.255.252

RouterB(config-if)#no shut

RouterB(config-if)#int loopback 0

RouterB(config-if)#ip address 10.0.1.1 255.255.255.0

RouterB(config-router)#end

RouterB#write

在 3620 路由器上配置 RIP 与 Zebra 中的命令极其类似。我们通过控制台线缆访问两台3620,执行如下命令:

清单 10. 在路由器 A 上完成 RIP 所需的配置

RouterA#conf t

Enter configuration commands, one per line. End with CNTL/Z.

RouterA(config)#router rip

RouterA(config-router)#network 10.0.0.0

RouterA(config-router)#network 192.168.0.0

RouterA(config-router)#network 192.168.2.0

RouterA(config-router)#version 2

RouterA(config-router)#end

RouterA#write

然后是路由器 B:

清单 11. 在路由器 B 上完成 RIP 所需的配置

RouterB#conf t

Enter configuration commands, one per line. End with CNTL/Z.

RouterB(config)#router rip

RouterB(config-router)#network 10.0.1.0

RouterB(config-router)#network 192.168.0.0

RouterB(config-router)#network 192.168.1.0

RouterB(config-router)#version 2

RouterB(config-router)#end

RouterB#write

router rip 命令启动配置 RIP 的过程。network 命令告诉路由器哪些是 RIP 要传播的网段。

RIP 传播路由

现在 Cisco 路由器和 Zebra 都已经配置好,我们接下来检验传播的路由。在 MRLG 中,我们选择 "show ip route" 然后点击 "Execute"。生成如下报告:

清单 12. Zebra 反映的 RIP 路由

Codes: K – kernel route, C – connected, S – static, R – RIP, O – OSPF,

B – BGP, > – selected route, * – FIB route

R>* 10.0.0.0/24 [120/2] via 192.168.2.2, eth0, 00:11:05

R>* 10.0.1.0/24 [120/2] via 192.168.1.2, eth1, 00:02:08

C>* 10.0.2.0/24 is directly connected, dummy0

K * 127.0.0.0/8 is directly connected, lo

C>* 127.0.0.0/8 is directly connected, lo

R>* 192.168.0.0/30 [120/2] via 192.168.2.2, eth0, 00:11:05

C>* 192.168.1.0/30 is directly connected, eth1

C>* 192.168.2.0/30 is directly connected, eth0

通过 RIP 得到的路由用一个 R 来标记。

要注意的是,通过路由器 A 和路由器 B 的广播,Zebra 现在知道了 10.0.0.0/24 和 10.0.1.0/24 两个网段。测试时,我们从 ThinkPad Zebra 路由器上 ping 10.0.0.1 和 10.0.1.1,并从两个路由器上 ping 10.0.2.1(ThinkPad 的虚拟网络接口)。

为了测试路由的 failover,我们把连接网段 10.0.0.0/24 的路由器 A 上的网络连接断开。经过总计约两分钟的过期时间以后,Zebra 得到了另一个可达 10.0.0.0/24 的路由,这个新的路由是通过路由器 B 得到的。注意在下面的清单中,Zebra 通过 192.168.1.2 到达 10.0.0.0/24,而不是先前的路径。

清单 13. Zebra 反映的 RIP 路由

Codes: K – kernel route, C – connected, S – static, R – RIP, O – OSPF,

B – BGP, > – selected route, * – FIB route

R>* 10.0.0.0/24 [120/3] via 192.168.1.2, eth0, 00:00:26

R>* 10.0.1.0/24 [120/2] via 192.168.1.2, eth1, 00:06:02

C>* 10.0.2.0/24 is directly connected, dummy0

K * 127.0.0.0/8 is directly connected, lo

C>* 127.0.0.0/8 is directly connected, lo

R>* 192.168.0.0/30 [120/2] via 192.168.1.2, eth1, 00:00:26

C>* 192.168.1.0/30 is directly connected, eth1

C>* 192.168.2.0/30 is directly connected, eth0

为什么总的过期时间大于两分钟?RIP 默认的过期时间是 30 秒,但是 RIP 协议指定了在确认一个路由已经失效之前要进行 3 次重试(共 90 秒),并且还要有一段时间来清空无效的路由(还需要 240 秒)。众所周知,RIP 协议对连接失败反应迟钝,这一点在这里得到了明确的论证。

这里是在 failover 发生之前路由器 A 的路由表的输出。

清单 14. Failover 之前路由器 A 的路由表

RouterA#show ip route

Codes: C – connected, S – static, I – IGRP, R – RIP, M – mobile, B – BGP

D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area

N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2

E1 – OSPF external type 1, E2 – OSPF external type 2, E – EGP

i – IS-IS, L1 – IS-IS level-1, L2 – IS-IS level-2, ia – IS-IS inter area

* – candidate default, U – per-user static route, o – ODR

P – periodic downloaded static route

Gateway of last resort is not set

10.0.0.0/24 is subnetted, 3 subnets

R 10.0.2.0 [120/1] via 192.168.2.1, 00:00:11, FastEthernet0/0

C 10.0.0.0 is directly connected, Loopback0

R 10.0.1.0 [120/1] via 192.168.0.2, 00:00:18, Serial0/0

192.168.0.0/30 is subnetted, 1 subnets

C 192.168.0.0 is directly connected, Serial0/0

192.168.1.0/30 is subnetted, 1 subnets

R 192.168.1.0 [120/1] via 192.168.0.2, 00:00:18, Serial0/0

[120/1] via 192.168.2.1, 00:00:11, FastEthernet0/0

192.168.2.0/30 is subnetted, 1 subnets

C 192.168.2.0 is directly connected, FastEthernet0/0

failover 之后:

清单 15. Failover 之后路由器 A 的路由表

RouterA#show ip route

Codes: C – connected, S – static, I – IGRP, R – RIP, M – mobile, B – BGP

D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area

N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2

E1 – OSPF external type 1, E2 – OSPF external type 2, E – EGP

i – IS-IS, L1 – IS-IS level-1, L2 – IS-IS level-2, ia – IS-IS inter area

* – candidate default, U – per-user static route, o – ODR

P – periodic downloaded static route

Gateway of last resort is not set

10.0.0.0/24 is subnetted, 3 subnets

R 10.0.2.0 [120/2] via 192.168.0.2, 00:00:09, Serial0/0

C 10.0.0.0 is directly connected, Loopback0

R 10.0.1.0 [120/1] via 192.168.0.2, 00:00:09, Serial0/0

192.168.0.0/30 is subnetted, 1 subnets

C 192.168.0.0 is directly connected, Serial0/0

192.168.1.0/30 is subnetted, 1 subnets

R 192.168.1.0 [120/1] via 192.168.0.2, 00:00:09, Serial0/0

192.168.2.0/30 is subnetted, 1 subnets

R 192.168.2.0 [120/2] via 192.168.0.2, 00:00:10, Serial0/0

使用 Zebra 配置 OSPF 路由

完成 RIP 的配置后,我们开始配置 OSPF 路由。尽管 OSPF 和 RIP 可以同时使用,不过为了配置的简化,我们现在只使用 OSPF。我们只需要把 ripd 服务停掉,就可以在 Zebra 中将 RIP 禁用。

# service ripd stop

和前面一样,我们从 OSPF 的一个基本的配置文件开始,这次是 ospfd.conf,文件所在目录仍是 /etc/zebra。

清单 16. 一个基本的 /etc/zebra/ospfd.conf 文件

hostname speedmetal-ospf

password zebra

enable password zebra

然后,我们启动 OSPF 服务:

# service ospfd start

对 OSPF 的配置比 RIP 简单:基本上我们仅仅需要告诉 OSPF 去广播所有它知道的路由。

配置 OSPF 的端口是 2604。

下面是我们配置 OSPF 的会话。

清单 17. OSPF 配置会话

[root@speedmetal zebra]# telnet 127.0.0.1 2604

User Access Verification

Password: zebra

speedmetal-ospf> enable

Password: zebra

speedmetal-ospf# configure terminal

speedmetal-ospf(config)# router ospf

speedmetal-ospf(config-router)# network 0.0.0.0/0 area 0

speedmetal-ospf(config-router)# end

speedmetal-ospf# write

Configuration saved to /etc/zebra/ospfd.conf

speedmetal-ospf# show run

Current configuration:

!

hostname speedmetal-ospf

password zebra

enable password zebra

!

!

router ospf

network 0.0.0.0/0 area 0

!

line vty

!

end

speedmetal-ospf#

ospfd.conf 配置文件的修改结果如下:

清单 18. Zebra 修改后的 /etc/zebra/ospfd.conf 文件

!

! Zebra configuration saved from vty

! 2003/08/19 14:22:17

!

hostname speedmetal-ospf

password zebra

enable password zebra

!

!

!

interface lo

!

interface eth0

!

interface eth1

!

interface dummy0

!

router ospf

network 0.0.0.0/0 area 0

!

line vty

!

在 Cisco 路由器上配置 OSPF

我们用以下命令来移除 RIP 协议并添加 OSPF 协议:

清单 19. 移除 RIP 协议,添加 OSPF 协议

RouterA#conf term

RouterA(config)no router rip

RouterA(config)#router ospf 100

RouterA(config-router)#network 0.0.0.0 255.255.255.255 area 0

RouterA(config-router)end

我们在路由器 A 和路由器 B 上执行同样的步骤。

使用 OSPF 传播路由

我们的 MRLG 报告是这样的:

清单 20. Zebra 反映的 OSPF 路由

Codes: K – kernel route, C – connected, S – static, R – RIP, O – OSPF,

B – BGP, > – selected route, * – FIB route

O>* 10.0.0.0/32 [110/11] via 192.168.2.2, eth0, 00:00:01

O>* 10.0.1.1/32 [110/11] via 192.168.1.2, eth1, 00:02:53

O 10.0.2.0/24 [110/10] is directly connected, dummy0, 00:03:31

C>* 10.0.2.0/24 is directly connected, dummy0

K * 127.0.0.0/8 is directly connected, lo

C>* 127.0.0.0/8 is directly connected, lo

O>* 192.168.0.0/30 [110/58] via 192.168.2.2, eth0, 00:00:01

via 192.168.1.2, eth1, 00:00:01

O 192.168.1.0/30 [110/10] is directly connected, eth1, 00:03:21

C>* 192.168.1.0/30 is directly connected, eth1

O 192.168.2.0/30 [110/10] is directly connected, eth0, 00:03:31

C>* 192.168.2.0/30 is directly connected, eth0

请注意 10.0.0.1/32 和到 10.0.1.1/32 的路由被标记为 O,说明这些路由是通过 OSPF 得到的。

当我们把从 Zebra 路由器到路由器 A 的连接断开时,路由自动更新。MRLG 生成的报告如下:

清单 21. Failover 之后 Zebra 反映的 OSPF 路由

Codes: K – kernel route, C – connected, S – static, R – RIP, O – OSPF,

B – BGP, > – selected route, * – FIB route

O>* 10.0.0.1/32 [110/59] via 192.168.2.2, eth0, 00:01:10

O>* 10.0.1.1/32 [110/11] via 192.168.1.2, eth1, 00:09:46

O 10.0.2.0/24 [110/10] is directly connected, dummy0, 00:10:24

C>* 10.0.2.0/24 is directly connected, dummy0

K * 127.0.0.0/8 is directly connected, lo

C>* 127.0.0.0/8 is directly connected, lo

O>* 192.168.0.0/30 [110/58] via 192.168.1.2, eth1, 00:01:10

O 192.168.1.0/30 [110/10[ is directly connected, eth1, 00:10:14

C>* 192.168.1.0/30 is directly connected, eth1

O 192.168.2.0/30 [110/10] is directly connected, eth0, 00:10:24

C>* 192.168.2.0/30 is directly connected, eth0

由于 OSPF 是基于链路状态的,所以 failover 速度快得多:新的路由在 30 秒内就可以传播完成。

结束语

我们的出发点是一个简单的需求,那就是我们的网络课程受设备条件所限,需要寻找一个 Cisco 路由器的替代品。Zebra 是一个明智的选择,它在网络上得到了诸多的好评。正如前面我们的实验所示,Zebra 在简单网络环境中完全可以取代 Cisco 路由器,可能也能用于一些更复杂的情形。

无可否认,要转而使用 Zebra 需要一定程度的学习。使用单独的守护进程及单独的配置文件在刚开始时令人费解,但是当我们把这些理顺了以后,感觉它几乎和 Cisco IOS 没什么区别。

总的来说,Zebra 使得在 Linux 上实现动态路由成为一项简单的任务。如果您需要尽快构建一个路由器,而您的预算却有限,不妨试试 Zebra。

Zebra路由软件介绍

前言

Zebra是一个路由软件包,提供基于TCP/IP路由服务,支持RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, BGP- 4,

和 BGP-4+等众多路由协议。Zebra还支持BGP特性路由反射器(Route Reflector)。除了传统的 IPv4路由协议

,Zebra也支持IPv6路由协议。如果运行的SNMP守护进程(需要ucd-sn mp)支持SMUX协 议,Zebra还能支持路由

协议MIBs。

由以上可见,Zebra的确是一个很不错的路由系统,但比起真正的路由器就简直是小儿科,所以网络高手 就当

这文章是小孩子过家家吧,而对于象我这样的初学者(特别是没有真实设备或足够设备进行实验) 也不失为一

个学习和熟悉路由配置、路由协议的好工具。我没有实际的配置经验,对路由的技术细节也 不是十分清晰,完

全是在扔破砖头。希望路由高手指正概念错误。

安装

Zebra目前最新的版本是0.92a,它的安装非常简单,我们只需从http://www.zebra.org/下载zebra-

0.92a.tar.gz,然后执行以下命令安装(本文环境是RedHat7.2):

shell> tar xzf zebra-0.92a.tar.gz

shell> cd zebra-0.92a

shell> ./configure

shell> make

shell> make install

这样Zebra就安装好了,安装的执行文件:

shell> ls /usr/local/sbin

bgpd ospfd ripd zebra

配置文件:

shell> ls /usr/local/etc

bgpd.conf.sample ospfd.conf.sample zebra.conf.sample

bgpd.conf.sample2 ripd.conf.sample

运行

编译安装完Zebra后,可以看到有4个可执行文件和5个配置样本文件,我们就使用它的配置样本文件:

shell> cd /usr/local/etc

shell> cp zebra.conf.sample zebra.conf

Zebra的各进程有各自的终端接口或VTY,如果我们需要给连接到它们的端口设置别名的话,在/etc/ services

文件添加如下内容:

zebrasrv 2600/tcp # zebra service

zebra 2601/tcp # zebra vty

ripd 2602/tcp # RIPd vty

ripngd 2603/tcp # RIPngd vty

ospfd 2604/tcp # OSPFd vty

bgpd 2605/tcp # BGPd vty

ospf6d 2606/tcp # OSPF6d vty

然后就可以启动Zebra了:

shell> zebra -d

这样,Zebra就以守护进程启动了,其它的参数请参考zebra -h。

前言:

安装软件:

1. jdk-1_5_0_06-linux-i586.bin

2. httpd-2.2.4.tar.gz

3. apache-tomcat-6.0.13.tar.gz

4. jakarta-tomcat-connectors-1.2.15-src.tar.gz

并且放置在/usr/local目录下。

参考资料:

http://www.chinaunix.net/jh/13/236685.html

http://blog.beaplat.com/?n=888888&t=a&a=955

主要与以前的整合不一样是使用连接软件是jakarta-tomcat-connectors,其下载地址是:

http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/

一、安装JDK

大家从网上下载的JDK的LINUX版本一般是bin格式

1. 使bin文件可执行。

[root@localhost local]# chmod +x jdk-1_5_0_06-linux-i586.bin

2. 安装

[root@localhost loacl]# ./ jdk-1_5_0_06-linux-i586.bin

3. 为了操作简单,有必要为刚刚安装的jdk1.5.0_06建立一个JDK的同步目录

[root@localhost local]# ln -s jdk1.5.0_06 jdk

4. 设置环境变量JAVA_HOME(这个变量会在后面的Tomcat中用到)。

[root@localhost local]# vi /etc/profile

在该文件的末尾加上下面两行

export JAVA_HOME=/usr/local/jdk

export CLASSPATH=$JAVA_HOME/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

保存退出

5. 验证该变量的设置。如果感觉安装顺利的话,可以跳过此步。

[root@localhost local]# echo $JAVA_HOME

大家会发现返回的是空行

不要惊慌,退出去重新登录系统就可以了

或者执行命令是环境变量立即生效

[root@localhost local]source /etc/profile

[root@localhost /]# echo $JAVA_HOME

/usr/ local /jdk

[root@localhost /]java –version

java version "1.5.0_06"

Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)

Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)

如果返回这行,就说明设置成功。至此您的JDK安装完毕。

二、安装Tomcat

Tomcat的安装比较简单,解压后运行即可。

1. 将安装包拷贝到/usr/local目录下安装,

[root@localhost local]# tar -zxvf apache-tomcat-6.0.13.tar.gz

2. 为解压后得到的apache-tomcat-6.0.13创建一个名为tomcat的同步目录。

[root@localhost local]# ln -s apache-tomcat-6.0.13 tomcat

3. 设置环境变量CATALINA_HOME,并验证

[root@localhost local]# vi /etc/profile

在文件最后加入如下一行

export CATALINA_HOME=/usr/local/tomcat

保存退出

验证CATALINA_HOME的过程跟上面验证JAVA_HOME的过程相同。

4. 启动并测试安装结果

[root@localhost local]# cd ./tomcat/bin

[root@localhost bin]# ./startup.sh

Using CATALINA_BASE: /usr/local/tomcat

Using CATALINA_HOME: /usr/local/tomcat

Using CATALINA_TMPDIR: /usr/local/tomcat/temp

Using JAVA_HOME: /usr/java/jdk

[root@localhost bin]# netstat -tnl

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

tcp 0 0 192.168.1.254:53 0.0.0.0:* LISTEN

tcp 0 0 192.168.2.254:53 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN

tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN

tcp 0 0 :::8009 :::* LISTEN

tcp 0 0 :::8080 :::* LISTEN

tcp 0 0 :::22 :::* LISTEN

port 8080 and 8009已经LISTEN了

6.打开浏览器,敲入主机地址和端口号8080,回车

如:http://192.168.1.254:8080

如果出现如下画面则说明,安装成功。

三、安装Apache

apache安装也是非常简单具体每个步骤操作都很简单。

1. 拷贝安装包到/usr/local,并在目标目录下进行解压。

[root@localhost local]# cd /usr/local

[root@localhost local]# tar -zxvf httpd-2.2.4.tar.gz

2. 配置安装参数,安装的目标目录为/usr/local/apache,建议设置enable-mods-shared=all,不用的module注释掉就行了!

[root@localhost local]# cd httpd-2.2.4

[root@localhost httpd-2.2.4]# ./configure –prefix=/usr/local/apache –enable-so –enable-mods-shared=all

3. 编译并安装。

[root@localhost httpd-2.2.4]# make

[root@localhost httpd-2.2.4]# make install

4. 启动Apache,并测试。

[root@localhost httpd-2.2.4]# cd /usr/local/apache/bin

[root@localhost bin]# ./apachectl start

打开浏览器,并在地址栏中输入主机的IP地址

http://192.168.1.254

如果出现以下画面则说明安装成功。

It works!

四、生成mod_jk.so连接器

1. 拷贝源包到/usr/local并在目标目录中解压(当然在原来的目录中解压也是可以的,作者是为了规范所以安装的程序都放在/usr/local下)。

[root@localhost bin]# cd /usr/local

[root@localhost local]# tar -zxvf jakarta-tomcat-connectors-1.2.15-src.tar.gz

2. 创建一个connector同步目录,目的是为了简化操作。

[root@localhost local]# ln -s jakarta-tomcat-connectors-jk2-2.0.4-src connector

3. 进行编译配置。大家一定要注意这几个参数中前三个是很重要的,必要时可以去相应的目录看看相关的文件是否存在。

[root@localhost local]# cd connector/native

[root@localhost native]# ./ buildconf.sh

[root@localhost native]#./configure –with-apxs=/usr/local/apache/bin/apxs –with-tomcat=/usr/local/tomcat –with-java-home=/usr/java/jdk –with-jni

4. 编译

[root@localhost apache]# make

5. 运行apache下的apxs,如果返回如下结果,证明正常。

[root@localhost native]# cd apache-2.0

[root@localhost apache-2.0]# /usr/local/apache/bin/apxs -n jk2 -i mod_jk.so

/usr/local/apache/build/instdso.sh SH_LIBTOOL='/usr/local/apache/build/libtool' mod_jk2.so /usr/local/apache/modules

/usr/local/apache/build/libtool –mode=install cp mod_jk.so /usr/local/apache/modules/

cp mod_jk.so /usr/local/apache/modules/mod_jk.so

Warning! dlname not found in /usr/local/apache/modules/mod_jk.so.

Assuming installing a .so rather than a libtool archive.

chmod 755 /usr/local/apache/modules/mod_jk.so

[root@localhost apache-2.0]#

ll /usr/local/apache/modules/mod_jk.so

-rwxr-xr-x 1 root root 709215 08-14 10:22 /usr/local/apache/modules/mod_jk.so

mod_jk.so生成成功了。

五 配置解释jsp

1. 对Tomcat的jk2.properties进行配置

[root@localhost apache]# cd /usr/local/tomcat/conf

[root@localhost conf]# vi jk2.properties

# channelUnix.file=${jkHome}/work/jk2.socket

# Just to check if the the config is working

shm.file=/usr/local/apache/logs/jk2.shm

# In order to enable jni use any channelJni directive

# channelJni.disabled = 0

# And one of the following directives:

2. 在Apache的conf目录中创建文件workers.properties,其中加入如下几行

[root@localhost conf]# vi workers.properties

其中可以添加Tomcat的虚拟目录

[uri:/examples/*]

这样你就可以访问examples

#——start ———

[shm]

file=/usr/local/apache/logs/shm.file

size=1048576

[channel.socket:localhost:8009]

tomcatId=localhost:8009

[uri:/examples/*]

# ——–end ————

保存退出

3. 配置Apache的/usr/local/apache/conf/httpd.conf,在LoadModule后添加一行,

LoadModule jk_module modules/mod_jk.so

在Apache启动的时候会装载mod_jk.so

[root@localhost conf]# cd /usr/local/apache/conf

[root@localhost conf]# vi httpd.conf

LoadModule jk_module modules/mod_jk.so

JkWorkersFile /usr/local/apache/conf/workers.properties

JkShmFile /usr/local/apache/logs/k2.shm

4. apache2.2.4可以用扩展文件的方式配置虚拟主机去掉Include conf/extra/httpd-vhosts.conf

# Virtual hosts

Include conf/extra/httpd-vhosts.conf

打开:/usr/local/apache/conf/extra/httpd-vhosts.conf

加入如下内容(根据自己的需要修改吧)

<Directory /var/www/html/www>

Options FollowSymLinks

AllowOverride None

o&#114;der allow,Deny

allow from all

</Directory>

<VirtualHost 192.168.1.254:80>

ServerAdmin hacder@hstc.edu.cn

DocumentRoot &#34;/var/www/html/www&#34;

ServerName www.mc333.com

UserDir &#34;/var/www/html/www&#34;

JkMount /*.jsp ajp13

CustomLog logs/www.mc333.com-access_log common

</VirtualHost>

<Location &#34;/WEB-INF/&#34;>

o&#114;der allow,deny

deny from all

</Location>

5. 拷贝tomcat例子到apache例子目录测试:

#cp –R /usr/local/tomcat/webapps/examples/ /usr/local/apache/htdocs/

6. 启动tomcat,apache并进行测试

[root@localhost conf]# cd /usr/local/tomcat/bin

[root@localhost bin]# ./shutdown.sh

[root@localhost bin]# ./startup.sh

Using CATALINA_BASE: /usr/local/tomcat

Using CATALINA_HOME: /usr/local/tomcat

Using CATALINA_TMPDIR: /usr/local/tomcat/temp

Using JAVA_HOME: /usr/local/jdk

[root@localhost bin]# cd /usr/local/apache/bin

[root@localhost bin]# ./apachectl restart

打开浏览器,输入http://主机地址/ examples

http://192.168.1.254/examples/jsp

测试jsp文件是否可以正常打开,如果都可以,恭喜你整合成功!

linux路由软件:zebra

路由:

1.简介

2.静态路由:

添加:

route add -host 10.0.2.1 gw 172.16.100.1

route add -net 202.1.1.0 netmask 255.255.255.0 gw 172.16.4.1

错误: gw必须和本机器在一个网段内.如果要跨网,设置跳数M.

或者指定ETHO出去:

add -net 202.1.1.0 netmask 255.255.255.0 gw dev eth0

?????????

删除:

route del -net 202.1.1.0 netmask 255.255.255.0

备注:

手工添加的路由命令,写入/etc/rc.d/rc.local

3.动态路由:

quagga: rhel4里的路由服务

是zebra的一个分支,更新速度快于zebra.

查看安装的服务:

cat /etc/services |grep rip

查看zebra安装的模板:

ls /etc/quagga

bgpd.conf.sample

bgpd.conf.sample2

ospf6d.conf.sample

ospfd.conf.sample

ripd.conf.sample

ripngd.conf.sample

vtysh.conf

vtysh.conf.sample

zebra.conf

zebra.conf.sample

无论开什么路由服务,都必须开zebra+协议服务.

如zebra+bgpd

—————-

hpstgmgr 2600/tcp zebrasrv # HPSTGMGR

discp-client 2601/tcp zebra # discp client

[root@szx quagga]# cat /etc/services |grep rip

ripng 521/tcp

ripng 521/udp

discp-server 2602/tcp ripd # discp server

servicemeter 2603/tcp ripngd # Service Meter

—————–

配置路由器的方法:

telnet 0 2601

o&#114;

telnet 路由器

4.启动zebra

1)复制模板

cd /etc/quagga

cp zebra.conf.samples zebra.conf

cp ripd.conf.samples ripd.conf

2)启动服务

service zebra start

service ripd start

rip(V2版本) 最高15跳 ???

ospf 最高255跳 ???

5.配置

cp ripd.conf.sample ripd.conf

———————–

! -*- rip -*-

!

! RIPd sample configuration file

!

! $Id: ripd.conf.sample,v 1.1.1.1 2002/12/13 20:15:30 paul Exp $

!

hostname ripd

password zebra

!

! debug rip events

! debug rip packet

!

router rip

! network 11.0.0.0/8

! network eth0

! route 10.0.0.0/8

! distribute-list private-only in eth0

!

!access-list private-only permit 10.0.0.0/8

!access-list private-only deny any

!

!log file ripd.log

!

log stdout 日志文件

————

————-

# more zebra.conf.sample

! -*- zebra -*-

!

! zebra sample configuration file

!

! $Id: zebra.conf.sample,v 1.1.1.1 2002/12/13 20:15:30 paul Exp $

!

hostname Router 用户名

password zebra 普通模式密码

enable password zebra 全局模式密码

!

! Interface&#39;s description.

!

!interface lo

! description test of desc.

!

!interface sit0

! multicast

!

! Static default route sample.

!

!ip route 0.0.0.0/0 203.181.89.241

!

!log file zebra.log

————-

5.2

启动服务

zebra 2601

ripd 2602

5.3连接设置路由

vtysh–>telnet 0 2601

rip —>telnet 0 2602

rip发音:瑞扑

5.4

linux> 用户模式

linux# 特权模式

.

.

.

常用命令:

在LINUX>模式下:

en 进入特权模式

conf t 进入全局模式

list 显示当前模式下命令格式 (no xxx:清除xxx命令的设置)

? 显示当前模式下命令

router rip 进入RIP路由配置模式

router ospf

router bgp 7675

write

tab键 命令补全

exit 退出

6.虚拟模块实验(讲义里没有)

#modprobe dummy

#lsmod |grep dummy

#ifconfig dummy0 192.168.11.1

————

如果不能加载,则:

#vi /etc/modprobe.conf 添加新的别名

eth2 dummy

————

show ip route??

7.实验

ip route 192.168.1.0/24 eth0 设置静态路由

hostname linux 设置主机名

password linux 设置进入用户模式密码

enable password linux 设置进入特权模式密码

write(or copy run start) 保存

8。

show ip route

route -n

返回顶部