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

时间:2016-02-29 09:24:50

标签: docker iptables

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

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

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

当然,如果我是从容器内部(ip netns exec $PID iptables ...或通过提供容器NET_ADMIN功能)来实现的,那么它就可以了。

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

1 个答案:

答案 0 :(得分:4)

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

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

如果您不想让容器访问,例如如果你想控制容器,那么从主机本身使用ip netns exec ...,它将控制容器中的iptables规则而不给容器本身控制。

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

相关问题