专线迷你指南 | ||
---|---|---|
上一页 |
你需要 pppd (点对点协议守护进程) 以及对其工作原理有一定的了解。如有必要,请查阅相关的 RFC 或 Linux PPP 指南。由于你不会使用登录过程,因此你不需要使用 (m)getty,也不需要与控制链接的 pppd 关联(虚拟)用户。你也不需要拨号,因此也不需要任何 chat 脚本。实际上,你刚刚构建的调制解调器电路和配置非常类似于完全接线的零调制解调器线缆。这意味着你必须像配置零调制解调器线缆一样配置你的 pppd。
为了建立可靠的链接,你的设置应满足以下标准:
系统启动后不久,pppd 应在你的 RS232 端口中拉高 DTR 信号,等待 DCD 信号变为高电平,并协商链接。
如果远程系统关闭,pppd 应等待直到它再次启动。
如果链接已建立然后断开,pppd 应重置调制解调器(它通过先拉低然后拉高 DTR 来实现),然后尝试重新连接。
如果链接质量下降太多,pppd 应重置调制解调器,然后重新建立链接。
如果控制链接的进程(即 pppd)终止,监控程序应重启 pppd。
假设调制解调器连接到 COM2,本地 IP 地址为 `Loc_Ip',远程 IP 地址为 `Rem_Ip'。我们希望使用 576 作为我们的 MTU。那么/etc/ppp/options.ttyS1现在应该像这样:
crtscts mru 576 mtu 576 passive Loc_Ip:Rem_Ip -chap modem #noauth -pap persist #maxfail 0 #holdoff 10 |
crtscts mru 576 mtu 576 passive 192.168.1.1:10.1.1.1 -chap modem #noauth -pap persist #maxfail 0 #holdoff 10 |
crtscts mru 576 mtu 576 passive 10.1.1.1:192.168.1.1 -chap modem #noauth -pap persist #maxfail 0 #holdoff 10 |
你可以从启动 (rc) 脚本启动 pppd。但是,如果你这样做,并且 pppd 终止,你将失去链接。更稳定的解决方案是从/etc/inittab;
s1:23:respawn:/usr/sbin/pppd /dev/ttyS1 115200 |
注意:一些较旧的系统不接受 `115200' 的速度。在这种情况下,你将必须将速度设置为 38400,并使用 setserial 设置 `spd_vhi' 标志。一些系统希望你使用 `cua' 而不是 `ttyS' 设备。
默认路由可以使用 defaultroute 选项或使用/etc/ppp/ip-up脚本设置:
#!/bin/bash case $2 in /dev/ttyS1) /sbin/route add -net 0.0.0.0 gw Rem_Ip netmask 0.0.0.0 ;; esac |
当然,在 ip-up 中设置的路由不一定是默认路由。你的 ip-up 设置到远程网络的路由,而远程系统上的 ip-up 脚本设置到你的网络的路由。如果你的网络是 192.168.1.0,你的 ppp 接口是 192.168.1.1,则远程机器上的 ip-up 脚本看起来像这样:
#!/bin/bash case $2 in /dev/ttyS1) /sbin/route add -net 192.168.1.0 gw 192.168.1.1 netmask 255.255.255.0 ;; esac |
一些系统使用动态 tty,在这种情况下,你不能基于 tty 进行路由。在这种情况下,将 IP 地址转换为 ppp 接口,然后基于 ppp 接口进行路由(和防火墙设置)可能会很方便。为此,我编辑了/etc/ppp/ip-up;
# These variables are for the use of the scripts run by run-parts PPP_IFACE="$1" PPP_TTY="$2" PPP_SPEED="$3" PPP_LOCAL="$4" PPP_REMOTE="$5" PPP_IPPARAM="$6" export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM # translate ip to ppp echo $PPP_IFACE > "/var/run/ppp/if-$PPP_LOCAL" sleep 1 # Rerun firewall. /usr/local/sbin/rc.block # Take care of the (default) route(s) case $PPP_LOCAL in "My_Ip_Address") /sbin/route add -net 0.0.0.0 gw $PPP_REMOTE netmask 0.0.0.0 ;; esac # Fix things missed at boot if ! ( netstat -an | grep 'My_Ip_Address:53' > /dev/null 2>&1 ) then # Just booted # Sync clock /usr/local/sbin/ntpdate.sh & # Set the null routes /usr/local/sbin/null-route.sh & # Bind 9 needs this; sleep 1 /etc/init.d/bind9 restart fi # An audiable notification /bin/echo -ne "\007" >> /dev/tty1 |
#!/bin/bash route add -net 10.0.0.0 netmask 255.0.0.0 reject route add -net 172.16.0.0 netmask 255.240.0.0 reject route add -net 192.168.0.0 netmask 255.255.0.0 reject |
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 255.255.255.255 0.0.0.0 255.255.255.255 UH 0 0 0 eth1 195.190.249.4 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 192.168.0.0 - 255.255.0.0 ! 0 - 0 - 172.16.0.0 - 255.240.0.0 ! 0 - 0 - 10.0.0.0 - 255.0.0.0 ! 0 - 0 - 0.0.0.0 195.190.249.4 0.0.0.0 UG 0 0 0 ppp0 |