Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux ADSL PPPoE 撥號故障系統性排查指南

編輯:Linux 教學

前言

Linux 環境下 ADSL PPPoE 撥號失敗,常見於伺服器、嵌入式裝置、無圖形介面系統。本文建立標準化排查流程,從軟體版本、介面綁定、網路參數、防火牆四個維度逐層定位。

第一層:PPPoE 客戶端版本與基礎服務

# 檢查版本 (需 >= 3.10,現代發行版通常 3.14+)
pppd --version
pppoe --version

# 更新 (RHEL/Fedora)
dnf update rp-pppoe ppp
# Debian/Ubuntu
apt update && apt install ppp pppoeconf

# 確認服務狀態
systemctl status pppd-dns
systemctl status NetworkManager  # 若由 NM 管理

第二層:實體介面與 PPPoE 邏輯介面綁定

1. 確認乙太網介面狀態

ip link show dev eth0
# 輸出應含 UP,LOWER_UP, state UP
# 無 carrier 表示實體連線異常 (換線、換埠、檢查 MODEM 橋接模式)

2. 手動啟動 PPPoE 連線 (除錯模式)

# 停用 NetworkManager 管理該介面
nmcli dev set eth0 managed no

# 直接撥號測試 (前景模式,看完整日誌)
pppoe-start
# 或手動
pppd plugin rp-pppoe.so eth0 user "username" password "password" \
    defaultroute replacedefaultroute persist maxfail 0 \
    lcp-echo-interval 30 lcp-echo-failure 4 \
    nodetach debug logfd 2

# 成功會建立 ppp0 介面
ip addr show dev ppp0

3. 系統化配置檔案

RHEL/Fedora (legacy network-scripts):

# /etc/sysconfig/network-scripts/ifcfg-ppp0
DEVICE=ppp0
TYPE=xDSL
ONBOOT=yes
USERCTL=no
BOOTPROTO=dialup
PEERDNS=yes
ETH=eth0
USER="username"
PAPNAME="username"
PASSWORD="password"
DEMAND=no
DEFROUTE=yes

Debian/Ubuntu (/etc/ppp/peers/provider):

plugin rp-pppoe.so
eth0
user "username"
password "password"
defaultroute
replacedefaultroute
persist
maxfail 0
lcp-echo-interval 30
lcp-echo-failure 4
noipdefault
usepeerdns
nodetach

NetworkManager (現代桌面/伺服器):

nmcli con add type pppoe con-name "ADSL" ifname eth0 \
    username "username" password "password" \
    pppd-options "persist,lcp-echo-interval=30,lcp-echo-failure=4"
nmcli con up "ADSL"

第三層:IP 位址、路由、DNS 驗證

# 1. 確認 PPP 介面取得 IP
ip addr show ppp0
# 應有 inet xxx.xxx.xxx.xxx peer yyy.yyy.yyy.yyy/32

# 2. 確認預設路由指向 ppp0
ip route show default
# default dev ppp0 scope link

# 3. 測試連通性
ping -c 3 8.8.8.8           # 直接 IP 通 => L3 正常
ping -c 3 google.com        # 域名通 => DNS 正常

# 4. DNS 故障排查
cat /etc/resolv.conf        # 應含 nameserver 來自 PPPoE 協商
# 若為空或錯誤
# NetworkManager: 自動管理,勿手動編輯
# systemd-resolved: systemctl restart systemd-resolved
# 傳統: 確認 /etc/ppp/ip-up.d/ 含 dns 更新腳本

第四層:防火牆與 NAT 穿透

# firewalld (RHEL/Fedora/CentOS)
firewall-cmd --get-active-zones
firewall-cmd --zone=external --add-interface=ppp0 --permanent
firewall-cmd --zone=external --add-service=ssh --permanent
firewall-cmd --reload

# iptables 直接規則 (若不使用 firewalld)
iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --dport 22 -j ACCEPT  # SSH
iptables -A INPUT -i ppp0 -j DROP

# NAT (若此機為閘道)
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

第五層:特殊場景處理

1. 計費/限時撥號 (需手動控制)

# 移除預設路由 (避免非撥號流量觸發計費)
ip route del default dev ppp0
# 需要時手動加回
ip route add default dev ppp0

2. 多 WAN / 負載平衡

使用 iproute2 策略路由 + mwan3 (OpenWrt) 或 systemd-networkd 多路徑配置。

3. IPv6 (DHCPv6-PD / SLAAC)

# /etc/ppp/ipv6-up
ip -6 route add ::/0 dev $1
# 確認 /etc/ppp/options.ipv6
+ipv6 ipv6cp-use-ipaddr

常見錯誤代碼速查

代碼/訊息原因對策
LCP: timeout sending Config-Requests實體層不通 / MODEM 未橋接 / VLAN ID 錯誤檢查線路、MODEM 設定、eth0.100 VLAN 子介面
PAP/CHAP authentication failed帳號密碼錯誤、ISP 改用 CHAP確認帳號、嘗試 refuse-pap 或 require-chap
Peer refused to authenticate我方要求對方認證但對方拒絕加 noauth 選項
Could not determine remote IPIPCP 協商失敗加 noipdefault、確認 defaultroute
Script /etc/ppp/ip-up failed撥號後腳本錯誤 (常為 DNS 更新)檢查腳本權限與語法、暫停腳本測試

自動化監控與重撥

# systemd 服務單元 (自動重啟)
# /etc/systemd/system/pppoe@.service
[Unit]
Description=PPPoE on %I
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/pppd plugin rp-pppoe.so %I user "username" password "password" persist maxfail 0 nodetach
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target

# 啟用
systemctl enable --now pppoe@eth0

核心原則:實體層先行、協商日誌為證、路由 DNS 分層驗證、防火牆區域劃分、systemd 托管自愈。

Copyright © Windows教程網 All Rights Reserved