使用 Incus 和 OpenWrt 实现 IPv6 自动配置及网络转发
本文总结了在 Incus(原 LXD)环境中配置 OpenWrt 容器,并通过系统配置实现 IPv6 自动化配置及网络转发的过程。通过配置网络接口和调整防火墙规则,能够实现 IPv6 的正常使用。
来自ChatGPT润色,不明白为何所有AI都要删除我这个原话,应该是口语化以及不确定。
混合systemd-networkd配置openwrt0网卡,添加默认路由,额外配置接受RA,sysctl应该被systemd-networkd屏蔽了
事实上sysctl设置的参数,确实没用。在网上看到了相关说法。
一、OpenWrt 容器配置
首先,OpenWrt 容器通过 Incus 配置好网络接口。以下是容器的部分配置:
architecture: x86_64
config:
boot.autostart: "true"
security.privileged: "true"
devices:
eth0:
nictype: physical
parent: eth0
type: nic
eth1:
network: openwrt0
type: nic
ppp:
path: /dev/ppp
type: unix-char
profiles:
- default
关键点:
- eth0 接口 连接到宿主机的物理网络。
- eth1 接口 连接到虚拟网络
openwrt0,用于内部网络通信。
二、OpenWrt 网络配置
在 OpenWrt 容器中,设置了 IPv6 的 DHCPv6 和路由通告服务,使得局域网中的设备能够自动配置 IPv6 地址。关键配置如下:
config interface 'lan'
option proto 'static'
option device 'eth1'
option ipaddr '10.209.47.254'
option netmask '255.255.255.0'
option ip6assign '64'
option dhcpv6 'server'
option ra 'server'
关键点:
- IPv4 地址 设置为
10.209.47.254,用于内部网络管理。 - IPv6 地址 通过
ip6assign和 DHCPv6 服务自动分配,确保局域网设备可以通过 SLAAC 获取 IPv6 地址。
三、宿主机网络配置
宿主机通过 systemd-networkd 管理虚拟网卡 openwrt0,并接受来自 OpenWrt 容器的路由通告。以下是相关的 systemd-networkd 配置文件:
[Match]
Name=openwrt0
[Network]
Gateway=10.209.47.254
Address=10.209.47.1/24
IPv6AcceptRA=yes
IPv6Forwarding=yes
关键点:
- IPv6AcceptRA:启用该选项确保宿主机接受来自 OpenWrt 的路由通告,自动获取 IPv6 地址。
- IPv6Forwarding:开启 IPv6 转发,允许网络中的设备通过宿主机的 IPv6 地址进行通信。
四、手动启动 eth1 接口并添加防火墙规则
为了确保每次启动时 eth1 网络接口正常工作,并设置合适的防火墙规则,创建了一个 systemd 服务文件:
[Unit]
Description=Add default route and up eth1 after LXD startup
After=incus.service
[Service]
Type=oneshot
ExecStart=sh -c 'ip link set eth1 up && ip6tables -A FORWARD -j ACCEPT'
[Install]
WantedBy=multi-user.target
关键点:
- eth1 接口 在 Incus 启动后自动启用。
- 防火墙规则 设置为接受所有 IPv6 转发流量,确保网络之间的通信正常。
总结
通过合理配置 OpenWrt 容器和宿主机的网络接口,以及添加必要的防火墙规则,可以有效实现 IPv6 的自动配置和网络转发功能。这一方案适用于需要在虚拟化环境中构建复杂网络拓扑的场景。