30.3.PPP 连接的故障排除 ======================= 本节涉及通过调制解调器连接使用 PPP 时可能出现的几个问题。一些 ISP 给出 ``ssword`` 提示,而另一些则提示 ``password``\ 。如果没有编写相应地 ``ppp`` 脚本,登录尝试就会失败。调试 ``ppp`` 连接的最常用方法是通过手动连接,如本节所述。 30.3.1.检查设备节点 ------------------- 当使用定制内核时,确保在内核配置文件中包括以下一行: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session device uart **uart** 设备已经包含在 ``GENERIC`` 内核中,所以在这种情况下无需多余的步骤。只要在 ``dmesg`` 输出中检查调制解调器设备就可以了: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # dmesg | grep uart 这应该会显示一些关于 **uart** 设备的相关输出。这些是我们需要的 COM 端口。如果调制解调器像一个标准的串行端口,它应该被列在 **uart1** 或 **COM2** 上。如果是这样,就不需要重建内核了。在匹配时,如果调制解调器在 **uart1** 上,调制解调器设备将是 **/dev/cuau1**\ 。 30.3.2.手动连接 --------------- 通过手动控制 ``ppp`` 连接到互联网是快速、简单的,而且是调试连接或者只是获得 ISP 如何对待 ``ppp`` 客户端连接的信息的好方法,。让我们从命令行启动 PPP。注意,在我们所有的例子中,我们将使用 *example* 作为运行 PPP 的机器的主机名。要启动 ``ppp``\ : .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # ppp .. raw:: latex \diilbookstyleinputcell .. code:: shell-session ppp ON example> set device /dev/cuau1 这第二条命令设置调制解调器设备为 **cuau1**\ 。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session ppp ON example> set speed 115200 这将连接速度设置为 115,200 kbps。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session ppp ON example> enable dns 这告诉 ``ppp`` 配置解析器,并在 **/etc/resolv.conf** 中添加 nameserver 行。如果 ``ppp`` 不能确定主机名,可以在以后手动设置。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session ppp ON example> term 这将切换到“terminal”模式,以便手动控制调制解调器。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session deflink: Entering terminal mode on /dev/cuau1 type '~h' for help .. raw:: latex \diilbookstyleinputcell .. code:: shell-session at OK atdt123456789 使用 ``at`` 初始化调制解调器,然后使用 ``atdt`` 和 ISP 的号码,开始拨号过程。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session CONNECT 确认连接,如果我们将有任何连接问题,与硬件无关,我们将在这里尝试解决这些问题。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session ISP Login:myusername 在这个提示下,用 ISP 提供的用户名返回提示。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session ISP Pass:mypassword 在这个提示下,用 ISP 提供的密码来回答。就像登录 FreeBSD 一样,密码不会有回显。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session Shell or PPP:ppp 根据 ISP 的不同,这个提示可能不会出现。如果它出现了,它将询问是否在供应商上使用 shell 或启动 ``ppp``\ 。在这个例子中,选择 ``ppp`` 是为了建立互联网连接。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session Ppp ON example> 注意,在这个例子中,第一个 ``P`` 被大写了。这表明我们已经成功连接到 ISP。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session Ppp ON example> 我们已经成功地与 ISP 进行了认证,正在等待分配的 IP 地址。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session PPP ON example> 我们已就 IP 地址达成协议并成功完成连接。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session PPP ON example>add default HISADDR 在这里我们添加我们的默认路由,我们需要在与外界通信之前先做这个,因为目前唯一建立的连接是与对等者的连接。如果由于现有的路由而导致失败,在 ``add`` 的前面加上一个砰的字符 ``!``\ 。或者,在进行实际连接之前设置这个,它将相应地协商一个新的路由。 如果一切顺利,我们现在应该有一个与互联网的活动连接,可以用 ``CTRL``\ +\ ``z`` 将其扔到后台。如果 ``PPP`` 返回 ``ppp``\ ,则连接已经丢失。这是很好的信息,因为它显示了连接状态。大写的 P 代表与 ISP 的连接,小写的 p 表示连接已经丢失。 30.3.3.调试 ----------- 如果不能建立连接,使用 ``set ctsrts off`` 将硬件流 CTS/RTS 转为关闭。这主要是在连接到某些具有 PPP 功能的终端服务器时,PPP 在试图向通信链路写入数据时挂起,并等待可能永远不会出现的 Clear To Send(CTS)信号。当使用这个选项时,加入 ``set accmap``\ ,因为可能需要它来打败依赖于从头到尾传递某些字符的硬件,大多数时候是 XON/XOFF。参考 `ppp(8) `__ 以了解关于这个选项的更多信息以及它的使用方法。 老式调制解调器可能需要 ``set parity even``\ 。默认情况下,奇偶校验被设置为无,但在较旧的调制解调器上,用于流量大增时的错误检查。 PPP 可能不会返回到命令模式,这通常是通信错误,ISP 正在等待协商的开始。在这一点上,使用 ``~p`` 将迫使 ppp 开始发送配置信息。 如果从未出现登录提示,很可能需要 PAP 或 CHAP 认证。要使用 PAP 或 CHAP,在进入终端模式之前,在 PPP 中添加以下选项: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session ppp ON example> set authname myusername 其中 *myusername* 应替换为 ISP 分配的用户名。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session ppp ON example> set authkey mypassword 其中 *mypassword* 应替换为 ISP 分配的密码。 如果建立了连接,但似乎找不到任何域名,试着 `ping(8) `__ 一个 IP 地址。如果有百分之百(100%)的数据包丢失,很可能是没有分配默认路由。仔细检查在连接过程中是否设置了 ``add default HISADDR``\ 。如果可以连接到一个远程 IP 地址,有可能是没有在 **/etc/resolv.conf** 中添加一个解析地址。这个文件应该是这样的: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session domain example.com nameserver x.x.x.x nameserver y.y.y.y 其中 *x.x.x.x* 和 *y.y.y.y* 应该被替换成 ISP 的 DNS 服务器的 IP 地址。 要配置 `syslog(3) `__ 为 PPP 连接提供日志记录,确保在 **/etc/syslog.conf** 中存在这一行: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session !ppp *.* /var/log/ppp.log