专线迷你 HOWTO

Rob van der Putten

2005-09-05

修订历史
修订 2.3b72005-09-05修订者:RvdP
额外的 PPPD 选项和路由
修订 2.3b62005-01-19修订者:RvdP
新的网络 howto 链接
修订 2.3b52004-12-31修订者:RvdP
首个 XML 版本
修订 2.3b42003-10-01修订者:RvdP
转义的电子邮件地址
修订 2.3b32002-09-19修订者:RvdP
首个实验性 DocBook 版本
修订 2.22001-12-05修订者:RvdP
FDL 版权
修订 2.12000-08-03修订者:RvdP
新的作者电子邮件地址
修订 2.02000-04-20修订者:RvdP
首个 LinuxDoc SGML 版本

配置您的调制解调器和 pppd 以使用双绞线专线。


目录
1. 简介
1.1. 版权和许可
1.2. 什么是专线
1.3. 假设
2. 调制解调器
2.1. 调制解调器配置
2.2. 测试
2.3. 示例
3. PPPD
3.1. 配置
3.2. 脚本
3.3. 测试

此 HOWTO 的最新(beta)版本可以在以下网址找到:http://www.sput.nl/software/leased-line/


1. 简介

1.1. 版权和许可

本文档根据 GNU 自由文档许可证的条款分发。您应该已经收到了副本。如果没有,可以从 http://www.fsf.org/licenses/fdl.html 获取。


1.2. 什么是专线

任何固定的,即永久的,点对点数据通信链路,都是从电信公司或类似组织租用的。专线涉及电缆,例如双绞线、同轴电缆或光纤,并且可能涉及各种其他硬件,例如(pupin)线圈、变压器、放大器和再生器。

本文档涉及

配置您的调制解调器和 pppd 以使用双绞线专线。

本文档涉及

SLIP,获取或安装 pppd,同步数据通信,基带调制解调器,xDSL。


1.3. 假设

您应该已经在您的系统上安装了可用的 pppd。您还需要 Minicom 或类似的程序来配置您的调制解调器。


2. 调制解调器

专线未连接到电话交换机,不提供直流电源、拨号音、忙音或振铃信号。这意味着您的调制解调器是独立的,并且必须能够处理这种情况。

您应该有 2 个相同的(包括固件版本)外部调制解调器,支持专线和哑终端模式。确保您的调制解调器实际上可以做到这一点!还要确保您的调制解调器有适当的文档。您还需要


2.1. 调制解调器配置

关于调制解调器配置和通用初始化字符串的注意事项:配置您的调制解调器软件(如 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)

使用 AT&V 或 AT&Ix 检查(请查阅您的调制解调器文档)

这些设置不一定与默认出厂配置 (&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 字符)。

将配置写入非易失性存储器 (&W)。


2.2. 测试

现在使用 RS232 电缆将调制解调器连接到 2 台计算机,并使用 RJ11 线将调制解调器相互连接。在两台计算机上使用调制解调器程序,例如 Minicom (Linux)、procom 或 telix (DOS) 来测试调制解调器。您应该能够从一台计算机向另一台计算机键入文本,反之亦然。如果屏幕产生乱码,请检查您的 COM 端口速度和其他设置。现在断开并重新连接 RJ11 线。等待连接重新建立。断开并重新连接 RS232 电缆,打开和关闭调制解调器,停止并重新启动 Minicom。调制解调器应始终以尽可能高的速度重新连接(某些调制解调器具有速度指示 LED)。检查调制解调器是否实际忽略了 ESC (+++) 字符。如有必要,禁用 ESC 字符。

如果所有这些都有效,您可能想要重新配置您的调制解调器;关闭远程调制解调器的声音 (M0) 并将本地调制解调器设置为低音量 (L1)。


2.3. 示例

2.3.1. 高科技

这是一个相当模糊的“无名克隆调制解调器”。但是,它的配置字符串是典型的,应该适用于大多数调制解调器。

发起(本地)

ATL1&C1&D3&L2%D1&W&W1

应答(远程)

ATM0L1&C1&D3&L2%D1S0=1&W&W1


2.3.2. Tornado FM 228 E

这是应该有效的方法;

发起(本地)

ATB15L1Q1&C1&D3&L2&W&W1

应答(远程)

ATM0B15M0Q1&C1&D3&L2S0=1&W&W1

将哑终端跳线从位置 2-3 移动到 1-2。

由于固件错误,调制解调器只有在 DTR 为高电平时进行硬复位(断电并重新上电)后才能连接。我设计了一个 电路,该电路在 DTR 的低到高转换时硬复位调制解调器。然而,FreeBSD pppd 对此不太满意。通过将设置 &D0 与一个 电路 结合使用,该电路在从高到低的转换时复位,可以避免此问题。


2.3.3. Tron DF

应该通过设置 S2 > 127 来禁用 ESC 字符;

发起

ATL1&L1Q1&C1&D3S2=171\D1&W

应答

ATM0&L2Q1&C1&D3S0=1S2=171\D1&W


2.3.4. US Robotics Courier V-Everything

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 开关全部为默认设置,除了以下内容

3

OFF 禁用结果代码

4

ON 禁用离线命令

5

ON 用于发起,OFF 用于应答

8

OFF 哑终端模式


3. PPPD

您需要 pppd (点对点协议守护程序) 和对其工作原理的合理了解。如有必要,请查阅相关的 RFC 或 Linux PPP HOWTO。由于您不打算使用登录过程,因此您不使用 (m)getty,并且您不需要与控制您的链接的 pppd 关联的(伪)用户。您不打算拨号,因此您也不需要任何 chat 脚本。事实上,您刚刚构建的调制解调器电路和配置非常类似于完全接线的零调制解调器电缆。这意味着您必须以与零调制解调器电缆相同的方式配置您的 pppd。

为了获得可靠的链路,您的设置应满足以下标准;


3.1. 配置

假设调制解调器连接到 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
像“asyncmap 0”、“lock”、“modem”和“-detach”之类的东西可能已经在/etc/ppp/options中。如果没有,请将它们添加到您的/etc/ppp/options.ttyS1中。因此,如果本地系统是 192.168.1.1,远程系统是 10.1.1.1,则/etc/ppp/options.ttyS1在本地系统上将是
crtscts
mru 576
mtu 576
passive
192.168.1.1:10.1.1.1
-chap
modem
#noauth
-pap
persist
#maxfail 0
#holdoff 10
远程系统上的 options.ttyS1 将是
crtscts
mru 576
mtu 576
passive
10.1.1.1:192.168.1.1
-chap
modem
#noauth
-pap
persist
#maxfail 0
#holdoff 10
被动选项限制了(重新)连接尝试的次数。persist 选项将在断开连接或无法首先连接时保持 pppd 处于活动状态。如果您在同时进行文件传输(FTP 或网页浏览)时经常使用 telnet,您可能需要使用较小的 MTU 和 MRU,例如 296。这将使远程系统更具响应性。如果您不太关心在 FTP 期间进行 telnet,您可以将 MTU 和 MRU 设置为 1500。但请记住,UDP 无法分片。Speakfreely 例如使用 512 字节的 UDP 数据包。因此,speakfreely 的最小 MTU 为 552 字节。noauth 选项对于某些较新的发行版可能是必需的。“maxfail 0”对于较新的 PPPD 可能是必需的。连接丢失后,PPPD 将等待一段时间然后重新连接。此时间可以使用 holdoff 选项设置。默认的 holdoff 曾经是 30 秒,但现在为零。通常建议 holdoff 为 10。


3.2. 脚本

3.2.1. 启动 pppd 并保持其运行

您可以从启动 (rc) 脚本启动 pppd。但是,如果您这样做,并且 pppd 死掉,您将失去链接。更稳定的解决方案是从/etc/inittab;

s1:23:respawn:/usr/sbin/pppd /dev/ttyS1 115200
启动 pppd。这样,如果 pppd 死掉,它将被重新启动。但请确保您有一个“-detach”选项(在较新的系统上为 nodetach),否则 inittab 将启动 pppd 的多个实例,同时抱怨“respawning too fast”。

注意:一些较旧的系统不接受速度“115200”。在这种情况下,您将必须将速度设置为 38400,并使用 setserial 设置“spd_vhi”标志。一些系统希望您使用“cua”而不是“ttyS”设备。


3.2.2. 设置路由

可以使用 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 也可以用于使用 netdate 同步您的时钟。

当然,在 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
“case $2”和“/dev/ttyS1)”位在那里,以防您使用多个 ppp 链接。Ip-up 将在每次链接启动时运行,但只有“/dev/ttySx)”和“;”之间的部分将被执行,为正确的 ttyS 设置正确的路由。您可以在 Linux 网络 HOWTO 关于路由的部分中找到更多关于路由的信息。

一些系统使用动态 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
将“My_Ip_Address”替换为您的 IP 地址。/usr/local/sbin/ntpdate.sh同步时钟。它停止 NTPD,使用 ntpdate 同步,然后再次启动 NTPD。/usr/local/sbin/null-route.sh是一个设置空路由的脚本;
#!/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
如果您正在使用 RFC 1918 地址,则只要您使用较小的网络掩码,上述空路由就不会干扰。网络 192.168.1.0/24 不会受到空路由 192.168.0.0/16 的影响;
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


3.3. 测试

像调制解调器测试一样测试整个过程。如果它有效,请骑上自行车并将远程调制解调器带到您链路的远程端。如果它不起作用,您应该检查的一件事是 COM 端口速度;显然,一个常见的错误是使用一个速度使用 Minicom 配置调制解调器,然后配置 pppd 以使用另一个速度。这不会起作用!您必须始终使用相同的速度!