核心方案:配置OpenWRT_B通过DHCPv6-PD获取子前缀

第一步:配置OpenWRT_B的WAN口(连接OpenWRT_A)

进入OpenWRT_B管理界面 → 网络接口

  1. 编辑WAN接口(物理接口对应连接OpenWRT_A的网口)
  2. 协议:选择 “DHCPv6客户端” (如果原来是静态或禁用)
  3. 切换到"高级设置"标签页
    • “请求IPv6前缀” :勾选 ✓
    • “请求的IPv6前缀长度” :选择 “自动” 或手动填写 60
  4. 切换到"物理设置"标签页:确认接口绑定正确(如eth0.2或lan口)
  5. 保存

第二步:配置OpenWRT_B的LAN口(连接你的电脑)

仍在网络接口编辑LAN接口

  1. 切换到"常规设置"标签页

    • IPv6分配长度:选择 64 (关键!)
  2. 切换到"IPv6设置"标签页

    • “IPv6 assignment hint” :填写一个子网ID(如 12,避免与OpenWRT_A的LAN冲突)
    • “IPv6后缀” :可留空或设置为 ::1
    • RA服务:选择 “服务器模式”
    • DHCPv6服务:选择 “服务器模式”
    • NDP代理:选择 “已禁用”
    • RA管理:选择 “已启用”
    • Always announce default router:勾选 ✓
  3. 保存并应用

第三步:检查DHCPv6服务器配置

进入 服务DHCP/DNS

  1. 切换到"高级设置"标签页
    • 确保 “禁止解析IPv6 DNS记录” 未勾选
  2. 切换到"IPv6 RA设置"标签页
    • RA Flags:勾选 managedother
  3. 保存并应用

第四步:调整防火墙(关键)

进入 网络防火墙

  1. 编辑"wan"区域

    • 转发:选择 “接受” 或确保有规则允许转发到lan区域
    • 涵盖的网络:确认包含 wanwan6
  2. 编辑"lan"区域

    • 转发:选择 “接受”
    • 涵盖的网络:确认包含 lan
  3. 保存并应用

验证与排错

在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获取不到PDOpenWRT_A未正确分配PD前缀在OpenWRT_A的WAN6接口高级设置中,将"IPv6前缀长度"改为6056
电脑获取不到地址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前缀长度:6056
  • DHCP/DNS → 高级设置 → 勾选"动态DHCP"和"RA"

OpenWRT_B(关键):

  • WAN接口:DHCPv6客户端 + 请求IPv6前缀
  • LAN接口:IPv6分配长度64 + RA/DHCPv6服务器模式
  • 防火墙:允许wan到lan的IPv6转发

配置完成后,重启OpenWRT_B的WAN接口或整个路由器,等待1-2分钟让DHCPv6完成前缀协商,你的电脑应该就能获取到公网IPv6地址了。