iptables不能在容器中的macvlanstream量上工作
我有一个接口eth0
,IP 10.0.10.10/24
的主机。 我启动docker,添加一个容器,没有networking。 然后我在eth0
上创build一个macvlan设备,给它IP 10.0.10.20/24
,并把它放在容器中。
主机和容器现在都有完整的networking访问权限。
然后,我在主机上创build一个iptables规则,以删除容器的IP 10.0.10.20
所有stream量。 规则不起作用,并且stream量通过。
当然,如果我从容器内( ip netns exec $PID iptables ...
或者通过提供容器NET_ADMIN
function)执行它,它就可以工作。
底层主机的iptables规则是否不过滤stream量?
答案是:你做不到。 当使用网桥时,stream量会进入主机,然后到达主机的IP堆栈。 当你使用macvlan时,唯一的ip栈是容器中的ip栈,所以主机上的iptables规则永远不会被调用。
唯一的方法是更改容器内的iptables规则。
如果你不想让容器访问,例如,如果你想控制容器,那么使用主机本身的ip netns exec ...
,它将控制容器中的iptables规则而不给容器本身控制。
我写了一个脚本来做到这一点。 它可以在https://github.com/deitch/ctables和MIT许可。