docker-iptables
简介
Docker 在运行时会自动配置 iptables 以处理容器的网络流量和端口映射,本文对docker自动配置的防火墙规则进行说明
伪装
1 | pkts bytes target prot opt in out source destination |
规则各部分的解释
2099: 这是匹配到该规则的包的计数器,表示当前已有 2099 个数据包匹配此规则。
136K: 这是匹配到该规则的字节计数器,表示当前已有 136K 字节通过此规则。
MASQUERADE: 表示这是一个伪装(Masquerading)规则。伪装是一种动态 NAT(网络地址转换)技术,通常用于允许内部网络的设备通过一个公共 IP 地址访问外部网络。
all: 表示此规则适用于所有协议(包括 TCP、UDP 等)。
–: 这一部分通常用于分隔规则的匹配条件和目标动作,后面是匹配条件。
*: 表示匹配所有输入接口。
!docker0: 表示匹配所有不通过
docker0接口的流量。docker0是 Docker 创建的虚拟网桥接口,通常用于连接 Docker 容器。172.17.0.0/16: 表示匹配源地址在
172.17.0.0/16网段的流量。这是 Docker 默认的网络地址范围,通常用于 Docker 容器的内部网络。0.0.0.0/0: 表示匹配目标地址为任意 IP 地址,意味着可以访问外部网络。
规则的作用:
对来自 172.17.0.0/16 网段(Docker 容器的内部网络)的所有流量进行伪装,且该流量不通过 docker0 接口(确保不是容器间通信)。这意味着所有从 Docker 容器发出的流量(不通过 Docker 的虚拟网桥)都将使用宿主机的公共 IP 地址进行伪装,以便能够访问外部网络。
1 | pkts bytes target prot opt in out source destination |
规则各部分的解释:
0: 这是匹配到该规则的包的计数器,表示当前没有数据包匹配此规则。
0: 这是匹配到该规则的字节计数器,表示当前没有字节通过此规则。
MASQUERADE: 表示这是一个伪装(Masquerading)规则。伪装是一种动态 NAT(网络地址转换)技术,通常用于允许内部网络的设备通过一个公共 IP 地址访问外部网络。
tcp: 表示此规则适用于 TCP 协议。
–: 这一部分通常用于分隔规则的匹配条件和目标动作,后面是匹配条件。
*: 表示匹配所有输入接口。
*: 表示匹配所有输出接口。
172.17.0.3: 表示匹配源地址为
172.17.0.3的流量。这个 IP 地址通常是 Docker 容器的内部 IP 地址。172.17.0.3: 表示匹配目标地址为
172.17.0.3的流量。tcp dpt:5700: 表示匹配目的端口为 5700 的 TCP 流量。
规则的作用:
对来自 IP 地址 172.17.0.3 的 TCP 流量(目标端口为 5700)进行伪装。伪装的过程是将源地址替换为宿主机的公共 IP 地址,以便能够通过外部网络访问。
目标地址转换(Destination NAT)
1 | pkts bytes target prot opt in out source destination |
规则各部分的解释:
42: 这是匹配到该规则的包的计数器,表示有 42 个数据包匹配了此规则。
2352: 这是匹配到该规则的字节计数器,表示总共传输了 2352 字节的数据。
DNAT: 表示这是一个目标地址转换(Destination NAT)规则。用于将进入的数据包的目标地址更改为指定的地址。
tcp: 表示此规则适用于 TCP 协议。
–: 这一部分通常用于分隔规则的匹配条件和目标动作,后面是匹配条件。
!docker0: 这个条件表示匹配所有不通过
docker0网桥接口的流量。docker0是 Docker 默认创建的虚拟网络接口。*: 表示匹配所有输入接口。
0.0.0.0/0: 表示匹配所有源地址。
0.0.0.0/0: 表示匹配所有目标地址。
tcp dpt:5700: 表示匹配目的端口为 5700 的 TCP 流量。
to:172.17.0.3:5700: 这是 DNAT 的目标,表示将匹配到的流量的目标地址转换为
172.17.0.3,目标端口为 5700。这通常是一个 Docker 容器的 IP 地址。
规则的作用:
- 将所有不通过
docker0网桥接口的 TCP 流量(目标端口为 5700)重定向到 IP 地址为172.17.0.3的 Docker 容器的 5700 端口。 - 这通常用于实现端口映射,使得外部流量可以访问 Docker 容器内的服务。




