Gentoo Linux 使用 xtables-nft-multi 之后,docker wg-easy 不能正常使用

Gentoo Linux 使用 xtables-nft-multi 之后,docker wg-easy 不能正常使用

💡 原文中文,约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 版本不再适合继续依赖,可能导致规则写入失败。

➡️

继续阅读