openwrt ipv6的 nat 以及 转发问题

注意:

必须在外部测试,转发后默认无法nat回流。建议 v4 直接用 op 的防护墙界面转发,24 以后的 op 已经可以在界面做 v6 的转发。
如果你只是自己打开个网页,那没必要这么麻烦,当你需要记录外网访问来源并且对并发有要求才需要这么搞。
如果你真的那么想要 nat 回流,用 lucky 绑定路由器 ip 吧,域名内网重写为路由器 ip(记录不了内网地址)。或者直接重写域名 ip 为服务 ip,这样也能记录内网地址。
image

ipv6nat

  1. 添加全局 ULA,例如 fd12:3456:789a::/48
  2. 防火墙添加规则
ip6tables -t nat -A POSTROUTING -o pppoe-wan -j MASQUERADE
  1. 添加无源地址限制的 v6 路由
ip -6 route add default dev pppoe-wan
  • 如果想开机就能用,可以添加规则
# /etc/hotplug.d/iface/99-ipv6-nat
#!/bin/sh
[ "$DEVICE" = "pppoe-wan" ] && [ "$ACTION" = "ifup" ] && {
    sleep 2
    ip -6 route add default dev pppoe-wan 2>/dev/null || true
}
  • 如果不想让内网设备有公网v6,重设 wan6
    只需要禁用“请求指定长度的 IPv6 前缀”就行,pppoe 拨号的需要关闭 pppoe 的内置 v6 管理,ppp 协商 v6 改成手动。新建 wan6 设备写 pppoe-wan

ipv6转发

  1. 防火墙添加规则, 下面是示例
ip6tables -t nat -A PREROUTING -p tcp --dport 63820 -j DNAT --to-destination [fd12:3456:789a:0:be24:11ff:fe9c:112c]:63820
ip6tables -I zone_wan_forward -d fd12:3456:789a:0:be24:11ff:fe9c:112c -p tcp --dport 63820 -j ACCEPT
  • 如果内网 v6 地址是随机的,可以在 op 上强制设置后缀(4 段),或者设备上强制使用 eui64 等。
posted @ 2025-12-13 12:04  铁流是宝宝  阅读(31)  评论(0)    收藏  举报