2005-09-05
修订历史 | ||
---|---|---|
修订 2.3b7 | 2005-09-05 | 修订者:RvdP |
额外的 PPPD 选项和路由 | ||
修订 2.3b6 | 2005-01-19 | 修订者:RvdP |
新的网络 howto 链接 | ||
修订 2.3b5 | 2004-12-31 | 修订者:RvdP |
首个 XML 版本 | ||
修订 2.3b4 | 2003-10-01 | 修订者:RvdP |
转义的电子邮件地址 | ||
修订 2.3b3 | 2002-09-19 | 修订者:RvdP |
首个实验性 DocBook 版本 | ||
修订 2.2 | 2001-12-05 | 修订者:RvdP |
FDL 版权 | ||
修订 2.1 | 2000-08-03 | 修订者:RvdP |
新的作者电子邮件地址 | ||
修订 2.0 | 2000-04-20 | 修订者:RvdP |
首个 LinuxDoc SGML 版本 |
此 HOWTO 的最新(beta)版本可以在以下网址找到:http://www.sput.nl/software/leased-line/
本文档根据 GNU 自由文档许可证的条款分发。您应该已经收到了副本。如果没有,可以从 http://www.fsf.org/licenses/fdl.html 获取。
专线未连接到电话交换机,不提供直流电源、拨号音、忙音或振铃信号。这意味着您的调制解调器是独立的,并且必须能够处理这种情况。
您应该有 2 个相同的(包括固件版本)外部调制解调器,支持专线和哑终端模式。确保您的调制解调器实际上可以做到这一点!还要确保您的调制解调器有适当的文档。您还需要
2 根全线屏蔽 RS232 电缆。屏蔽层应连接到两端的连接器外壳(不是引脚 1)(而不是一端)。
RS232 测试插头可能便于测试。
2 根 RJ11 线,专线两端各一根。
对“AT”命令的基本了解。
关于调制解调器配置和通用初始化字符串的注意事项:配置您的调制解调器软件(如 minicom 或 (m)getty)以使用尽可能高的速度;14k4 为 57600 bps,28k8 或更快的调制解调器为 115200 bps。许多人使用非常长且复杂的初始化字符串,通常以 AT&F 开头,并包含许多调制解调器品牌和类型特定的命令。然而,这是不必要的复杂。大多数程序对相同的调制解调器设置感到满意,那么为什么不将这些设置写入所有调制解调器的非易失性存储器中,并且仅在您的所有程序中使用“ATZ”作为初始化字符串。这样,您可以更换或升级您的调制解调器,而无需重新配置任何软件。
大多数程序都要求您使用以下设置;
固定波特率(无自动波特)
硬件双向 RTS-CTS 流量控制(无 x-on/x-off)
8 位,无奇偶校验,1 个停止位
调制解调器应产生TRUE DCD 状态 (&C1)
调制解调器不应忽略 DTR 状态 (&D2 或 &D3)
这些设置不一定与默认出厂配置 (&F) 相同,因此首先以 AT&F 开头初始化字符串可能不是一个好主意。明智的做法可能是仅当您有理由相信存储在非易失性存储器中的调制解调器设置真的搞砸了时才使用 AT&F。如果您认为您已经找到了适合您调制解调器的正确设置,请使用 AT&W 将其写入非易失性存储器,并使用 Z-modem 文件传输(包括 ASCII 文本和二进制文件)彻底测试它。只有当所有这些都完美运行时,您才应该将您的调制解调器配置为专线。
找出如何将您的调制解调器置于哑终端模式,更重要的是,如何使其退出哑终端模式;调制解调器只能在不处于哑终端模式时重新配置。确保您实际上以尽可能高的速度配置您的调制解调器。一旦进入哑终端模式,它将忽略所有“AT”命令,因此不会将其速度调整为 COM 端口的速度,而是使用配置时的速度(此速度通过 AT&W 命令存储在 S 寄存器中)。
现在按如下方式配置您的调制解调器;
DTR 切换时复位 (&D3,有时是 S 寄存器)。某些 ISP 需要此设置!
专线模式 (&L1 或 &L2,请查阅您的调制解调器文档)
远程调制解调器自动应答 (S0=1),本地发起 (S0=0)
禁用结果代码 (Q1,有时哑终端模式会为您执行此操作)
哑终端模式 (\D1 或 %D1,有时是跳线) 在哑终端模式下,调制解调器将忽略所有 AT 命令(有时您还需要禁用 ESC 字符)。
现在使用 RS232 电缆将调制解调器连接到 2 台计算机,并使用 RJ11 线将调制解调器相互连接。在两台计算机上使用调制解调器程序,例如 Minicom (Linux)、procom 或 telix (DOS) 来测试调制解调器。您应该能够从一台计算机向另一台计算机键入文本,反之亦然。如果屏幕产生乱码,请检查您的 COM 端口速度和其他设置。现在断开并重新连接 RJ11 线。等待连接重新建立。断开并重新连接 RS232 电缆,打开和关闭调制解调器,停止并重新启动 Minicom。调制解调器应始终以尽可能高的速度重新连接(某些调制解调器具有速度指示 LED)。检查调制解调器是否实际忽略了 ESC (+++) 字符。如有必要,禁用 ESC 字符。
如果所有这些都有效,您可能想要重新配置您的调制解调器;关闭远程调制解调器的声音 (M0) 并将本地调制解调器设置为低音量 (L1)。
这是一个相当模糊的“无名克隆调制解调器”。但是,它的配置字符串是典型的,应该适用于大多数调制解调器。
ATL1&C1&D3&L2%D1&W&W1
ATM0L1&C1&D3&L2%D1S0=1&W&W1
这是应该有效的方法;
ATB15L1Q1&C1&D3&L2&W&W1
ATM0B15M0Q1&C1&D3&L2S0=1&W&W1
由于固件错误,调制解调器只有在 DTR 为高电平时进行硬复位(断电并重新上电)后才能连接。我设计了一个 电路,该电路在 DTR 的低到高转换时硬复位调制解调器。然而,FreeBSD pppd 对此不太满意。通过将设置 &D0 与一个 电路 结合使用,该电路在从高到低的转换时复位,可以避免此问题。
应该通过设置 S2 > 127 来禁用 ESC 字符;
ATL1&L1Q1&C1&D3S2=171\D1&W
ATM0&L2Q1&C1&D3S0=1S2=171\D1&W
USR Sportster 和 USR Courier-I 不支持专线。这项工作您需要 Courier V-everything 版本。USR 网站上有一个网页“解释”如何设置您的 Courier 以用于专线。但是,如果您按照这些说明操作,您最终将得到一个完全脑死亡的调制解调器,pppd 无法控制或监控它。
USR Courier 可以使用 DIP 开关进行配置,但是您需要先向其馈送配置字符串。首先确保它使用正确的出厂配置。与大多数其他调制解调器不同,它有三个;&F0、&F1 和 &F2。默认值也是您应该使用的值是 &F1。但是,如果您发送 AT&F,它将加载出厂配置 &F0!对于 DTR 切换时的复位,您需要设置 S 寄存器 13 的位 0。这意味着您必须将 S13 设置为 1。此外,您需要使用 &L1 将其设置为专线模式;ATS13=1&L1&W DIP 开关全部为默认设置,除了以下内容
OFF 禁用结果代码
ON 禁用离线命令
ON 用于发起,OFF 用于应答
OFF 哑终端模式
您需要 pppd (点对点协议守护程序) 和对其工作原理的合理了解。如有必要,请查阅相关的 RFC 或 Linux PPP HOWTO。由于您不打算使用登录过程,因此您不使用 (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 |