💡
原文中文,约4400字,阅读约需11分钟。
📝
内容提要
在 Gentoo Linux 切换到 xtables-nft-multi 后,Docker 中的 wg-easy 无法正常使用,原因是容器内的 iptables 仍为 legacy 版本,导致与宿主机不一致。解决方案是创建一个派生镜像,将容器内的 iptables 命令指向 xtables-nft-multi,以保持原有配置不变,确保 WireGuard 客户端正常转发流量。
🎯
关键要点
- Gentoo Linux 切换到 xtables-nft-multi 后,Docker 中的 wg-easy 无法正常使用,原因是容器内的 iptables 仍为 legacy 版本。
- wg-easy 在启动和 WireGuard peer 生效时执行 iptables 命令,导致容器内的 iptables backend 与宿主机不一致。
- 解决方案是创建一个派生镜像,将容器内的 iptables 命令指向 xtables-nft-multi,以保持原有配置不变。
- 自定义 Dockerfile 可以在本地创建一个薄的派生镜像,只替换 iptables 相关命令,确保 WireGuard 客户端正常转发流量。
- 验证容器启动后,确认容器内的 iptables backend 为 nf_tables,确保规则已正确写入宿主机内核。
❓
延伸问答
为什么在 Gentoo Linux 切换到 xtables-nft-multi 后,Docker 中的 wg-easy 无法正常使用?
因为容器内的 iptables 仍为 legacy 版本,导致与宿主机不一致。
如何解决 Docker 中 wg-easy 无法正常使用的问题?
可以创建一个派生镜像,将容器内的 iptables 命令指向 xtables-nft-multi,以保持原有配置不变。
创建派生镜像时需要修改哪些命令?
需要将 iptables、ip6tables、iptables-save 和 iptables-restore 命令指向 xtables-nft-multi。
如何验证容器内的 iptables backend 是否正确?
可以通过执行 'docker exec -it wg-easy iptables --version' 来确认,期望输出应包含 nf_tables。
wg-easy 的主要功能是什么?
wg-easy 是一个 WireGuard 的 Web 管理工具,用于管理 WireGuard 客户端和配置。
在 Gentoo Linux 中,为什么不再推荐使用 legacy 版本的 iptables?
因为从 Linux Kernel 6.17 开始,legacy 版本不再适合继续依赖,可能导致规则写入失败。
➡️