ADSL拨号服务器没有响应,简单来讲就是你的拨号请求发送出去之后,对面负责接入的BRAS或者PPPoE服务器没有给到任何回应。有可能是数据包根本没有送达服务器,也有可能是服务器收到请求但拒绝处理,还有一种情况是传输途中数据包丢失。碰到这类故障不用着急,按照下面的步骤依次排查,大部分问题都可以自行定位。
先从硬件指示灯入手排查底层链路状态。ADSL Modem上的指示灯可以直观反映线路情况,Power电源灯需要保持常亮,不亮的话优先检查电源适配器和插座。ADSL Link,也就是标注DSL或者Sync的指示灯,如果持续快速闪烁,代表线路正在和运营商局端设备协商同步,这种状态下拨号肯定失败,物理链路还没有建立完成。只有这个灯稳定常亮绿灯,才代表Modem和局端DSLAM设备完成同步,具备基础的数据传输条件。如果该灯一直不亮或者持续闪烁,故障基本出在电话线、分离器或者运营商局端端口,和服务器本身的配置没有太大关系。

物理线路还有几个容易忽略的细节。ADSL电话线必须接入Modem上标记Line或者DSL的接口,不能插到Phone口,两个接口外观相近,但功能完全不一样。分离器不要省略,电话机和Modem需要分别接在分离器对应的接口,不然通话的时候ADSL信号会受到干扰。网线方面,Modem的LAN口连接服务器网卡的这条线,确认水晶头有没有插紧,网卡指示灯是否正常点亮。这类看似简单的点位,实际排查时出现故障的概率并不低。
确认物理链路正常之后,接下来查看拨号日志,定位故障卡在哪个阶段。PPPoE拨号分为发现阶段和会话阶段。发现阶段是客户端发送PADI数据包寻找服务器,服务器返回PADO报文,就代表接入服务器正常运行。如果日志提示在wan接口等待PADO报文超时,或者无法完成PPPoE发现流程,基本可以判定服务器没有返回任何响应。这条信息很关键,可以把故障和账号认证失败区分开,直接锁定问题发生在PPPoE发现阶段。
日志确认是PADO超时,故障来源分为几种情况。第一,服务器PPPoE客户端配置出错,选错网卡接口,或是填写的服务名是运营商不识别的内容。第二,防火墙或者安全软件拦截了PPPoE以太网帧,PPPoE发现阶段使用以太类型0x8863,会话阶段是0x8864,可以临时关闭服务器防火墙测试,或是检查iptables规则有没有丢弃这两类数据包。第三,运营商侧BRAS设备故障,比如端口未启用、VLAN ID配置错误。部分地区电信、联通在光猫桥接模式下,服务器或者路由器拨号必须填写对应的VLAN ID,填写错误会导致服务器完全不识别请求,表现就是无响应。
想要进一步区分是本地发包失败,还是服务器没有返回报文,可以使用pppoe-discovery工具测试。在Linux服务器上,先把连接Modem的网卡启用,不配置IP地址,执行 pppoe-discovery -I eth0,命令会发送PADI探测包,如果存在可用PPPoE接入设备并返回PADO,就会打印出设备名称。这个命令跳过了pppd复杂配置,只单独验证PPPoE发现阶段连通性。如果pppoe-discovery可以收到PADO,但pppd拨号依旧失败,故障大概率在pppd配置文件或者账号认证环节。如果pppoe-discovery同样收不到回复,问题就在线路或者Modem,和服务器拨号软件无关。
再深入排查,可以在服务器上用tcpdump抓包,查看收发数据包情况。示例命令 tcpdump -i eth0 -nn ether proto 0x8863,只抓取PPPoE发现阶段数据包。可以观察PADI包是否成功发出,如果包发送出去但没有收到PADO,故障在Modem往上的链路或者运营商接入服务器。如果连PADI数据包都无法发出,就是本地PPPoE客户端或者网卡驱动的问题。抓包操作看着有技术门槛,但远比盲目试错高效,减少无效排查。
服务器系统层面也存在不少容易踩坑的地方。部分服务器手动给物理网卡配置了默认网关,拨号成功之后ppp0接口会生成新的默认路由,两者发生冲突,现象就是拨号显示成功,但流量无法从ppp0转发出去。拨号前要保证物理网卡没有配置默认网关。还可以开启pppd调试日志,在/etc/ppp/options添加debug配置,或者向pppd进程发送SIGUSR1信号,查看LCP、PAP、CHAP控制报文收发记录。日志里如果LCP Configure-Request报文发出后,一直收不到对面的Configure-Ack,说明接入服务器在链路层拒绝建立连接。
还有一类比较麻烦的场景,PPPoE服务器本身运行正常,但是对账号或者接入IP做了限制。部分运营商BRAS设备对单个账号的并发拨号数量存在硬性限制,反复重拨之后,服务器判定账号已经在线,直接丢弃PADI数据包。最简单的处理方式,把Modem和服务器全部断电,等待五分钟以上,等待运营商侧旧会话超时释放,之后重新上电拨号。如果自己维护PPPoE服务端,部分软路由会出现部分用户接入无响应,重启服务即可恢复的情况,可以在后台重启PPPoE服务,清空重建全部会话。
如果完成上面所有排查,pppoe-discovery无法获取PADO,更换电脑直连Modem拨号依旧失败,基本可以判定是运营商侧故障。联系客服之前,提前准备好抓包结果、pppoe-discovery输出信息、Modem的DSL灯状态,直接告知对方Modem与DSLAM同步正常,但PPPoE发现阶段接收不到PADO响应,比笼统描述无法上网更容易让运维定位故障。运营商核查端口状态和BRAS日志,一般可以快速定位问题。