28.3. PPP 连接的故障排除

本节将讲述通过 modem (调制解调器) 连接使用 PPP 时可能出现的问题。有些 ISP 会提供 ssword 提示符,而其它的可能会出现 password ; 如果没有根据情况的不同相应地编写 ppp 脚本,登录就会失败。诊断 ppp 最常用的方法是本节所述的手动进行连接。

28.3.1.检查设备节点

如果使用的是自定义内核,确保在其编译配置中包含下列配置:

  1. device uart

默认的 GENERIC 内核中包含了 uart 设备,如果使用的是它的话就不需要额外的步骤。只要查看 dmesg 输出中是否有 modem 设备:

  1. # dmesg | grep uart

这应该显示一些与 uart 设备有关的输出。这些就是我们需要的 COM 端口。如果 modem (调制解调器) 按照标准串行端口工作,它应该被列在 uart1COM2 上。如果是这样,就不需要重建内核了。如果 modem 设备连接在 uart1 接口 (在 DOS 中称为 COM2 ),那么 modem 将会是 /dev/cuau1

28.3.2.手动连接

通过手动控制 ppp 来连接 Internet 是诊断连接及获知 ISP 处理 PPP 客户端方式的一个快速且简单的方法。让我们从命令行启动 PPP,在所有的例子中我们使用 example 表示运行 PPP 服务的主机名。键入 ppp 命令打开 ppp:

  1. ppp
  1. ppp ON example> set device /dev/cuau1

第二条命令将调制解调器 (modem) 设备设置为 cuau1

  1. ppp ON example> set speed 115200

设置连接速度,在本例中我们使用15,200 kbps。

  1. ppp ON example> enable dns

使 ppp 配置域名服务,在文件 /etc/resolv.conf 中添加域名服务器行。如果 ppp 不能确定主机名,可以以后手动设置。

  1. ppp ON example> term

切换到“终端”模式以便手动控制调制解调器。

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

使用命令 at 初始化 modem ,然后使用 atdt 和 ISP 给你的号码进行拨号。

  1. CONNECT

连接配置,如果遇到了与硬件无关的连接问题,可以在这里尝试解决。

  1. ISP Login:myusername

这里提示你输入用户名,输入 ISP 提供的用户名然后按回车。

  1. ISP Pass:mypassword

这时提示我们输入密码,输入 ISP 提供的密码。如同登录入 FreeBSD ,密码不会显示。

  1. Shell or PPP:ppp

由于 ISP 的不同,这个提示符可能不会出现。这里我们需要考虑:是使用运行于提供商端的 Shell,还是启动 ppp ?这本例中,我们选择使用 ppp ,因为我们希望得到 Internet 连接。

  1. Ppp ON example>

注意在这个例子中,第一个 P 已经大写。这表示我们已经成功地连接上了 ISP。

  1. Ppp ON example>

我们已经成功通过了 ISP 的验证,正在等待分配 IP 地址。

  1. PPP ON example>

我们得到了一个 IP 地址,成功地完成了连接。

  1. PPP ON example>add default HISADDR

这样就完成了添加默认路由所需的配置。这是与外界通信所必需的。因为之前我们只是与服务器端建立了连接。如果由于已存在的路由而导致操作失败,你可以在 add 前加 ! 号。除此之外,你也可以在真正连接之前设置这些 (指 add default HISADDR),ppp 会根据这项设定协商取得新的路由。

如果一切顺利,我们现在应该可以主动连接到 Internet,可以使用 CTRL + z 使其转入后台。如果发现 PPP 重新变为 ppp ,则表示连接被断开。大写的 P 表明建立了到 ISP 的连接,而小写的 p 则表示连接由于某种原因被断开。

28.3.3.诊断排错

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

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

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

  1. ppp ON example> set authname myusername

此处 myusername 应改为 ISP 分配给你的用户名:

  1. ppp ON example> set authkey mypassword

此处 mypassword 应该为 ISP 分配给你的密码。

如果连接正常,但无法查找域名,请尝试 ping(8) 某个 IP 地址来看看是否返回了信息。如果发现百分之百 (100%) 丢包,那么很可能没有分配默认路由。仔细检查在连接过程中是否设置了添加默认的 add default HISADDR 。如果能连接到远程的 IP 地址则有可能域名解析服务器的地址没有被加入到 /etc/resolv.conf 。这个文件应该是下面的样子:

  1. domain example.com
  2. nameserver x.x.x.x
  3. nameserver y.y.y.y

此处 x.x.x.xy.y.y.y 应该改为 ISP 的 DNS 服务器的 IP 地址。

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

  1. !ppp
  2. *.* /var/log/ppp.log