26.4. 拨入服务

Contributed by Guy Helmer.
Additions by Sean Kelly.

为 FreeBSD 系统配置拨号服务类似于配置终端, 只是使用调制解调器代替了终端设备。FreeBSD 支持外部和内部调制解调器。

外部调制解调器更方便,因为它们通常可以通过存储在非易失性RAM中的参数进行配置,而且它们通常提供指示灯,显示重要的RS-232信号的状态,指示调制解调器是否正常工作。

内部调制解调器通常缺乏非易失性RAM,因此其配置可能仅限于设置DIP开关。如果内部调制解调器有任何信号指示灯,当盖子盖好后,很难看到它们。

当使用外部调制解调器时,需要适当的电缆。一个标准的RS-232C串行电缆应该足够了。

FreeBSD 需要 RTSCTS 信号来控制速度超过 2400 bps 的流量, CD 信号来检测呼叫被接听或线路被挂断, 以及 DTR 信号来在会话完成后重置调制解调器。有些线缆的布线没有全部需要的信号,所以如果线路挂断后登录会话没有消失,可能是线缆有问题。有关这些信号的更多信息,请参阅第 26.2.1 节 “序列线与端口”

像其他类UNIX®操作系统一样,FreeBSD使用硬件信号来发现呼叫何时被接听或线路被挂断,并在呼叫后挂断和重置调制解调器。FreeBSD 避免了向调制解调器发送命令或监视调制解调器的状态报告。

FreeBSD 支持 NS8250, NS16450, NS16550, 和 NS16550A-based RS-232C (CCITT V.24) 的通信接口。8250和16450设备具有单字符缓冲器。16550设备提供了16个字符的缓冲区,性能更好。普通16550设备中的错误导致1650设备无法使用16个字符缓冲区,因此尽可能使用16550A设备。由于单字符缓冲区设备比16字符缓冲区设备需要操作系统做更多的工作,因此最好使用基于16550A的串行接口卡。如果系统有许多活动的串口或将有大量的负载,基于16550A的卡更适合于低错误率的通信。

本节的其余部分演示了如何配置调制解调器接收传入连接,如何与调制解调器通信,并提供了一些故障排除技巧。

26.4.1. 调制解调器设定

As with terminals, init spawns a getty process for each configured serial port used for dial-in connections. When a user dials the modem's line and the modems connect, the Carrier Detect signal is reported by the modem. The kernel notices that the carrier has been detected and instructs getty to open the port and display a login: prompt at the specified initial line speed. In a typical configuration, if garbage characters are received, usually due to the modem's connection speed being different than the configured speed, getty tries adjusting the line speeds until it receives reasonable characters. After the user enters their login name, getty executes login, which completes the login process by asking for the user's password and then starting the user's shell.

There are two schools of thought regarding dial-up modems. One configuration method is to set the modems and systems so that no matter at what speed a remote user dials in, the dial-in RS-232 interface runs at a locked speed. The benefit of this configuration is that the remote user always sees a system login prompt immediately. The downside is that the system does not know what a user's true data rate is, so full-screen programs like Emacs will not adjust their screen-painting methods to make their response better for slower connections.

The second method is to configure the RS-232 interface to vary its speed based on the remote user's connection speed. Because getty does not understand any particular modem's connection speed reporting, it gives a login: message at an initial speed and watches the characters that come back in response. If the user sees junk, they should press Enter until they see a recognizable prompt. If the data rates do not match, getty sees anything the user types as junk, tries the next speed, and gives the login: prompt again. This procedure normally only takes a keystroke or two before the user sees a good prompt. This login sequence does not look as clean as the locked-speed method, but a user on a low-speed connection should receive better interactive response from full-screen programs.

当以特定速度锁定调制解调器的数据通信速率时,不需要更改/etc/gettytab。但是,对于匹配速度配置,可能需要额外的条目来定义调制解调器使用的速度。这个例子配置了一个 14.4 Kbps 调制解调器,最高接口速度为 19.2 Kbps,使用 8 位无奇偶校验连接。它配置了getty,以19.2 Kbps启动V.32bis连接的通信速率,然后循环使用9600 bps、2400 bps、1200 bps、300 bps,再回到19.2 Kbps。通信速率循环是通过nx=(下表)能力实现的。每条线路使用tc=(表的延续)条目来拾取特定数据速率的其余设置。

#
# Additions for a V.32bis Modem
#
um|V300|High Speed Modem at 300,8-bit:\
        :nx=V19200:tc=std.300:
un|V1200|High Speed Modem at 1200,8-bit:\
        :nx=V300:tc=std.1200:
uo|V2400|High Speed Modem at 2400,8-bit:\
        :nx=V1200:tc=std.2400:
up|V9600|High Speed Modem at 9600,8-bit:\
        :nx=V2400:tc=std.9600:
uq|V19200|High Speed Modem at 19200,8-bit:\
        :nx=V9600:tc=std.19200:

对于 28.8 Kbps 调制解调器,或是启用压缩的 14.4 Kbps 调制解调器,请使用更高的通信速率,如下所示:

#
# Additions for a V.32bis or V.34 Modem
# Starting at 57.6 Kbps
#
vm|VH300|Very High Speed Modem at 300,8-bit:\
        :nx=VH57600:tc=std.300:
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
        :nx=VH300:tc=std.1200:
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
        :nx=VH1200:tc=std.2400:
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
        :nx=VH2400:tc=std.9600:
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
        :nx=VH9600:tc=std.57600:

对于缓慢的CPU或没有16550A-based的串口的高负载系统,这种配置可能会在57.6 Kbps的速度下产生sio silo错误。

/etc/ttys的配置类似于例 26.1 “设定终端机项目”,但传递给getty的参数不同,终端类型使用了dialup。用init代替xxx将在设备上运行的进程:

ttyu0   "/usr/libexec/getty xxx"   dialup on

可以更改dialup终端类型。例如,将vt102设置为默认的终端类型,允许用户在远程系统上使用VT102仿真器。

对于锁定速度配置,请在/etc/gettytab中指定有效类型的速度。这个例子是针对端口速度被锁定为 19.2 Kbps 的调制解调器:

ttyu0   "/usr/libexec/getty std.19200"   dialup on

在匹配速度得配置中,该条目需要引用/etc/gettytab中适当的以auto-baud开头的条目。在本例中,若要继续使用19.2 Kbps开始的匹配速度调制解调器,请使用此条目:

ttyu0   "/usr/libexec/getty V19200"   dialup on

编辑/etc/ttys后,在收到init前等待调制解调器正确配置并连接:

# kill -HUP 1

高速调制解调器,如V.32,V.32bis和V.34调制解调器,使用硬件(RTS/CTS)流量控制。 V.32 V.32bis使用stty设置调制解调器端口的硬件流控制标志。本示例在COM2的拨入和拨出初始化设备上设置crtcts标志:

# stty -f /dev/ttyu1.init crtscts
# stty -f /dev/cuau1.init crtscts

26.4.2. 故障排除

本节提供了一些关于拨号调制解调器无法连接到FreeBSD系统的故障排除技巧。

Hook up the modem to the FreeBSD system and boot the system. If the modem has status indication lights, watch to see whether the modem's DTR indicator lights when the login: prompt appears on the system's console. If it lights up, that should mean that FreeBSD has started a getty process on the appropriate communications port and is waiting for the modem to accept a call.

如果 DTR 指示灯不亮,请通过控制台登录到 FreeBSD 系统并键入ps ax以查看 FreeBSD 是否在正确的端口上运行getty

  114 ??  I      0:00.10 /usr/libexec/getty V19200 ttyu0

如果第二列包含d0而非??,并且调制解调器尚未接受呼叫,则意味着getty已在通信端口上完成打开。这可能表示电缆或配置错误的调制解调器有问题,因为getty在调制解调器断言载波检测信号之前,不应打开通信端口。

如果没有 getty进程等待打开端口, 请仔细检查 /etc/ttys中的端口条目是否正确。另外,检查 /var/log/messages 以查看是否有 initgetty 的日志信息。

Next, try dialing into the system. Be sure to use 8 bits, no parity, and 1 stop bit on the remote system. If a prompt does not appear right away, or the prompt shows garbage, try pressing Enter about once per second. If there is still no login: prompt, try sending a BREAK. When using a high-speed modem, try dialing again after locking the dialing modem's interface speed.

If there is still no login: prompt, check /etc/gettytab again and double-check that:

  • /etc/ttys中的条目中指定的初始能力(capability )名称与/etc/gettytab中的能力(capability )名称一致。

  • 每个 nx= 条目匹配另一个gettytab功能名称(capability name)。

  • 每个tc=条目都与另一个 gettytab能力名称相匹配。

如果 FreeBSD 系统上的调制解调器无应答, 请确认调制解调器的配置是在 DTR 提示时接听电话。如果调制解调器的配置是正确的, 请通过检查调制解调器的指示灯来确认 DTR 线路是否已被激活。

如果仍然不起作用,请尝试向 FreeBSD 常规问题邮件列表 发送电子邮件,描述调制解调器的问题。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.