核心方案:配置OpenWRT_B通过DHCPv6-PD获取子前缀
第一步:配置OpenWRT_B的WAN口(连接OpenWRT_A)
进入OpenWRT_B管理界面 → 网络 → 接口
- 编辑WAN接口(物理接口对应连接OpenWRT_A的网口)
- 协议:选择 “DHCPv6客户端” (如果原来是静态或禁用)
- 切换到"高级设置"标签页:
- “请求IPv6前缀” :勾选 ✓
- “请求的IPv6前缀长度” :选择 “自动” 或手动填写
60
- 切换到"物理设置"标签页:确认接口绑定正确(如eth0.2或lan口)
- 保存
第二步:配置OpenWRT_B的LAN口(连接你的电脑)
仍在网络 → 接口 → 编辑LAN接口
切换到"常规设置"标签页:
- IPv6分配长度:选择
64(关键!)
- IPv6分配长度:选择
切换到"IPv6设置"标签页:
- “IPv6 assignment hint” :填写一个子网ID(如
1或2,避免与OpenWRT_A的LAN冲突) - “IPv6后缀” :可留空或设置为
::1 - RA服务:选择 “服务器模式”
- DHCPv6服务:选择 “服务器模式”
- NDP代理:选择 “已禁用”
- RA管理:选择 “已启用”
- Always announce default router:勾选 ✓
- “IPv6 assignment hint” :填写一个子网ID(如
保存并应用
第三步:检查DHCPv6服务器配置
进入 服务 → DHCP/DNS
- 切换到"高级设置"标签页:
- 确保 “禁止解析IPv6 DNS记录” 未勾选
- 切换到"IPv6 RA设置"标签页:
- RA Flags:勾选
managed和other
- RA Flags:勾选
- 保存并应用
第四步:调整防火墙(关键)
进入 网络 → 防火墙
编辑"wan"区域:
- 转发:选择 “接受” 或确保有规则允许转发到lan区域
- 涵盖的网络:确认包含
wan和wan6
编辑"lan"区域:
- 转发:选择 “接受”
- 涵盖的网络:确认包含
lan
保存并应用
验证与排错
在OpenWRT_B上执行以下命令:
# 检查是否成功获取PD
ifstatus wan6
# 查看LAN口IPv6地址
ifconfig br-lan | grep inet6
# 查看路由表
ip -6 route
# 查看DHCPv6服务器状态
logread | grep dhcp6
成功标志:
ifstatus wan6应显示获取的IPv6-PD(如240e:39c:2bae:7001::/60)- LAN口应有公网IPv6地址(如
240e:39c:2bae:7001::1/64) - 路由表中有
240e:39c:2bae:7000::/56的默认路由指向pppoe-wan
在电脑上验证:
# Windows
ipconfig /all | findstr IPv6
# Linux/macOS
ifconfig | grep inet6
# 测试连通性
ping -6 ipv6.google.com
常见问题与解决
| 问题 | 原因 | 解决方案 |
|---|---|---|
| OpenWRT_B获取不到PD | OpenWRT_A未正确分配PD前缀 | 在OpenWRT_A的WAN6接口高级设置中,将"IPv6前缀长度"改为60或56 |
| 电脑获取不到地址 | RA/DHCPv6服务未启用或防火墙阻拦 | 检查LAN口的IPv6设置为"服务器模式",并确认防火墙允许转发 |
| 能获取地址但无法上网 | 缺少默认路由或DNS | 确保RA设置中"Always announce default router"已勾选,并检查DNS配置 |
| IPv6地址冲突 | 子网ID与OpenWRT_A冲突 | 修改OpenWRT_B LAN的"IPv6 assignment hint"为其他值(1,2,3…) |
推荐配置总结
OpenWRT_A(确保):
- WAN6接口 → 高级设置 → IPv6前缀长度:
60或56 - DHCP/DNS → 高级设置 → 勾选"动态DHCP"和"RA"
OpenWRT_B(关键):
- WAN接口:DHCPv6客户端 + 请求IPv6前缀
- LAN接口:IPv6分配长度64 + RA/DHCPv6服务器模式
- 防火墙:允许wan到lan的IPv6转发
配置完成后,重启OpenWRT_B的WAN接口或整个路由器,等待1-2分钟让DHCPv6完成前缀协商,你的电脑应该就能获取到公网IPv6地址了。