利用iptables在docker容器之间丢弃数据包
我有三个容器C1、C2和C3,它们组成一个集群,一个DNS实例正在运行。容器使用DNS解析它们的IP,并且已经可以相互通信,因为它们使用香草docker配置公开所需的端口利用iptables在docker容器之间丢弃数据包,docker,iptables,Docker,Iptables,我有三个容器C1、C2和C3,它们组成一个集群,一个DNS实例正在运行。容器使用DNS解析它们的IP,并且已经可以相互通信,因为它们使用香草docker配置公开所需的端口 我如何利用主机的iptables在任意时间点在C1和C2之间丢弃数据包?您的问题并不清楚您的目标是什么,因此这里有几个选项 禁用ICC 如果您使用--icc=false运行Docker守护程序,则默认情况下容器将无法通信,除非您使用--link显式链接它们 如果您遵循此路线,请注意(tl;dr:您必须确保br\u netfil
我如何利用主机的
iptables
在任意时间点在C1和C2之间丢弃数据包?您的问题并不清楚您的目标是什么,因此这里有几个选项
禁用ICC
如果您使用--icc=false
运行Docker守护程序,则默认情况下容器将无法通信,除非您使用--link
显式链接它们
如果您遵循此路线,请注意(tl;dr:您必须确保br\u netfilter
模块加载到最新的内核上)
修改容器中的iptable
您可以使用nsenter
工具在容器内运行iptables
命令,并将DROP
规则添加到容器的输入链中。例如,如果您知道(a)容器C1的PID和(b)容器C2的ip地址(这两个地址都可以通过docker inspect
获得),您可以运行:
nsenter -t <pid_of_C1> --net iptables -A INPUT -s <ip_of_c2> -j DROP
这将在转发
表的位置1(-I FORWARD 1
)插入上述规则。这是必要的,因为它必须位于-i docker0-o docker0-j ACCEPT
规则之前,当--icc=true
为默认值时,Docker将添加到转发
链中。我将尝试您的最后一种方法。我总是忘记规则的地位很重要。
iptables -I FORWARD 1 -s <ip_of_c1> -d <ip_of_c2> -j DROP