语境:
- 多个 docker 容器监听所有接口
wg0
具有 IPv6 地址的wireguard接口- 最终,NFS 为
wg0
客户端提供文件服务
问题:
后面的客户端wg0
可以访问这些容器。我想避免这种情况,以及 docker 容器访问该接口后面的主机。
过滤掉它们的最简单方法是丢弃 docker 容器和 wireguard 接口之间的数据包。但是,以下规则不起作用:
iptables -I DOCKER-USER -i wg0 -j DROP
当我第一次写这个问题时,我不确定为什么,但事实证明wg0
只使用 IPv6 地址,所以我需要使用规则ip6tables
,但看起来DOCKER-USER
链不存在在那里。
相关问题:这个使用了错误的输入链。那个本质上是同一个问题,但是以 apache-mesos 特定的方式制定的,我不想改变。
考虑的其他背景和解决方案
- 可以说,这是一个防火墙问题,但我想知道为什么 iptable 规则不起作用。
- 可以使用
nftables
或其他 BPF 工具指定此排除规则。我对语法很好奇 - 命名空间可以发挥作用。我对它们还有很多问题,但为了简单起见,避免它们可能是明智的,而 wg-quick 不支持这些问题。我也不确定这是否会与 NFS 交互。
- 我可以尝试阻止来自wireguard 主机的IP 范围。这听起来更复杂,也更难维护。
- 容器服务可以监听特定的 IP。听起来不太灵活,也更难维护。