iptables 无法处理容器中的 macvlan 流量



我有一个接口eth0的主机,IP 10.0.10.10/24。我启动码头工人,添加一个容器,没有网络。然后我在eth0上创建一个macvlan设备,给它IP 10.0.10.20/24,并将其放入容器中。

主机和容器现在都具有完全网络访问权限。

然后,我在主机上创建一个 iptables 规则,以丢弃进出容器 IP 10.0.10.20的所有流量。规则不起作用,流量通过。

当然,如果我从容器内执行此操作(ip netns exec $PID iptables ...或通过为容器提供NET_ADMIN功能),它可以工作。

底层主机的 iptables 规则是否应该不过滤流量?

答案是:你做不到。使用网桥时,流量会流入主机并流出,因此它会到达主机的 IP 堆栈。使用 macvlan 时,唯一的 ip 堆栈是容器中的堆栈,因此永远不会调用主机上的 iptables 规则。

唯一的方法是更改容器内的iptables规则。

如果您不想授予容器访问权限,例如,如果您想控制容器,请使用主机本身的ip netns exec ...,这将控制容器中的 iptables 规则,而不授予容器本身控制权。

我写了一个脚本来做到这一点。它可在 https://github.com/deitch/ctables 和许可的麻省理工学院获得。

最新更新