马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
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企服评测-应用市场 编辑提示 |