36 FreeBSD连载:PPP协议( 七 )


同时配置PPP用户的登录脚本为立即启动使用服务器标签的ppp程序,因此一个简单PPP用户登录脚本应为:
#! /bin/sh
exec /usr/sbin/ppp -direct dialserverdirect参数就用于在标准Unix认证之后,立即启动ppp进程,使客户端直接与服务器端ppp交谈,以建立ppp连接 。这个文件应该是一个可执行的文件,最简单的登录脚本可以让不同的PPP用户共同使用一个拨号服务器标签,更复杂的情况应该为每个拨号用户都设置独立的选项,并在登录脚本区分用户,启动不同的拨号选项 。
由于getty在接收到连接请求之后,就立即执行login认证过程,因此系统认证提示为Login,而与前面ppp客户设置中使用Username的认证提示不同,需要修改前面的设置,才能使用前面的认证登录上服务器 。但也由于getty必须执行login认证,因此使用getty作为ppp服务器的端口监控进程,就无法进一步支持PAP或CHAP认证 。为了支持这些复杂的认证方式,就需要使用mgetty或类似的端口监控进程来监视是否有连接请求 。
在FreeBSD的Handbook中有使用mgetty设置ppp服务器的例子 。
PPP程序的其他功能
除了最常见拨号连接上Internet之外,还可以利用ppp程序的功能来完成其他几种任务 。在缺省的ppp.conf中给出了几个例子,这些例子能帮助使用者进一步了解ppp程序的能力 。
串口线连接
使用串口线直接连接与使用medom除了不需要拨号之外并无不同,但是通常要在两端都使用LQR,用于帮助判断电缆的连接情况 。此时客户端的ppp.conf中的设置应为:
direct-client:
set dial ""
set line /dev/cuaa0
set sp 115200
set timeout 900 10 3
set log Phase Chat LQM
set login "TIMEOUT 5 ogin:--ogin: ppp word: ppp HELLO"
set ifaddr 10.0.4.2 10.0.4.1
enable lqr
accept lqr而ppp服务器应该设置为:
direct-server:
set timeout 900 10 3
set log Phase LQM
set ifaddr 10.0.4.1 10.0.4.2
enable lqr
accept lqrTCP上的PPP通道
可以将PPP建立在TCP网络连接之础上,而非通过电话网络,这样就在TCP/IP网络上建立了一条PPP通道 。tcp-client为客户端计算机的设置,这里使用一个网络连接作为连接设备,tcpsrv为远程计算机的主机名,1234为tcpsrv上的TCP端口:
tcp-client:
set device tcpsrv:1234
set dial
set login
set escape 0xff
set ifaddr 10.0.5.1 10.0.4.1 255.255.255.0tcp-server为服务器端计算机的设置:
tcp-server:
set escape 0xff
set ifaddr 10.0.4.1 10.0.5.1 255.255.255.0当ppp客户端使用tcp-client进行连接时,它将向tcpsrv的1234端口发送ppp连接请求 。这就要求tcpsrv能侦测到对1234端口的连接请求,并启动ppp服务器来建立连接 。因此就可以使用inetd监听上面定义的端口1234,并负责启动ppp服务器 。就需要在/etc/services中应该增加相应的端口:
pppsrv1234/tcp
并在/etc/inetd.conf中增加相应的选项:
pppsrvstream tcp nowait root /usr/sbin/ppp ppp -direct tcp-server修改好inetd.conf之后,向inetd发送SIGHUP信号使得其重读设置文件 。然后就可以使用ppp建立虚拟连接了 。在ssh等加密传输软件的帮助下,还可以进一步设定为安全的虚拟通道连接 。
数据包过滤
在ppp的auto模式下,需要根据超时设置断开连接,但是网络中一些协议会定时发送一些数据包,这些数据包主要用于保持网络数据的及时更新,大部分情况下不影响网络应用 。但是这些数据包会引起ppp刷新时间设置,从而使得ppp一直保持拨号连接 。
这时可以使用ppp的过滤机制中的afilter过滤器,它定义了在auto模式时应滤掉的数据包,使得数据包不会影响超时时间 。下面的三行分别不允许ICMP包和DNS包通过,最后一行允许其余的包通过 。

推荐阅读