在Ubuntu上配置PPPoE服务:从安装到自动化启动的全指南

[复制链接]
发表于 2026-10-4 17:19:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

PPPoE(Point-to-Point Protocol over Ethernet)最早是为 ADSL 宽带设计的拨号协议,如今在一些内网、校园网、虚拟化环境和分支出口里仍然能见到。把 PPPoE 服务端跑在 Ubuntu 上,可以给下游机器做一套独立的账号认证 + 地址分配 + 计费统计底座。这篇把从装包、改配置、开转发,到开机自启的完整路径捋一遍,顺便给出 pppoeconf 这条更省事的替代路线。

一、装包并确认版本

sudo apt-get update
sudo apt-get install pppoe pppoe-server
pppoe-server -h

pppoe-server 是服务端,pppd 是背后的拨号守护进程,两者通常一起装。装完执行 pppoe-server -h 能打出用法说明,说明二进制就位了。

二、改三个配置文件

1. /etc/ppp/options:全局拨号参数

sudo nano /etc/ppp/options

里头关键几处:

  • 找到 #ms-dns 开头那行,去掉井号,填运营商或者你自己的 DNS,例如 ms-dns 114.114.114.114;
  • 确认认证方式只留一种:+chap 前面没有井号、-chap 被注释掉,反过来就是 PAP;
  • 本例用 CHAP,所以保持 +chap 生效、+pap 注释。

PAP 是明文三次握手,CHAP 是挑战响应式,安全性上 CHAP 明显更好,能避免密码在网络上裸奔,这也是多数运营商服务端的选择。

2. /etc/ppp/chap-secrets:账号密码表

sudo nano /etc/ppp/chap-secrets

这文件每行一个账号,格式是四段:用户名、服务器别名、密码、分配的 IP。

# 格式: 用户名    服务器别名    密码          客户端IP
client01     *     "client01pass"    *
client02     *     "client02pass"    *

第二段的 * 表示任意服务端别名,第四段 * 表示由服务端动态分配地址,都可以按需改成固定值。账号名和密码请换成你自己的,别直接用示例值。

3. /etc/ppp/pppoe-server-options:服务端选项

文件不存在就新建一个:

sudo nano /etc/ppp/pppoe-server-options
auth
require-chap
logfile /var/log/pppd.log

这样服务端强制走 CHAP 认证,并把 pppd 的运行日志日志落到 /var/log/pppd.log,后面排查认证失败时这个日志日志比什么都管用。

三、开 IP 转发和地址伪装

PPPoE 拨上来的客户端要出外网,内核必须开转发,出口还要做 SNAT。

sudo nano /etc/sysctl.conf   # 取消 net.ipv4.ip_forward=1 的注释
sudo sysctl -p
sudo iptables -t nat -A POSTROUTING -s 192.168.156.0/24 -j MASQUERADE

192.168.156.0/24 要换成你给客户端分配的地址段。Centos 系的 firewalld 环境里也可以写成 firewall-cmd --permanent --add-masquerade,效果一致。

四、启动服务端,参数逐个看

sudo pppoe-server -I ens33 -L 192.168.156.117 -R 192.168.156.118 -N 10

四个常用参数:

  • -I:监听的网卡名;
  • -L:服务端自身(网关)的 IP;
  • -R:客户端下发的起始地址,实际是按 -N 往后分配;
  • -N:最多允许多少个客户端同时拨入。

注意 -R 只定起点,比如 -R 192.168.156.118 -N 10,客户端拿到的就是 .118 到 .127 这一段。生产上建议配在 systemd 单元里,而不是手工敲命令行。

五、开机自启:rc-local 这一套

sudo chmod 777 /lib/systemd/system/rc-local.service
sudo nano /lib/systemd/system/rc-local.service

文件末尾补上安装段:

[Install]
WantedBy=multi-user.target
Alias=rc-local.service

再建 /etc/rc.local(一般默认就有),脚本里用绝对路径,否则开机时 PATH 不完整容易静默失败:

sudo nano /etc/rc.local
#!/bin/bash
/usr/sbin/pppoe-server -I ens33 -L 192.168.156.117 -R 192.168.156.118 -N 10
/sbin/iptables -t nat -A POSTROUTING -s 192.168.156.0/24 -j MASQUERADE
exit 0
sudo chmod +x /etc/rc.local
sudo ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/

改完 sudo systemctl daemon-reload 再 sudo systemctl enable rc-local。用内网穿透或者 systemd 的话,更推荐直接写一个 pppoe-server.service,Restart=always 比 rc.local 好维护。

六、停掉服务怎么操作

ps aux | grep pppoe-server
sudo kill <ID>          # 停单个
sudo killall pppoe-server  # 全停

有客户端正连着就先 sudo poff 通知对端断开,再杀进程,避免对端一直重拨。

七、另一条路:pppoeconf 客户端拨号

如果是要拿 Ubuntu 去拨运营商的号,那就用 pppoeconf 交互式配置:

sudo apt-get install pppoeconf
sudo pppoeconf

按提示填 ISP 给的用户名密码,一路完成后会生成 /etc/ppp/peers/dsl-provider。之后:

sudo pon dsl-provider     # 拨号
ifconfig ppp0             # 或 ip addr show ppp0
sudo poff dsl-provider    # 断线

能看到 ppp0 拿到 IP 就算通了。想开机自动拨,把 pon dsl-provider 写进 /etc/rc.local 或者启用 network-manager 里的 DSL 条目。

八、排障顺序

  • 先 tail -f /var/log/pppd.log 看认证是不是被拒;
  • 再 ip addr 看服务端有没有多出 ppp0 接口;
  • 客户端拨号卡住不动,多半是 -I 网卡名写错,或者交换机没开 monst 广播;
  • 能拨上但上不了网,去查 ip_forward 和 POSTROUTING 那条 MASQUERADE 规则。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表