旁路由开启 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 地址
- 参考资料
- https://github.com/istoreos/istoreos/issues/1511
- https://openwrt.org/docs/guide-user/network/ipv6/configuration
- https://docs.docker.com/engine/daemon/ipv6/
- https://docs.docker.com/engine/network/drivers/bridge/#use-ipv6-with-the-default-bridge-network
- https://en.wikipedia.org/wiki/Reserved_IP_addresses#IPv6
- 注意,仅局限于 bridge 网络,不适用于驱动类型为 overlay 的 Swarm 网络
- 检查是否有必须的 ipv6 模块
opkg list-installed | grep ip6tablesls -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 defaultlogread | grep hotplug
- 手动增删对应路由
route -A inet6 add default gw fe80::1 dev br-lanroute -A inet6 del default gw fe80::1 dev br-lan
配置 docker ipv6 子网网段出口伪装
ip6tables -t nat -A POSTROUTING -s fd00::/80 -o br-lan -j MASQUERADEs fd00::/80指定要匹配的源地址 ipv6 子网o br-lan指定输出接口为 br-lanbr-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::/80ipv6 本地地址,与之前设置的 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
- Author:白鸟3
- URL:https://blog.kun2peng.top/operation/openwrt_ipv6
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
