随着 OpenWrt 主线全面转向 nftables 作为后端防火墙框架,在固件上直接部署 Docker 会面临一个现实问题:Docker 依赖传统的 iptables 进行网络规则管理,安装时往往被迫拉取大量 iptables 兼容层组件。这不仅增加了系统冗余,更可能在 FW4 原生环境下引发规则冲突或转发异常。尤其自 25.12 版本之后的固件,部分 iptables 相关软件包已被逐步移除,强行补全兼容层将带来不可预知的网络稳定性风险。
相比之下,Podman + macvlan 的组合为 FW4 环境提供了优雅的替代方案。Podman 原生支持 nftables 生态,无需额外引入 iptables 依赖,可完美融入 FW4 的规则体系;同时借助 macvlan 驱动,容器能够直接获得独立的 IPv4/IPv6 双栈 地址,网络性能接近裸机,且 VLAN 隔离清晰、配置灵活。
本文将详细介绍如何在 OpenWrt/ImmortalWrt23.05+版本上部署 Podman,并通过 macvlan 实现容器双栈通信,帮助你在新架构下轻量、稳定地运行容器服务。欢迎交流讨论。 在dhcp里添加一个 config dhcp 'podman' option interface 'podman' option ra 'server' option ra_preference 'medium' option dhcpv6 'server' list ra_flags 'other-config' option leasetime '12h' option start '100' option limit '150' option dns_service '0' 2. 第二步 配置network config device option name 'macvlan0' option type 'macvlan' option ifname 'br-lan' option mode 'bridge' option macaddr 'XXXX' #自行生成后填写
config interface 'podman' option device 'macvlan0' option proto 'static' list ipaddr '192.168.11.16/28' option ip6assign '64' option ip6ifaceid 'eui64' option multipath 'off' 3.第三步 配置firewall config zone option name 'lan' option input 'ACCEPT' option output 'ACCEPT' option forward 'ACCEPT' list network 'lan' list network 'podman' list device 'macvlan0' #在lan的配置里增加这一行
重启Dnsmasq、network、firewall 4.现在建一个容器测试一下
podman run -d \ --name=test \ --network lan_macvlan \ --ip 192.168.11.17 \ --dns 192.168.11.16 \ nginx:alpine:latest
podman exec -it test ip a 看看你的IP吧
|