28.3. PPP 连接的故障排除

本节涉及通过调制解调器连接使用 PPP 时可能出现的几个问题。一些 ISP 提出 ssword 提示,而另一些则提出 password。如果没有相应地编写 ppp 脚本,登录尝试就会失败。调试 ppp 连接的最常用方法是通过手动连接,如本节所述。

28.3.1. 检查设备节点

当使用自定义内核时,确保在内核配置文件中包括以下一行。

device uart

uart 设备已经包含在 GENERIC 内核中,所以在这种情况下不需要额外的步骤。只要在 dmesg 输出中检查调制解调器设备就可以了:

# dmesg | grep uart

这应该会显示一些关于 uart 设备的相关输出。这些是我们需要的 COM 端口。如果调制解调器像一个标准的串行端口,它应该被列在 uart1COM2 上。如果是这样,就不需要重建内核了。在匹配时,如果调制解调器在 uart1 上,调制解调器设备将是 /dev/cuau1

28.3.2. 手动连接

通过手动控制 ppp 连接到互联网是快速、简单的,而且是调试连接的好方法,或者只是获得 ISP 如何对待 ppp 客户端连接的信息。让我们从命令行启动 PPP。注意,在我们所有的例子中,我们将使用 example 作为运行 PPP 的机器的主机名。要启动 ppp

# ppp
ppp ON example> set device /dev/cuau1

这第二条命令设置调制解调器设备为 cuau1

ppp ON example> set speed 115200

这将连接速度设置为 115,200 kbps。

ppp ON example> enable dns

这告诉 ppp 配置解析器,并在 /etc/resolv.conf 中添加 nameserver 行。如果 ppp 不能确定主机名,可以以后手动设置。

ppp ON example> term

这将切换到“terminal”模式,以便手动控制调制解调器。

deflink: Entering terminal mode on /dev/cuau1
type '~h' for help
at
OK
atdt123456789

使用 at 初始化调制解调器,然后使用 atdt 和 ISP 的号码,开始拨号过程。

CONNECT

确认连接,如果我们将有任何连接问题,与硬件无关,我们将在这里尝试解决这些问题。

ISP Login:myusername

在这个提示下,用 ISP 提供的用户名返回提示。

ISP Pass:mypassword

在这个提示下,用 ISP 提供的密码来回答。就像登录 FreeBSD 一样,密码不会有回显。

Shell or PPP:ppp

根据 ISP 的不同,这个提示可能不会出现。如果它出现了,它将询问是否在供应商上使用 shell 或启动 ppp。在这个例子中,选择 ppp 是为了建立互联网连接。

Ppp ON example>

注意,在这个例子中,第一个 p 被大写了。这表明我们已经成功连接到 ISP。

Ppp ON example>

我们已经成功地与 ISP 进行了认证,正在等待分配的 IP 地址。

PPP ON example>

我们已就 IP 地址达成协议并成功完成连接。

PPP ON example>add default HISADDR

在这里我们添加我们的默认路由,我们需要在与外界交谈之前做这个,因为目前唯一建立的连接是与对等体的连接。如果由于现有的路由而导致失败,在 add 的前面加上一个砰的字符 。或者,在进行实际连接之前设置这个,它将相应地协商一个新的路由。

如果一切顺利,我们现在应该有一个与互联网的活动连接,可以用 CTRL+z 将其扔到后台。如果 PPP 返回到 `ppp ,则连接已经丢失。这是很好的信息,因为它显示了连接状态。大写的 P 代表与 ISP 的连接,小写的 P 表示连接已经丢失。

28.3.3. 调试

如果不能建立连接,使用 set ctsrts off 将硬件流 CTS/RTS 转为关闭。这主要是在连接到某些具有 PPP 功能的终端服务器时,PPP 在试图向通信链路写入数据时挂起,并等待可能永远不会出现的 Clear To Send(CTS)信号。当使用这个选项时,包括 set accmap,因为可能需要它来打败依赖于从头到尾传递某些字符的硬件,大多数时候是 XON/XOFF。参考 ppp(8)open in new window 以了解关于这个选项的更多信息以及它的使用方法。

老式调制解调器可能需要 set parity even。默认情况下,奇偶校验被设置为无,但在较旧的调制解调器上,用于流量大增时的错误检查。

PPP 可能不会返回到命令模式,这通常是一个谈判错误,ISP正在等待谈判的开始。在这一点上,使用 ~p 将迫使 ppp 开始发送配置信息。

如果从未出现登录提示,很可能需要 PAP 或 CHAP 认证。要使用 PAP 或 CHAP,在进入终端模式之前,在 PPP 中添加以下选项:

ppp ON example> set authname myusername

其中 myusername 应替换为 ISP 分配的用户名。

ppp ON example> set authkey mypassword

其中 mypassword 应替换为 ISP 分配的密码。

如果建立了连接,但似乎找不到任何域名,试着 ping(8)open in new window 一个 IP 地址。如果有百分之百(100%)的数据包丢失,很可能是没有分配默认路由。仔细检查在连接过程中是否设置了 add default HISADDR。如果可以连接到一个远程 IP 地址,有可能是没有在 /etc/resolv.conf 中添加一个解析器地址。这个文件应该是这样的:

domain example.com
nameserver x.x.x.x
nameserver y.y.y.y

其中 x.x.x.xy.y.y.y 应该被替换成 ISP 的 DNS 服务器的 IP 地址。

要配置 syslog(3)open in new window 为 PPP 连接提供日志记录,确保在 /etc/syslog.conf 中存在这一行:

!ppp
*.*     /var/log/ppp.log