Linux PPPoE 安全配置与故障诊断:NetworkManager 实用指南

PPPoE 是在以太网上承载 PPP 会话的协议,并不等同于 ADSL、光纤或“宽带”本身。今天多数家庭网络由 ONT 或路由器发起 PPPoE;只有运营商把设备置于桥接模式,并明确要求主机拨号时,Linux 才应直接建立 PPPoE 会话。相关术语可先参阅本站的宽带、ADSL 与 PPPoE 名词说明

本指南优先使用当前 NetworkManager 与发行版支持的工具。不要安装来源不明的旧 RPM,不要同时运行 NetworkManager、pppoeconf、手写 pppd 服务和路由器拨号,也不要盲目覆盖解析器或防火墙配置。

先确定 PPPoE 在哪里终止

当前拓扑 Linux 通常看到什么 正确动作
ONT 或路由器负责 PPPoE 以太网或 Wi-Fi 通过 DHCP 获得私网地址和默认网关 不在 Linux 再建 PPPoE;在获授权的路由器管理界面诊断 WAN
ONT 为桥接,Linux 直接连接 物理以太网没有普通上网地址,运营商要求该主机拨号 才考虑在该接口创建 PPPoE 配置
桥接后还有 VLAN 运营商要求特定 VLAN ID,PPPoE 位于 VLAN 接口上 先按运营商资料创建 VLAN,再把 PPPoE 绑定到该 VLAN;不要猜 ID
企业或公寓共享接入 可能已有网关、认证设备或并发限制 先问网络管理员;不要扫描接入集中器或抢占他人会话

先查看 ONT 或路由器的 WAN 状态。若它已经显示 PPPoE 已连接,Linux 再拨通常形成重复或并发会话,可能让原会话被踢下线。将 ONT 改为桥接还可能影响 IPTV、语音、VLAN 和远程维护;没有运营商或设备所有者批准时不要更改。

向运营商取得精确参数

在动配置前记录以下信息,并只保存在获批准的私密位置:

  • 账号的精确格式、密码重置渠道和并发会话上限。
  • PPPoE 应终止在路由器还是主机,以及物理端口。
  • 是否需要 VLAN ID、PPPoE service name 或指定 access concentrator。
  • IPv4 地址分配、默认路由、DNS,以及是否提供原生 IPv6、前缀委派或静态参数。
  • 运营商支持的 MTU 与 MRU;不要因为网上常见 1492 就强制设置。
  • 是否绑定设备、MAC、线路或旧会话,以及旧会话释放需要多久。

不要把真实账号、密码、合同号、MAC、公共地址或完整日志发到论坛、工单截图或 AI 对话中。本文示例账号使用 RFC 2606 保留的 .invalid 域,不代表真实用户。

保护远程访问并记录基线

如果当前 SSH、VPN、跳板或远程桌面经过将要修改的接口,先停止。应有本地控制台或独立管理链路、现有配置备份、已确认的回退负责人和维护窗口。不要依赖“连接应该会自动回来”。

以下命令只读取常规网络状态,但输出仍可能含主机名、接口、地址、路由和连接名;分享前逐项遮盖:

nmcli general status
nmcli device status
nmcli connection show --active
ip -brief link
ip -brief address
ip route show default
ip -6 route show default

确认实际以太网接口名,不能照抄旧文的 eth0。同时查明由谁管理接口:NetworkManager、systemd-networkd、Netplan、ifupdown 或其他平台服务。一个接口只交给一个配置系统。

先诊断,再更改

现象 优先核对 不应立即做的事
找不到接入集中器或超时 终止位置、线缆、ONT 桥接、父接口、VLAN、service name、链路状态 反复输密码、关闭防火墙或随机换软件包
认证失败 账号格式、账号状态、密码重置、线路或设备绑定、旧会话 把密码写进命令或把完整日志发出去
刚连接就断开 并发或双拨、线路事件、运营商会话释放、PPP 协商 同时启动多个 PPP 客户端
有地址但无默认路由 PPP 配置的默认路由、路由优先级、其他 WAN 配置 删除全部路由或覆盖所有网络配置
IP 可达但域名失败 NetworkManager 获得的 DNS、系统解析器、分流 DNS 下载旧 DNS 清单或直接覆盖 /etc/resolv.conf
小请求成功,大传输卡住 有效 MTU、路径 MTU 发现、ICMP 过滤、运营商支持 随意调 MSS 或把 MTU 设得更大
IPv4 正常,IPv6 异常 运营商是否提供 IPv6、IPV6CP、地址、前缀与默认路由 为了掩盖问题全局禁用 IPv6

如果认证连续失败,暂停重试并联系运营商,以免触发锁定。没有发现 PPPoE 接入集中器通常不是密码问题。

检查已有 NetworkManager 配置

不要使用会显示 secrets 的选项,也不要把完整配置直接贴到公开位置。以下示例只选择非密码字段;isp-pppoe 是示例连接名:

nmcli -f connection.id,connection.type,connection.interface-name,connection.autoconnect,pppoe.service,ppp.mtu,ipv4.method,ipv6.method connection show isp-pppoe

核对父接口、service name、自动连接、MTU、IPv4 与 IPv6 方法。用户名也属于个人或合同标识,公开记录中应遮盖。不要读取或导出 pppoe.password,也不要复制 NetworkManager 的系统连接文件。

有边界的本机配置路径

优先使用桌面网络设置或发行版提供的 NetworkManager 前端,让秘密交给桌面 secret agent 或获批准的秘密存储。下面的命令行路径只适用于:运营商确认主机直接拨号、无 VLAN、无需 service name、父接口确为 enp1s0,而且 NetworkManager 正在管理它。

先创建不自动连接的示例配置。保留的假账号会让误执行安全地认证失败;不要把真实密码追加在命令后:

nmcli connection add type pppoe ifname enp1s0 con-name isp-pppoe pppoe.username subscriber@example.invalid pppoe.password-flags 2 connection.autoconnect no
nmcli connection edit isp-pppoe
nmcli --ask connection up isp-pppoe

在交互式编辑器中用运营商给出的真实用户名替换假账号;不要保存或分享终端录屏。pppoe.password-flags 2 表示不保存密码,nmcli --ask 会在需要时交互询问。需要无人值守自动重连时,应使用发行版支持的 secret agent 或组织秘密管理方案,而不是在 shell 历史、脚本、环境变量或可读配置中放密码。

如果需要 VLAN 或 service name,先退出,不要用猜测值补上;依运营商与发行版的当前文档创建准确父接口或属性。若配置授权失败,使用发行版的 PolicyKit 或管理员流程,不要为了省事修改连接文件权限。

远程变更的回退保护

只有较新的 NetworkManager 版本提供 nmcli device checkpoint。先看本机帮助;若不列出 checkpoint,不要远程尝试。若列出,下面的受时限命令会在确认缺失时恢复检查点,但它不能替代独立管理链路或本地人员:

nmcli device help
nmcli device checkpoint --timeout 120 enp1s0 -- nmcli --ask connection up isp-pppoe

在同一远程会话里把当前上行断开后,确认提示可能永远到不了。最安全的做法仍是在本地控制台执行,或保持一条不经过该接口的管理路径。

逐层验收

启动后不要只看“已连接”。先识别实际 PPP 接口,再按层验证地址、路由、DNS、MTU 与 IPv6:

nmcli connection show --active
ip -brief address
ip route show default
ip -6 route show default
nmcli -f IP4.DNS,IP6.DNS device show ppp0
ip link show dev ppp0
getent ahosts example.com

ppp0 只是常见示例,必须替换为实际接口。验收至少包括:只有预期的一条 PPPoE 会话;IPv4 地址与默认路由来自正确连接;DNS 能通过系统正常解析;IPv6 的地址和默认路由与运营商承诺一致;防火墙仍启用;重启或重新连接行为符合策略;断开后旧上行可以恢复。

若要测试公网连通、路径 MTU 或延迟,只对自己或运营商明确授权的目标进行,并记录目标、时间和包大小。解析 example.com 只验证名称服务,不证明全部互联网路径正常。

MTU 与大包故障

RFC 2516描述传统 1500 字节以太网下 PPPoE 的 1492 字节上限;RFC 4638说明在整条路径支持时协商更大 MTU 或 MRU 的机制。两者都不是“永远手填 1492”或“越大越好”的理由。

先记录 ip link 显示的有效 MTU,再向运营商确认接入侧、VLAN、ONT、交换机和对端是否端到端支持。只有大数据包失败而小数据包成功时,才在隔离测试中做一个有记录的 MTU 变更;测试失败就恢复原值。不要用全局 MSS 改写掩盖未知路径问题。

DNS、IPv6 与防火墙

DNS 应由 NetworkManager 与系统解析器按发行版方式管理。若运营商下发错误 DNS,可在单个连接配置中使用组织批准的服务器,但先记录原值、分流 DNS 和隐私要求;不要下载旧 DNS 列表,也不要盲改 /etc/resolv.conf

IPv6 是否可用取决于运营商提供的 PPP 与前缀方案。分别检查地址、默认路由、DNS 和下游前缀委派;没有 IPv6 服务与 Linux 配置错误不是同一结论。不要全局关闭 IPv6作为通用修复。

PPPoE 接口通常直接面对运营商网络。保留主机防火墙和默认拒绝的入站策略;若主机是路由器,转发、NAT、IPv6 路由和下游防火墙必须作为单独的安全设计评审。旧向导要求选择“NONE”不能作为今天停用防火墙的依据。

日志与凭据安全

先使用发行版默认日志级别,不要为了排错直接开启可能泄露认证数据的 TRACE 或数据包捕获。以下读取可能包含用户名、地址、接入集中器和连接标识;只在受控终端查看,分享前最小化并遮盖:

journalctl -b -u NetworkManager --no-pager -n 200

不要截图密码提示,不要用带密码的位置参数,不要把 secret 写入 shell 历史、环境变量、剪贴板管理器、调试包或工单。密码疑似泄露时,通过运营商正式渠道重置,并清理获授权范围内的日志与秘密存储副本。

发行版差异

NetworkManager 的 nmcli 手册定义了交互询问与检查点行为,连接属性手册定义 pppoe.parentusernamepassword-flags 和通常留空的 service。不同发行版打包的 NetworkManager 版本可能更旧,所以必须先查本机 nmcli --version 与帮助。

Debian Reference 的网络章节提醒 NetworkManager 与传统 ifupdown 配置可能冲突;Red Hat Enterprise Linux 9 文档建议通过 nmcli 等支持的接口管理 keyfile,而不是手工编辑。若系统不用 NetworkManager,只使用该发行版当前支持的一套工具与文档;不要把 Red Hat、Ubuntu、BackTrack、Slax 和旧版 CentOS 步骤混在一起。

回退与停止条件

若新配置不工作,在本地控制台执行以下最小回退;若远程访问依赖该会话,不能远程执行:

nmcli connection modify isp-pppoe connection.autoconnect no
nmcli connection down isp-pppoe

随后恢复并验证此前记录的上行配置。不要急着删除新配置,以便核对差异;确认不再需要后再通过获授权的配置管理流程移除。

遇到以下情况立即停止:设备所有权或管理授权不清;当前远程连接没有备用路径;ONT 或路由器已经在拨号;缺少运营商精确参数;修改会影响语音、IPTV 或他人网络;日志疑似暴露秘密;线路或设备异常发热、破损;需要停用防火墙、下载陌生二进制包、覆盖全局网络配置或不断重试密码才能继续。

官方资料

2011 年原文存档

以下惰性纯文本围栏保留 source_export 的完整可见正文,仅做四处明确的安全替换:http://earn.yesmall.biz/?p=724 出现 1 次,替换为 [historical internal HTTP link redacted];失效且不安全的 DNS 下载 URL 出现 2 次,均替换为 [dead HTTP DNS download redacted];真实外观的历史订阅用户名出现 1 次,替换为 [historical subscriber username redacted]。原文没有实际密码值,密码提示文字保留;没有尾随空白需要规范化。存档不是当前操作指南,其中的旧 RPM、全选 Yes、关闭防火墙、BackTrack 和直接改配置做法不得照做。

点击阅读:[宽带、窄带,ADSL、pppoe,虚拟拨号等名词解释]([historical internal HTTP link redacted])

当初在虚拟机中第一次安装好了红帽,在百度上Google了N次,逛了无数的论坛、博客,看了无数的帖子、文章,在网上找了各种方法,怎么也找不到“宽带”连上网的方法。

后来用Ubuntu也是这样,ubuntu自带的客户端根本连不上网,想找个连上网的办法吧,结果我见到的回答全是牛头不对马嘴,真是让人气馁。

虽然Linux各种发行版的命令大体一样,但有一些还是不同的。

Table of Contents

Toggle

- [Red Hat Linux](https://blog.lazying.art/en/html/computer_internet/717/%e5%90%84%e7%a7%8dlinux%e5%8f%91%e8%a1%8c%e7%89%88%e4%b8%8b%e7%9a%84pppoe%e6%8b%a8%e5%8f%b7%e5%91%bd%e4%bb%a4%e6%94%b6%e9%9b%86%e6%95%b4%e7%90%86.html/#Red_Hat_Linux)
- [Ubuntu](https://blog.lazying.art/en/html/computer_internet/717/%e5%90%84%e7%a7%8dlinux%e5%8f%91%e8%a1%8c%e7%89%88%e4%b8%8b%e7%9a%84pppoe%e6%8b%a8%e5%8f%b7%e5%91%bd%e4%bb%a4%e6%94%b6%e9%9b%86%e6%95%b4%e7%90%86.html/#Ubuntu)
- [CentOS](https://blog.lazying.art/en/html/computer_internet/717/%e5%90%84%e7%a7%8dlinux%e5%8f%91%e8%a1%8c%e7%89%88%e4%b8%8b%e7%9a%84pppoe%e6%8b%a8%e5%8f%b7%e5%91%bd%e4%bb%a4%e6%94%b6%e9%9b%86%e6%95%b4%e7%90%86.html/#CentOS)
- [BackTrack Linux](https://blog.lazying.art/en/html/computer_internet/717/%e5%90%84%e7%a7%8dlinux%e5%8f%91%e8%a1%8c%e7%89%88%e4%b8%8b%e7%9a%84pppoe%e6%8b%a8%e5%8f%b7%e5%91%bd%e4%bb%a4%e6%94%b6%e9%9b%86%e6%95%b4%e7%90%86.html/#BackTrack_Linux)
- [Slax](https://blog.lazying.art/en/html/computer_internet/717/%e5%90%84%e7%a7%8dlinux%e5%8f%91%e8%a1%8c%e7%89%88%e4%b8%8b%e7%9a%84pppoe%e6%8b%a8%e5%8f%b7%e5%91%bd%e4%bb%a4%e6%94%b6%e9%9b%86%e6%95%b4%e7%90%86.html/#Slax)

## Red Hat Linux

Red Hat Linux下面使用的是ADSL:调制解调器命令
 作用:ADSL调制解调器命令用来配置宽带调制解调器工作。
 说明:ADSL命令包括一组命令。首先检查是否安装了PPPOE软件,并且版本号要高于3.5-1。如果版本低于这个版本号,先升级软件版本(最新版本rp-ppoe-3.5-3.i386.rpm)。升级命令如下:
 [root@sample ~]# rpm Uvh rp-ppp-3.5-3.i386.rpm

**友情提示:我认为升级并不是必要的,如果你确定要升级,先在其它电脑上下载最新PPPOE软件,放在“/Home/你的用户名/”下面(因为终端默认路径就是这个文件夹),再执行上面的命令即可**(注意命令的大小写、文件名为你的下载的文件的文件名)

系统产生如下四个命令。

- adsl-setup:配置DNS、用户账号、密码、其他选项。
- adsl-start:使用ADSL连接互联网命令。
- adsl-stop:断开ADSL和互联网连接命令。
- adsl-status:检测ADSL连接状态命令。

[root@sample ~]# adsl-setup ← 建立ADSL连接

Welcome to the ADSL client setup. First, I will run some checks on
 your system to make sure the PPPoE client is installed properly…

LOGIN NAME

Enter your Login Name (default root): ← 填入ADSL连接的用户名

INTERFACE

Enter the Ethernet interface connected to the ADSL modem
 For Solaris, this is likely to be something like /dev/hme0.
 For Linux, it will be ethX, where ‘X’ is a number.
(default eth0): ← 指定网络接入设备,一块网卡的情况下,一般为默认eth0

Do you want the link to come up on demand, or stay up continuously?
 If you want it to come up on demand, enter the idle time in seconds
 after which the link should be dropped. If you want the link to
 stay up permanently, enter ‘no’ (two letters, lower-case.)
 NOTE: Demand-activated links do not interact well with dynamic IP
 addresses. You may have some problems with demand-activated links.
Enter the demand value (default no): ← 直接按回车,接受默认设置

DNS

Please enter the IP address of your ISP’s primary DNS server.
 If your ISP claims that ‘the server will provide dynamic DNS addresses’,
 enter ‘server’ (all lower-case) here.
 If you just press enter, I will assume you know what you are
 doing and not modify your DNS setup.
Enter the DNS information here: ← 如果知道DNS服务器的信息在此填入。不知道的情况按回车跳过(《全国DNS服务器IP地址》下载地址:[[dead HTTP DNS download redacted]]([dead HTTP DNS download redacted]))

PASSWORD

Please enter your Password: ← 输入ADSL的连接密码
 Please re-enter your Password: ← 再次确认输入ADSL的连接密码

USERCTRL

Please enter ‘yes’ (two letters, lower-case.) if you want to allow
normal user to start or stop DSL connection (default yes): no ← 填入no,不允许一般用户控制PPPoE的连接

FIREWALLING

Please choose the firewall rules to use. Note that these rules are
 very basic. You are strongly encouraged to use a more sophisticated
 firewall setup; however, these will provide basic security. If you
 are running any servers on your machine, you must choose ‘NONE’ and
 set up firewalling yourself. Otherwise, the firewall rules will deny
 access to all standard servers like Web, e-mail, ftp, etc. If you
 are using SSH, the rules will block outgoing SSH connections which
 allocate a privileged source port.

The firewall choices are:
 0 – NONE: This script will not set any firewall rules. You are responsible
 for ensuring the security of your machine. You are STRONGLY
 recommended to use some kind of firewall rules.
 1 – STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
 2 – MASQUERADE: Appropriate for a machine acting as an Internet gateway
 for a LAN
Choose a type of firewall (0-2): 0 ← 输入0,不在这里使用防火墙

Start this connection at boot time

Do you want to start this connection at boot time?
Please enter no or yes (default no): yes ← 填入yes,在系统启动时自动连接ADSL

** Summary of what you entered **

Ethernet Interface: eth0
 User name: [historical subscriber username redacted]
 Activate-on-demand: No
 DNS: Do not adjust
 Firewalling: NONE
 User Control: no
Accept these settings and adjust configuration files (y/n)? y ← 配置信息确认无误后,键入y同意设置
 Adjusting /etc/sysconfig/network-scripts/ifcfg-ppp0
 Adjusting /etc/ppp/chap-secrets and /etc/ppp/pap-secrets
 (But first backing it up to /etc/ppp/chap-secrets.bak)
 (But first backing it up to /etc/ppp/pap-secrets.bak)

…………

…………

Congratulations, it should be all set up!

Type ‘/sbin/ifup ppp0’ to bring up your xDSL link and ‘/sbin/ifdown ppp0’
 to bring it down.
 Type ‘/sbin/adsl-status /etc/sysconfig/network-scripts/ifcfg-ppp0’
 to see the link status.
[root@sample ~]# adsl-start ← 启动ADSL连接

[root@sample ~]# ← 稍等片刻后若启动成功后出现提示符(无任何提示即意味着连接成功)

## Ubuntu

1、打开应用程序菜单,依次选择“附件”->“终端”。
 2、在弹出终端窗口后
[root@sample ~]# sudo pppoeconf <- 输入完成后回车
 3、然后会提示用户输入当前Ubuntu管理员用户的密码,输入完成后回车。询问网络设备,一般选择“是”,进行检测,然后选择“是”。
 4、之后会提示输入用户的ADSL用户名(也就是账号)和密码,在输入账号时把原来的user删掉,其他的除密码之外的问题全部回答“是”(Yes)就可以了。
 5、最后会提示用户是否开机自动拨号,选择“是”(Y)的话,默认开机会没有任何提示的情况下拨号,直接可以上网。如果选择“否”(N)的话,需要拨号时手工进入终端输入
[root@sample ~]# sudo pon dsl-provider <- 输入完成后回车
 6、经常使用的命令。
 pon:启用adsl链接。
 poff:结束adsl连接。
 plog:查看adsl的提示信息,作为调试用。
 ifconfig ppp0:查看是否有ppp0接口。
 route -n:查看默认网关是否正确。
 nslookup:查看DNS是否能够正确解析。
 这些命令可以帮助大家解决ADSL上网遇到的问题,也可以用来调试ADSL。

## CentOS

同Red Hat Linux

## BackTrack Linux

同Red Hat Linux

## Slax

同Red Hat Linux

Leave a Reply