本文记录了 EdgeRouter X 下 PPPoE IPv6 配置的完整踩坑与成功流程,适用于国内运营商(电信/联通等)仅分配
/64前缀的场景,可直接复制到博客发布。
🔍 需求与背景
- 设备:Ubiquiti EdgeRouter X(ER-X)
- 上网方式:PPPoE 拨号
- 运营商 :国内 ISP(仅分配
/64IPv6 前缀) - 目标:让路由器及内网设备均获取公网 IPv6 地址,实现 IPv6 网络连通
🧠 核心配置思路
EdgeRouter IPv6 配置分为 3 个核心环节:
- WAN 侧 PPPoE IPv6 拨号:从运营商获取公网 IPv6 地址
- PD(Prefix Delegation)前缀委托:将运营商分配的前缀切分后下发到 LAN 口
- RA(Router Advertisement)路由通告:向子网广播前缀,让设备自动生成 IPv6 地址
🚀 完整配置流程
1. 进入配置模式
bash
configure
2. 配置 PPPoE IPv6 与 PD 前缀委托
bash
# 启用 PPPoE 接口 IPv6
set interfaces ethernet eth0 pppoe 0 ipv6 enable
# 自动获取 PPPoE IPv6 地址
set interfaces ethernet eth0 pppoe 0 ipv6 address autoconf
# 启用快速前缀获取(加速 PD 协商)
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd rapid-commit enable
# ✅ 关键:匹配运营商实际前缀长度(国内通常为 /64,不要用默认 /56!)
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 prefix-length /64
# 将前缀分配给 LAN 口 switch0,使用 SLAAC 模式
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 prefix-id 0
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 service slaac
# 设置 LAN 口网关地址为 ::1
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 host-address ::1
3. 配置 LAN 口 IPv6 与 RA 广播
bash
# LAN 口自动从 PD 前缀生成公网地址
set interfaces switch switch0 ipv6 address autoconf
# 启用重复地址检测(避免地址冲突)
set interfaces switch switch0 ipv6 dup-addr-detect-transmits 1
# 开启 RA 广播(向子网发布前缀)
set interfaces switch switch0 ipv6 router-advert send-advert true
# ✅ SLAAC 模式:设备自动生成地址,无需 DHCPv6 服务器
set interfaces switch switch0 ipv6 router-advert managed-flag false
set interfaces switch switch0 ipv6 router-advert other-config-flag false
# 发布 /64 子网前缀
set interfaces switch switch0 ipv6 router-advert prefix ::/64
4. 配置 IPv6 防火墙(放行必要流量)
bash
# 定义 WAN 侧入站 IPv6 规则(默认拒绝,放行已建立连接)
set firewall ipv6-name WANv6_IN default action drop
set firewall ipv6-name WANv6_IN rule 10 action accept
set firewall ipv6-name WANv6_IN rule 10 state established enable
set firewall ipv6-name WANv6_IN rule 10 state related enable
# 定义 WAN 侧本地 IPv6 规则(放行 ICMPv6,保证 RA/邻居发现正常)
set firewall ipv6-name WANv6_LOCAL default action drop
set firewall ipv6-name WANv6_LOCAL rule 10 action accept
set firewall ipv6-name WANv6_LOCAL rule 10 state established enable
set firewall ipv6-name WANv6_LOCAL rule 10 state related enable
set firewall ipv6-name WANv6_LOCAL rule 20 action accept
set firewall ipv6-name WANv6_LOCAL rule 20 protocol icmpv6
# 将防火墙规则绑定到 PPPoE 接口
set interfaces ethernet eth0 pppoe 0 firewall in ipv6-name WANv6_IN
set interfaces ethernet eth0 pppoe 0 firewall local ipv6-name WANv6_LOCAL
5. 保存配置并生效
bash
# 提交配置(系统自动重启相关服务)
commit
# 保存到启动配置(重启后不丢失)
save
# 退出配置模式
exit
✅ 验证配置是否生效
1. 验证路由器 WAN 侧 IPv6
bash
ip -6 addr show pppoe0
✅ 成功标志 :输出中出现 2408:xxxx:xxxx:xxxx::xxxx/64 开头的 global 地址(公网 IPv6)
2. 验证路由器 LAN 侧 IPv6
bash
ip -6 addr show switch0
✅ 成功标志 :输出中出现 2408:xxxx:xxxx:xxxx::1/64 开头的 global 地址(内网网关)
3. 验证内网设备获取 IPv6
在 Linux 设备上执行:
bash
# 释放现有 IPv6 地址
sudo dhclient -6 -r
# 重新获取 IPv6 地址
sudo dhclient -6
# 查看设备 IPv6 地址
ip -6 addr show wlp1s0
✅ 成功标志 :设备出现 2408:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 开头的公网 IPv6 地址
4. 测试 IPv6 连通性
bash
ping6 -c 4 ipv6.baidu.com
✅ 成功标志:能正常收到 ICMP 响应,说明 IPv6 网络通畅
⚠️ 踩坑总结(关键避坑点)
坑 1:前缀长度不匹配
- 问题 :默认配置请求
/56前缀,但国内运营商实际只给/64,导致 PD 申请失败,LAN 口无公网地址 - 解决 :强制将
prefix-length改为/64,完全匹配运营商实际分配
坑 2:在配置模式下执行系统命令
- 问题 :
sudo /etc/init.d/dhcp6c restart只能在 shell 下执行,configure模式下会报错 - 解决 :修改配置后执行
commit,系统会自动重启相关服务,无需手动操作
坑 3:RA 标志位错误
- 问题 :
managed-flag或other-config-flag设为true,导致设备尝试 DHCPv6 而非 SLAAC,无法自动生成地址 - 解决 :保持
managed-flag false+other-config-flag false,使用标准 SLAAC 模式
🎯 最终效果
- 路由器:WAN 口和 LAN 口均获取公网 IPv6 地址
- 内网设备:自动生成公网 IPv6 地址,无需额外配置
- 网络连通性 :IPv6 访问正常,可访问 IPv6 网站(如
ipv6.baidu.com)
📝 附录:完整配置导出
可在 configure 模式下执行以下命令,导出当前配置核对:
bash
show interfaces ethernet eth0 pppoe 0
show interfaces switch switch0
show firewall ipv6-name WANv6_IN
show firewall ipv6-name WANv6_LOCAL
💡 总结
EdgeRouter IPv6 配置的核心是 匹配运营商前缀长度 + 正确配置 RA 标志位。只要这两点做好,内网设备就能自动获取公网 IPv6,实现"开箱即用"的 IPv6 体验。