Docker 网络实验:本机和外部访问容器的数据流向,以及如何设置 iptables 规则

本文最后更新于 2025年7月18日 下午

做一点小小的记录。做了一些实验获得的结果。

关于从外部和本机访问 Docker 容器的经过的链和其它属性

IN OUT 源 IP 目标 IP MAC
本机访问 lo 127.0.0.1 127.0.0.1 INPUT 00:00:00:00:00:00:00:00:00:00:00:00:08:00
实际上是:00:00:00:00:00:00+00:00:00:00:00:00+08:00
前两个是全零,因为数据包没有走出本机,没有实际硬件地址。最后两个字节代表协议类型。
0x0800 -> IPv4
0x86DD -> IPv6
外部访问
(包括从局域网和 WireGuard 接口)
数据包从哪个接口来就是哪个接口,如果从互联网来则是实际网卡(如 eth0 ,enpxxx)如果是 WireGuard 则是 WireGuard 虚拟接口。 容器加入的网络的网关。
(docker0 或 br-xxx)
从哪来就是哪的 IP ,是访问方的实际 IP 。 容器在 Docker 网络内的 IP DOCKER-USER 前一段:从哪个网卡来,就是哪个网卡的。
后一段:看起来是另一串 Mac 地址。

设置 iptables 规则

如果要阻止外部访问本机的容器,需要在 DOCKER-USER 链上设置规则。

1
iptables -A DOCKER-USER -p tcp --dport 3000 -j DROP

不允许从局域网或者外网访问部署在本机的容器的映射到本机上的 TCP/3000 端口。

如果要允许局域网访问,可以加上-s指定源 IP。


Docker 网络实验:本机和外部访问容器的数据流向,以及如何设置 iptables 规则
https://blog.appe.moe/2025/07/05/Docker-网络实验:本机和外部访问容器的数据流向,以及如何设置-iptables-规则/
作者
APPE
发布于
2025年7月5日
许可协议