分享
 
 
 

FreeBSD连载(36):PPP协议

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

PPP协议通过电话连接使用IP协议有两种协议,一种为SLIP协议,另一种为PPP协议,FreeBSD支持这两种协议,但是SLIP协议已经过时,当前已经很少有ISP使用这种方式提供接入服务了,而PPP协议则成为了标准。

建立一个PPP连接需要以下过程:

在PPP的两端建立一条物理连接,通常为电话连接,但也有直接电缆连接或虚拟的tunnel连接的形式。具体如何建立连接,例如拨号等,并不属于PPP协议本身的任务。

由PPP的服务器端对客户端进行验证,可以有最简单登录的验证方式、PAP或CHAP等验证方式。由于PAP和CHAP并不在线路上传输口令本身,因此更为安全,不必担心口令会泄露出去。

验证完毕之后,PPP服务器将按照配置,分配给客户IP地址,并将网关地址和其他的一些配置信息传送给客户。如果是Microsoft客户,还可以按照MS的扩展协议分配给客户NetBIOS名字服务器的地址。这样就建立了一条PPP连接。

FreeBSD对PPP提供了两种不同方式的支持,一种为内核级PPP,它将PPP协议代码编译进内核,并运行一个PPP守护进程pppd,提供对PPP的支持,这是一种传统的方法,但配置起来较困难。另一种为用户级PPP,它使用一个应用程序ppp,通过通用tunnel设备传递PPP数据,配置较为容易。一般情况下可以使用用户级PPP来建立拨号方式的Internet连接。

要建立PPP连接,首先要检查串口、modem和电话线连接是否正确。可以使用一些通信软件来帮助进行诊断,例如minicom,如果使用minicom能正常拨号,并在拨ISP的拨号服务器时能出现username和password提示,就说明串口和modem的配置正确无误。接下来就可以配置PPP连接。

用户级PPP设置

用户级PPP使用tunnel设备进行PPP数据的传递,因此内核中必须支持相应的tunnel设备,通常为tun0。缺省内核中支持这个伪设备(pesudo-device tun),/dev目录下也具备相应的设备文件tun0。如果同时需要多个拨号连接,就可以增加内核中支持的伪设备数量和相应的设备文件。

要使用ppp,还需要设置它的配置文件,这些文件位于/etc/ppp目录中。缺省情况下,/etc/ppp目录下安装了这些文件的例子:

# ls -l /etc/ppp

total 21

drwxr-xr-x 2 root wheel 512 Aug 17 16:18 .

drwxr-xr-x 8 root wheel 1536 Aug 29 18:31 ..

-rw-r--r-- 1 root wheel 5112 May 20 20:06 ppp.conf.sample

-rw-r--r-- 1 root wheel 1130 May 20 20:06 ppp.conf.server.sample

-rw-r--r-- 1 root wheel 1894 May 20 20:06 ppp.deny

-rw-r--r-- 1 root wheel 1665 May 20 20:06 ppp.dialup.sample

-rw-r--r-- 1 root wheel 1402 May 20 20:06 ppp.linkdown.sample

-rw-r--r-- 1 root wheel 1422 May 20 20:06 ppp.linkup.sample

-rw-r--r-- 1 root wheel 1705 May 20 20:06 ppp.pap.dialup.sample

-rw-r--r-- 1 root wheel 313 May 20 20:06 ppp.secret.sample

这些以sample结尾的文件都给出了最常用的配置,因此只需复制生成正确的设置文件,再稍加修改,就能用于使用者自己的拨号连接。

手工拨号

ppp.conf是用户级PPP的主要配置文件,可以从ppp.conf.sample生成适合自己的ppp.conf。ppp.conf文件使用带有冒号的标签标识不同的选项,第一项标签通常为default:,用于设置缺省的选项。

default:

set log Phase Chat Connect Carrier LCP IPCP CCP tun command

set device /dev/cuaa2

set speed 115200

deny lqr

set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"

注意default:为这一项的标签,必须位于一行的开始,而其他的行是这一项的具体配置,因此使用一个空白字符开头。否则语法错误就造成不能ppp不能正常建立连接的问题。

第一个设置set log用于设置连接过程中要记录的日志内容,这有助于帮助解决连接过程中出现的故障;第二项设置set device设置连接使用的串口设备,本文件中设为第三个串口cuaa2;第三项设置了串口与modem的连接速度,115200为PC常用的串口通信芯片UART 16550的最大通信速率;第四项在该medom上屏蔽线路质量请求lpr;最后一项为发送到medom的一些命令和相应的回应,通常称这些为交谈脚本(chat script),上例中这个设备跨越了两行,实际上它应该位于同一行内。

设置了default项之后,就可以进入ppp程序测试这些设置是否正确了。

# ppp

ppp > term

atdt 163

username: pppuser

password:

PPP >

进入ppp程序之后,输入term命令可以进入终端模式,这个模式下用户可以直接输入modem认可的AT指令控制modem,本例中使用atdt 163拨接163,连接之后系统将进行提示输入用户名和口令,此后ppp就建立起PPP连接,而ppp的提示符改变为大写的PPP。

设置拨号连接

使用手工输入的连接方法不很方便,而且也不适合使用PAP或CHAP等安全认证方式的连接,因此最好在ppp.conf对指定的连接进行配置。这要求对每个要连接的ISP,都配置相应的设置。例如对CHINANET的接入,使用下列chinanet标签配置:

chinanet:

set phone 163

set login "TIMEOUT 5 ogin:--sername: pppuser word: key123"

set timeout 120

set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0

delete ALL

add 0 0 HISADDR

这个例子中使用chinanet作为设置的标签,设置了电话号码为163,登录时使用sername匹配对用户名的提示Username,接收到这个字符串后自动输入用户名pppuser,使用word匹配对口令的提示Password,然后自动输入口令。这里只使用了提示信息的一部分来进行匹配,这是为了避免匹配时出现问题。对于不同的系统,这些提示还有所不同,对于使用Unix作登录服务器的提示为通常的Login,而大多数专用拨号服务器的提示为Username。

set ifaddr用于设置本地PPP连接的IP地址,由于PPP协议在客户和服务器之间协商客户的IP地址,通常由拨号服务器从自己控制的自由IP地址池中分配给拨号的计算机一个动态IP地址,因此这里的设置只是客户端对地址协商进行的限制。可以针对本地要申请的IP地址,和远端计算机的IP地址进行限制,本地的IP地址和网络掩码为set ifaddr的第一个参数,而远端的IP地址和网络掩码为set ifaddr的第二个参数,前两个参数的网络掩码是用于限制IP地址所在的网络,可以是真实网络的网络掩码,也可以不是,第三个参数才是用来指定PPP界面使用的网络掩码。

一般情况下,不需要对双方的IP地址范围进行限制,拨号之后可以接受任意的IP地址,就如上例中设置本地IP地址和远端IP地址的限制网络掩码长度都为0,由于网络掩码长度为0使得任意IP地址都符合要求,此时掩码前面的IP地址就没有意义了。

如果想让拨号的计算机拥有一个静态IP地址,就必须设置网络掩码为32,明确指定IP地址,此时也可以省略掩码,直接使用IP地址本身。例如,本地每次连接都使用静态IP地址192.168.1.98,另一端的IP地址为192.168.1.64,那么这一项就应为:

set ifaddr 192.168.1.98 192.168.1.64 255.255.255.0

使用静态IP地址就能使FreeBSD使用固定的IP地址,从而能使用DNS域名,以方便提供更多的服务。然而,这个set ifaddr的配置命令可以更灵活,可以在协商IP地址时指定本机使用的IP地址范围,或者指定对方所在的IP地址范围,进行地址限制。例如:

set ifaddr 192.168.1.98/24 192.168.1.64/24 255.255.255.0

这种限制拨号网络IP地址范围的机制对于使用自动拨号的情况十分有用,通常可以使用带参数的命令ppp -auto将ppp程序放入后台,一旦有网络请求就立即拨号建立连接。但是FreeBSD上有多个网络界面,就需要判断这个网络请求需要使用哪个拨号网络界面进行网络传输,否则如果使用错误的拨号网络进行拨号,即使建立了连接,也不能找到目的计算机建立连接。由于每个连接请求中都具备目的IP地址,便需要根据这个IP地址来进行判断。然而普通的拨号网络在建立连接之前是没有分配IP地址的,因此还是无法确定对这个IP地址的连接请求应该通过那个拨号网络界面进行传输。但是,如果指定了ppp网络界面的IP地址范围,就可以根据这个地址范围来判断连接请求中的IP地址是否在这个范围内,以决定是否使用这个网络界面进行拨号。

delete all指出删除不必要的路由配置,add 0 0 HISADDR指出将缺省路由设为对方的地址,由于使用动态IP时,在建立连接前对方的IP是未知的,因此使用HISADDR代替。如果已知拨号服务器的IP地址,也可以直接填上这个IP地址。也可以不将拨号服务器作为缺省路由,而只将它作为对某个子网的路由,那么在这个配置中就不可以使用0作为IP地址和网络掩码,必须使用正确的IP地址和子网掩码进行设置。例如add 192.168.1.0 255.255.255.0 HISADDR,就将对方作为通向192.168.1子网的路由器。事实上这些设置路由的指令等价于执行对应的route指令,以设置路由,如route add 192.168.1.0 HISADDR -netmask 255.255.255.0。

然而对于动态分配IP的情况,问题在于在ppp进行拨号的时候,对方的IP地址HISADDR还没有确定,因此这些设置路由的指令往往不能正确执行。必须在拨号完成,建立了PPP连接之后,HISADDR才能确定,因此设置路由的命令应该放在更合适的位置:ppp连接建立之后立即执行的文件ppp.linkup中。

MYADDR:

delete 0

add 0 0 HISADDR

192.168.1.98:

add 192.168.1.0 0 HISADDR

chinanet:

delete ALL

add 0 0 HISADDR

!bg /etc/ppp/ppp.fetchemail

ppp.linkup文件格式与ppp.conf文件相同,它在PPP连接建立后执行,执行与拨号使用的标签相同的项,以及客户获得的地址为标签的项。通常使用MYADDR表示本机得到的IP地址,因此这个标签下的内容都将执行;而192.168.1.98项表示获得这个地址时增加下面的路由,最后一项以chinanet为标签,与ppp.conf相同,表示进行这个chinanet拨号后执行的相关动作,其中包括在后台执行的取邮件的脚本ppp.fetchmail。

如果拨号服务器要求使用PAP或CHAP认证,而不是普通的登录认证方式,则要在ppp.conf中的使用不同的配置选项:

chinanet:

set phone 163

set login

set authname pppuser

set authkey key123

set timeout 120

set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0

delete ALL

add 0 0 HISADDR

使用authname和authkey来定义PAP或CHAP认证方式下的用户名和口令,就能连接到使用PAP或CHAP的拨号服务器,而具体使用哪种认证方式则由拨号服务器决定。

进行拨号连接

设置了针对具体拨号连接的配置之后,拨号就非常方便了,直接使用该拨号服务的标签进行操作。

# ppp

ppp > dial chinanet

PPP >

使用ppp的dial命令发起连接之后,ppp连接被建立,提示符也由原来的小写ppp>变为大写PPP>,这就表示PPP连接已经正确设立了。这个时候如果使用ifconfig进行查看,就可以看到网络界面tun0已经设置正确,并可以使用了。

当要结束连接时,使用close或quit命令关闭连接。结束连接时将执行/etc/ppp目录下的ppp.linkdown脚本。ppp.linkdown脚本和ppp.linkup格式相同,都会依据相同的标签执行操作。

如果使用者租用了一条模拟专线,专门用于Internet连接。这样就不希望每次传输时都重新进行连接,而希望建立一条永久连接,ppp在后台自动拨号连接到Internet上,并一直维护这个连接。这样就可以使用-ddial参数启动ppp。

# ppp -ddial chinanet

-ddial参数使得ppp立即使用相应参数对应标签设置的拨号连接建立永久连接,而不管有没有实际的数据传输。而绝大多数情况下,使用者并没有租用专线,还是希望在有数据传输时才建立网络连接,在没有数据传输时断开网络连接,以减少电话连接时间。这样就可以使用-auto参数启动ppp。

# ppp -auto chinanet

这样启动的ppp将一直停留在后台,但并不立即进行连接,而是在应用程序发出网络请求时才进行拨号,这个网络请求的目的地址应该在chinanet标签定义的网络地址范围内。而如果一段时间内没有任何数据传输,就断开连接(这个时间由set timeout命令设置,单位为秒)。

# ppp -backgroud chinanet

-background选项使PPP立即进行拨号,并停留在后台。但与-auto不同在于,在一段没有数据传输的时间间隔后ppp将断开连接,但是ppp程序也停止执行,而不象auto参数那样,ppp一直驻留在后台监视网络连接,要再次建立连接必须重新执行ppp程序。这个选项适合最普通的网络客户,使用户能明确什么时候才建立连接。

# ppp -alias -ddial chinanet

ppp程序的另一个有用的选项是alias。如果拨号用户内部有自己的局域网,用户或许希望让整个网络内的计算机共享一个拨号连接。使用ppp的alias选项能使FreeBSD将局域网上的网络连接请求中的本地IP地址替换为FreeBSD系统的ppp网络使用的IP地址,从而使其他用户也能访问外部网络。-alias参数应该和auto或ddial参数联合使用,以驻留在后台提供服务。这种方式比较简洁、易用,当然代理服务器和网络地址转换的方法能提供更多的控制能力。

当使用这些参数执行ppp程序时,ppp程序将切换在后台维护PPP连接。然而由于ppp程序在后台运行,就无法输入指令以控制ppp程序的执行。为了方便使用者控制后台运行的ppp程序,ppp提供了通过socket连接的方式来接受外部输入。为了支持这个特性,便需要设置set server选项。

set server 6670 MySecretpassword

这个选项将使ppp程序监听6670端口,并使用MySecretpassword作为连接时认证的口令,以免ppp程序被非法控制。此后,就可以使用pppctl向ppp程序发送指令,这些指令都是ppp的标准指令。

# pppctl -p MySecretpassword 6670 set timeout 300\; dial

除了使用标准的Intenet套接字接收pppctl的连接之外,ppp还能通过本地Unix套接字来接收输入。这就需要设置一个套接字使用的文件及其访问属性,具备更好的安全性。

set server /tmp/ppp MySecretPassword 0177

而在pppctl中应该使用对应的参数以指明相应的Unix套接字:

# pppctl -p MySecretpassword /tmp/ppp set timeout 300\; dial

内核级PPP及拨号程序

PPP协议只是定义了两台计算机之间如何进行通信的方式,并没有定义如何进行拨号建立连接。用户级PPP由于以应用程序的方式来实现了PPP协议,因此它可以集成拨号程序,使用起来很方便。但内核级PPP并非如此,它使用一个守护进程pppd来实现ppp协议,因而必须首先使用外部拨号程序建立连接。内核级PPP比较难以使用,因此FreeBSD使用者通常使用用户级ppp。

但是pppd是实现PPP协议的最早方式,其他继承BSD Unix网络代码的Unix系统中也使用这种PPP实现方式,这

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有