我目前正在尝试找出正确的方法来路由特定的“所有”流量(无根) 通过 Wireguard 保护 docker 容器,一方面防止任何泄漏(如果连接/Wireguard 失败 - 阻止任何互联网访问),另一方面允许 LAN 连接(192.168.0.0/16)访问容器服务的 UI。
我首先尝试的是将流量路由到linuxserver/wireguard带有终止开关的容器——这有一些缺点:
- 如果wg-quick配置有缺陷,wireguard 连接从未建立(+从未添加 killswitch IPTables 规则),导致所有流量完全泄漏。
- 任何服务的本地访问都只能在容器内部进行
为了允许本地流量,可以修改 IPTables 规则并添加路由规则(参见例如这里),但遗憾的是,它对我来说不起作用。此外,我还测试了 rnd1783 的程序他最近在 Reddit 上提问这似乎有效,但像他一样,我不确定这是否正确地解决了我的意图(注意单一答案由 rcN9 提供)。
rcN9 似乎建议使用网络命名空间(参见例如这里或者这里),但我不确定在半根 (无根 docker/podman,不想使用 root,但如果没有其他办法的话会这样做) 和容器“风格”环境中是否可以实现这一点。
对我的意图来说最好的解决方案是什么:
- 无根容器(rootless docker、podman)
- 防止任何泄漏
- 允许 LAN 访问(到 UI)
这应该独立于任何发行版,但是为了安全起见,我会提到它:寻找一个适用于 Debian 的解决方案。
编辑1:
- 如果这对我有帮助的话,我可以使用辅助(物理)网络接口。