利用iptables在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

我有三个容器C1、C2和C3,它们组成一个集群,一个DNS实例正在运行。容器使用DNS解析它们的IP,并且已经可以相互通信,因为它们使用香草docker配置公开所需的端口


我如何利用主机的
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