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 |
|
不允许从局域网或者外网访问部署在本机的容器的映射到本机上的 TCP/3000 端口。
如果要允许局域网访问,可以加上-s
指定源 IP。
Docker 网络实验:本机和外部访问容器的数据流向,以及如何设置 iptables 规则
https://blog.appe.moe/2025/07/05/Docker-网络实验:本机和外部访问容器的数据流向,以及如何设置-iptables-规则/