Lazy loaded image
Openwrt IPv6 实践
Words 1362Read Time 4 min
2025-9-29
2025-11-10
date
related_level
slug
openwrt_ipv6
type
Post
relate_date
summary
OpenWrt 旁路由与二级路由 IPv6 配置,含 Docker IPv6 与 NAT64 设置方案
status
Published
tags
openwrt
网络
category
运维管理
last_updated
Nov 10, 2025 10:02 PM
是否已更新
orginal_page
是否推荐
旁路由开启 IPv6 over IPv4
  • 修改 LAN 口配置
    • 常规配置
      • 协议改为静态地址
      • 网关指向主路由地址,地址和子网掩码设置为与主路由在同一子网
    • 防火墙设置
      • 改为 lan
    • DHCP服务器
      • 基本设置中,勾选忽略此接口
      • IPv6 设置中,路由通告、DHCPv6 和 NDP 代理均改为禁用
  • 在 LAN 口的基础上添加虚拟端口 @LAN
    • 接口名随意,如 LAN6
    • 常规配置
      • 协议改为 DHCPv6 客户端
      • 设备改为 @LAN
    • 防火墙设置
      • 改为 lan
    • 其余默认即可
二级路由 IPv6 中继
  • 配置WAN口:分别配置WAN和WAN6
    • WAN6设置为DHCPv6客户端
      • 后续需要在命令行下设置为主接口
        • vim /etc/config/dhcp
      • WAN设置为静态地址并设置为 ipv4 静态地址,DHCP ipv6 设置为中继模式
    • 配置LAN口:设置为静态地址并设置为 ipv4 静态地址(与WAN口不同网段),DHCP ipv6 设置为中继模式
    • 保存并应用
    openwrt 旁路由配置 ipv6 内网 DHCP
    • 旁路由基本设置
      • 接口 lan 对应设备 br-lan 为静态地址,手动设置 ipv4 地址及网关
      • 接口 lan6 设备 @lan6 设为 DHCPv6 客户端,不配置 DHCP 服务器
    • 防火墙设置 lan 出站流量 ipv6 伪装
      • wan 默认开启,但 lan 需要在高级设置项下开启 ipv6 伪装
    旁路由设置 ipv6 内网 DHCP
    • 网络→接口→全局网络选项,查看 IPv6 ULA 前缀
      • fdff:aaaa:bbbb::/48
      • 后续用做分配给其他内网设备的 IPv6 地址前缀
      • 如有需要可以自行修改
    网络→接口→接口
    • 接口 lan 高级设置
      • 勾选 委托 IPv6 前缀
        • IPv6 前缀过滤器 勾选 local (本地 ULA)
        • 防火墙设置勾选 lan,使用 ipv6 伪装
        接口 lan 设置 DHCP 服务器
        • 常规设置里取消勾选 忽略该接口
        • 高级设置里勾选 动态DHCP强制
        • IPv6 设置
          • IPv6 RA 设置
            • 应用后,查看接口网络情况
              • 接口 lan 获得 fdff:aaaa:bbbb::1/64 的内网地址
                • 其他客户端可配置该地址为 ipv6 路由,即可获得对应内网 IPv6 地址
              • 接口 lan6 获得 fdff:aaaa:bbbb::be24:11ff:fe1d:8309/64 的内网地址
                • 后缀由客户端接口自行生成,一般也不会变化
            docker 默认 bridge 网络配置 ipv6 地址
            • 检查是否有必须的 ipv6 模块
              • opkg list-installed | grep ip6tables
              • ls -al /usr/lib/iptables
            配置 ipv6 网络,启用包分发并设置 IPv6 默认的 ULA 前缀
            • 上游最好能获取到 ipv6-PD 地址,以便宿主机和 docker 能正常分配到 ipv6 地址
              • 这部分比较复杂,自行参考网上相关文章进行配置
            • vim /etc/config/network
              • 启用包分发(Packet Steering)
                • 系统会尽可能将网络处理分散到多个 CPU 核心,提高多核设备的网络性能
              添加 ipv6 默认路由
              • vim /etc/hotplug.d/iface/90-ipv6
                • 根据自身情况修改接口 lan6 及设备名称 br-lan
              • 查错
                • ip -6 route show default
                • logread | grep hotplug
              • 手动增删对应路由
                • route -A inet6 add default gw fe80::1 dev br-lan
                • route -A inet6 del default gw fe80::1 dev br-lan
              配置 docker ipv6 子网网段出口伪装
              • ip6tables -t nat -A POSTROUTING -s fd00::/80 -o br-lan -j MASQUERADE
                • s fd00::/80 指定要匹配的源地址 ipv6 子网
                • o br-lan 指定输出接口为 br-lan
                  • br-lan 是 Openwrt 的虚拟网桥接口,包含多个物理 lan 口
                  • 可以换成 eth0, eth1 等物理接口
              • ip6tables -t nat -L POSTROUTING -v -n
                • 查看是否添加了对应路由表记录
              • ip6tables -t nat -D POSTROUTING -s fd00::/80 -o br-lan -j MASQUERADE
                • 不再使用则删除路由表记录
              配置 /etc/docker/daemon.json
              • fixed-cidr-v6 需根据自身 ipv6 地址网段进行配置,如果使用的是公网 ipv6 地址网段则需要上游能进一步分配 ipv6 地址,否则将无法正常给容器分配公网 ipv6 地址
                • 这里的是 fd00::/80 ipv6 本地地址,与之前设置的 ULA 前缀匹配
                  • /80 是最大长度,可容纳 2^48 个地址
                • 如果是 2XXX 开头的公网地址则取前五节,如 2001:db8:1234:1234:1234::/80
              • 注意,要对文件进行压缩,且特殊字符 \/ 均需要转为 \/
              • 重启相关服务
                • /etc/init.d/network restart
                • /etc/init.d/firewall restart
                • /etc/init.d/dockerd restart
              测试排错
              • ip addr | awk '/^[0-9]+: / {iface=$2; gsub(":", "", iface)} /inet6/ {print iface, $2, $4}'
                • 查看接口 ipv6 地址及其范围
              • ip6tables -t nat -nL
                • 查看 ipv6 路由表
              • docker 默认 bridge 网络
                • docker network inspect bridge
              • 是否能 ping 通 ipv6 地址
                • docker run --network=host --rm -it busybox ping -6 -c4 taobao.com
                  • 宿主机至外网 ipv6 地址
                • docker run --network=bridge --rm -it busybox ping -6 -c4 fd00::1
                  • 容器至宿主机 ipv6 地址
                • docker run --network=bridge --rm -it busybox ping -6 -c4 taobao.com
                  • 容器至外网 ipv6 地址
              (TODO)openwrt 使用 jool 或 tayga 对 6to4 形式的 ipv4 进行 NAT64
              上一篇
              TrueNAS SCALE 应用管理
              下一篇
              Openwrt 应用编译开发

              Comments
              Loading...