有关如何解决与 PPP 和 PPPoE 相关的问题的信息,请参阅以下各节。
如果 PPP 链路处于活动状态,但远程网络上几乎没有可以访问的主机,则表明可能存在网络问题。以下过程将说明如何确定并修复影响 PPP 链路的网络问题。
成为本地计算机的超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
关闭有问题的链路。
在配置文件中,通过为 PPP 配置添加以下选项以禁用所有可选协议:
noccp novj nopcomp noaccomp default-asyncmap |
这些选项可提供最简单的、未被压缩的可用 PPP。请尝试在命令行上将这些选项作为 pppd 的参数进行调用。如果可以访问先前无法访问的主机,请在以下任一位置添加这些选项。
/etc/ppp/peers/peer-name,call 选项之后
/etc/ppp/options,确保这些选项可全局应用
呼叫远程对等点,然后启用调试功能。
% pppd debug call peer-name |
使用 chat 的 -v 选项,获取聊天程序的详细日志。
例如,在任何 PPP 配置文件中使用以下格式:
connect 'chat -v -f /etc/ppp/chatfile' |
/etc/ppp/chatfile 表示聊天文件的名称。
使用 Telnet 或其他应用程序访问远程主机,以尝试重新生成该问题。
观察调试日志。如果仍然无法访问远程主机,则 PPP 问题可能与网络相关。
检验远程主机的 IP 地址是否为已注册的 Internet 地址。
某些组织会指定在本地网络内已知、但无法路由至 Internet 的内部 IP 地址。如果远程主机位于您公司内,则必须设置名称到地址转换 (name-to-address translation, NAT) 服务器或代理服务器,才能访问 Internet。如果远程主机位于您公司外,则应向远程组织报告该问题。
检查路由表。
(可选的)如果该计算机为路由器,请检查可选功能。
# ndd -set /dev/ip ip_forwarding 1 |
有关 ndd 的更多信息,请参阅 ndd(1M) 手册页。
在 Solaris 10 发行版中,可以使用 routeadm(1M) 来代替 ndd(1M)。
# routeadm -e ipv4-forwarding -u |
ndd 命令没有持久性。使用该命令设置的值将在重新引导系统时丢失。routeadm 命令则具有持久性。使用该命令设置的值将在重新引导系统后保留。
检查通过 netstat -s 和类似工具获取的统计信息。
有关 netstat 的完整详细信息,请参阅 netstat(1M) 手册页。
在本地计算机上运行统计信息。
呼叫对等点。
观察 netstat -s 生成的新统计信息。有关更多信息,请参阅影响 PPP 的常见网络问题。
检查 DNS 配置。
错误的名称服务配置会因无法解析 IP 地址而使应用程序出现故障。
您可以使用 netstat -s 生成的消息,来修复下表中所示的网络问题。相关过程信息,请参阅如何诊断网络问题。
表 21–2 影响 PPP 的常见网络问题
消息 |
问题 |
解决方案 |
---|---|---|
IP packets not forwardable |
本地主机缺少路由。 |
在本地主机的路由表中添加缺失的路由。 |
ICMP input destination unreachable |
本地主机缺少路由。 |
在本地主机的路由表中添加缺失的路由。 |
ICMP time exceeded |
两个路由器正在互相转发同一目标地址,从而使包来回传递,直到超出生存时间 (time-to-live, TTL) 值。 |
使用 traceroute 查找路由循环的原因,然后与出现错误的路由器的管理员联系。有关 traceroute 的信息,请参阅 traceroute(1M) 手册页。 |
IP packets not forwardable |
本地主机缺少路由。 |
在本地主机的路由表中添加缺失的路由。 |
ICMP input destination unreachable |
本地主机缺少路由。 |
在本地主机的路由表中添加缺失的路由。 |
两个对等点无法成功建立链路,则表明出现了通信问题。有时,这些问题实际上是由于聊天脚本配置错误而导致的协商问题。以下过程说明如何清除通信问题。有关清除由于聊天脚本错误而导致的协商问题,请参见表 21–5。
成为本地计算机的超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
呼叫对等点。
呼叫远程对等点,然后启用调试功能。
% pppd debug call peer-name |
为修复某些通信问题,可能需要从对等点获取调试信息。
在生成的日志中检查通信问题。有关更多信息,请参阅影响 PPP 的常见通信问题。
下表介绍了与如何诊断和修复通信问题过程的日志输出有关的症状。
表 21–3 影响 PPP 的常见通信问题
症状 |
问题 |
解决方案 |
---|---|---|
too many Configure-Requests |
一个对等点无法接收另一个对等点的信息。 |
检查以下问题:
|
pppd debug 输出显示 LCP 已启动,但更高级别的协议失败或显示出现 CRC 错误。 |
异步控制字符映射 (asynchronous control character map, ACCM) 的设置不正确。 |
使用 default-async 选项将 ACCM 设置为标准的 FFFFFFFF 缺省值。首先,尝试在命令行上将 default-async 用作 pppd 的选项。如果该问题已解决,则将 default-async 添加到 /etc/ppp/options,或添加到 call 选项之后的 /etc/ppp/peers/peer-name。 |
pppd debug 输出显示,IPCP 在启动后立即终止。 |
IP 地址配置可能不正确。 |
|
链路显示性能很差。 |
调制解调器的配置不正确,并出现流量控制配置错误、调制解调器设置错误以及 DTE 日志配置错误。 |
检查调制解调器配置。 如有必要,调整该配置。 |
某些 PPP 问题可以追溯到 PPP 配置文件的问题。以下过程说明如何确定并修复常见的配置问题。
成为本地计算机的超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
呼叫远程对等点,然后启用调试功能。
% pppd debug call peer-name |
在生成的日志中检查配置问题。有关更多信息,请参阅常见的 PPP 配置问题。
下表介绍了与如何诊断 PPP 配置问题过程的日志输出有关的症状。
表 21–4 常见的 PPP 配置问题
症状 |
问题 |
解决方案 |
---|---|---|
pppd debug 输出包含错误消息 Could not determine remote IP address。 |
/etc/ppp/peers/peer-name 文件未包含对等点的 IP 地址。对等点在链路协商期间没有提供 IP 地址。 |
在 pppd 命令行或 /etc/ppp/peers/peer-name 中,使用以下格式为对等点提供 IP 地址: :10.0.0.10 |
pppd debug 输出显示 CCP 数据压缩失败。该输出还指示链路被丢弃。 |
对等点的 PPP 压缩配置可能出现冲突。 |
通过在 /etc/ppp/options 中添加 noccp 选项,对其中一个对等点禁用 CCP 压缩。 |
调制解调器问题可能是拨号链路的主要问题。调制解调器配置问题的最常见指示是对等点没有响应。但是,在确定链路问题是否确实为调制解调器配置问题所致时,可能会遇到问题。
有关调制解调器疑难解答的基本建议,请参阅《系统管理指南:高级管理》中的“解决终端和调制解调器问题”。此外,调制解调器制造商所提供的文档和网站也提供了有关其特定设备问题的解决方案。以下过程有助于确定调制解调器配置错误是否会导致链路问题。
按照如何启用 PPP 调试功能中的说明,呼叫已打开调试功能的对等点。
显示生成的 /var/log/pppdebug 日志,以检查调制解调器配置是否错误。
使用 ping 在链路上发送各种大小的包。
有关 ping 的完整详细信息,请参阅 ping(1M) 手册页。
如果收到较小的包,而较大的包被丢弃,则表明调制解调器存在问题。
检查接口 sppp0 上的错误:
% netstat -ni Name Mtu Net/Dest Address Ipkts Ierrs Opkts Oerrs Collis Queue lo0 8232 127.0.0.0 127.0.0.1 826808 0 826808 0 0 0 hme0 1500 172.21.0.0 172.21.3.228 13800032 0 1648464 0 0 0 sppp0 1500 10.0.0.2 10.0.0.1 210 0 128 0 0 0 |
如果接口错误随时间而增加,则调制解调器配置可能存在问题。
显示生成的 /var/log/pppdebug 日志时,输出中出现以下症状可以表明调制解调器配置出现错误。本地计算机可以接收对等点的信息,而对等点却无法接收本地计算机的信息。
对等点未发送任何 "recvd" 消息。
输出包含来自对等点的 LCP 消息,但链路失败,并显示本地计算机发送的 too many LCP Configure Requests 消息。
链路终止,并显示 SIGHUP 信号。
以下过程用于从 chat 获取调试信息和清除常见问题的建议。有关更多信息,请参阅常见的聊天脚本问题。
成为拨出计算机的超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
编辑要呼叫的对等点的 /etc/ppp/peers/peer-name 文件。
将 -v 作为参数添加到 connect 选项中指定的 chat 命令。
connect "/usr/bin/chat -v -f /etc/ppp/chat-script-name" |
查看 /etc/ppp/connect-errors 文件中的聊天脚本错误。
以下是使用 chat 出现的主要错误。
Oct 31 08:57:13 deino chat[107294]: [ID 702911 local2.info] expect (CONNECT) Oct 31 08:57:58 deino chat[107294]: [ID 702911 local2.info] alarm Oct 31 08:57:58 deino chat[107294]: [ID 702911 local2.info] Failed |
该示例表明在等待 (CONNECT) 字符串时超时。如果 chat 失败,将从 pppd 获取以下消息:
Connect script failed |
聊天脚本是拨号链路中容易出现问题的地方。下表列出了常见的聊天脚本错误,并提供了用于修复这些错误的建议。有关过程信息,请参阅如何获取聊天脚本的调试信息。
表 21–5 常见的聊天脚本问题
拨入服务器可能会因速度设置冲突而出现问题。以下过程有助于您确定引起串行线路速度产生冲突的链路问题。
下列行为可导致速度问题:
通过 /bin/login 等程序调用了 PPP 并指定了线路速度。
通过 mgetty 启动了 PPP 并无意中提供了位速率。
由于 pppd 将初始设置的线路速度更改为通过 /bin/login 或 mgetty 设置的速度, 因此线路出现故障。
登录到拨入服务器。呼叫启用了调试功能的对等点。
如果需要说明,请参见如何启用 PPP 调试功能。
显示生成的 /var/log/pppdebug 日志。
在该输出中检查有无以下消息:
LCP too many configure requests |
此消息表明,为 PPP 配置的串行线路速度可能会出现冲突。
检查是否已通过 /bin/login 等程序调用 PPP,并检查设置的线路速度。
在这种情况下,pppd 会将初始配置的线路速度更改为 /bin/login 中指定的速度。
检查用户是否已通过 mgetty 命令启动 PPP 并无意中指定了位速率。
该操作还会导致串行线路速度冲突。
按如下所示,修复串行线路速度冲突问题:
您可以使用 PPP 和标准的 UNIX 实用程序来确定 PPPoE 问题。如果您怀疑链路问题是由于 PPPoE 所致,请使用以下诊断工具获取疑难解答信息。
成为运行 PPPoE 通道的计算机(PPPoE 客户机或 PPPoE 访问服务器)的超级用户。
按照如何启用 PPP 调试功能过程中的说明,打开调试功能。
查看日志文件 /var/log/pppdebug 的内容。
以下示例显示了使用 PPPoE 通道生成的部分链路日志文件。
Sep 6 16:28:45 enyo pppd[100563]: [ID 702911 daemon.info] Plugin pppoe.so loaded. Sep 6 16:28:45 enyo pppd[100563]: [ID 860527 daemon.notice] pppd 2.4.0b1 (Sun Microsystems, Inc., Sep 5 2001 10:42:05) started by troot, uid 0 Sep 6 16:28:46 enyo pppd[100563]: [ID 702911 daemon.debug] connect option: '/usr/lib/inet/pppoec -v hme0' started (pid 100564) Sep 6 16:28:46 enyo pppd[100563]: [ID 702911 daemon.info] Serial connection established. Sep 6 16:28:46 enyo pppd[100563]: [ID 702911 daemon.info] Using interface sppp0 Sep 6 16:28:46 enyo pppd[100563]: [ID 702911 daemon.notice] Connect: sppp0 <--> /dev/sppptun Sep 6 16:28:46 enyo pppd[100563]: [ID 702911 daemon.debug] /etc/ppp/pap-secrets is apparently empty Sep 6 16:28:46 enyo pppd[100563]: [ID 702911 daemon.debug] /etc/ppp/chap-secrets is apparently empty Sep 6 16:28:46 enyo pppd[100563]: [ID 702911 daemon.debug] sent [LCP ConfReq id=0xef <mru 1492> asyncmap 0x0 <magic 0x77d3e953><pcomp><acomp> Sep 6 16:28:46 enyo pppd[100563]: [ID 702911 daemon.debug] rcvd [LCP ConfReq id=0x2a <mru 1402> asyncmap 0x0 <magic 0x9985f048><pcomp><acomp |
# pppd connect "/usr/lib/inet/pppoec -v interface-name" |
pppoec 将诊断信息发送到 stderr。如果您在前台运行 pppd,输出将显示在屏幕上。如果在后台运行 pppd,输出将发送到 /etc/ppp/connect-errors。
以下示例显示了协商 PPPoE 通道时生成的消息。
Connect option: '/usr/lib/inet/pppoec -v hme0' started (pid 100564) /usr/lib/inet/pppoec: PPPoE Event Open (1) in state Dead (0): action SendPADI (2) /usr/lib/inet/pppoec: Sending PADI to ff:ff:ff:ff:ff:ff: 18 bytes /usr/lib/inet/pppoec: PPPoE State change Dead (0) -> InitSent (1) /usr/lib/inet/pppoec: Received Active Discovery Offer from 8:0:20:cd:c1:2/hme0:pppoed /usr/lib/inet/pppoec: PPPoE Event rPADO+ (5) in state InitSent (1): action SendPADR+ (5) /usr/lib/inet/pppoec: Sending PADR to 8:0:20:cd:c1:2: 22 bytes /usr/lib/inet/pppoec: PPPoE State change InitSent (1) -> ReqSent (3) /usr/lib/inet/pppoec: Received Active Discovery Session-confirmation from 8:0:20:cd:c1:2/hme0:pppoed /usr/lib/inet/pppoec: PPPoE Event rPADS (7) in state ReqSent (3): action Open (7) /usr/lib/inet/pppoec: Connection open; session 0002 on hme0:pppoe /usr/lib/inet/pppoec: PPPoE State change ReqSent (3) -> Convers (4) /usr/lib/inet/pppoec: connected |
如果通过该诊断消息无法确定问题,请继续执行此过程。
有关 snoop 的信息,请参阅 snoop(1M) 手册页。
# snoop -o pppoe-trace-file |
# snoop -i pppoe-trace-file -v pppoe |
ETHER: ----- Ether Header ----- ETHER: ETHER: Packet 1 arrived at 6:35:2.77 ETHER: Packet size = 32 bytes ETHER: Destination = ff:ff:ff:ff:ff:ff, (broadcast) ETHER: Source = 8:0:20:78:f3:7c, Sun ETHER: Ethertype = 8863 (PPPoE Discovery) ETHER: PPPoE: ----- PPP Over Ethernet ----- PPPoE: PPPoE: Version = 1 PPPoE: Type = 1 PPPoE: Code = 9 (Active Discovery Initiation) PPPoE: Session Id = 0 PPPoE: Length = 12 bytes PPPoE: PPPoE: ----- Service-Name ----- PPPoE: Tag Type = 257 PPPoE: Tag Length = 0 bytes PPPoE: PPPoE: ----- Host-Uniq ----- PPPoE: Tag Type = 259 PPPoE: Tag Length = 4 bytes PPPoE: Data = Ox00000002 PPPoE: . . . ETHER: ----- Ether Header ----- ETHER: ETHER: Packet 5 arrived at 6:35:2.87 ETHER: Packet size = 60 bytes ETHER: Destination = 8:0:20:78:f3:7c, Sun) ETHER: Source = 0:2:fd:39:7f:7, ETHER: Ethertype = 8864 (PPPoE Session) ETHER: PPPoE: ----- PPP Over Ethernet ----- PPPoE: PPPoE: Version = 1 PPPoE: Type = 1 PPPoE: Code = 0 (PPPoE Session) PPPoE: Session Id = 24383 PPPoE: Length = 20 bytes PPPoE: PPP: ----- Point-to-Point Protocol ----- PPP: PPP-LCP: ----- Link Control Protocol ----- PPP-LCP: PPP-LCP: Code = 1 (Configure Request) PPP-LCP: Identifier = 80 PPP-LCP: Length = 18 |