1.docker使用-p参数映射端口(宿主机端口:容器端口)
那么问题来了,他是怎么转发到容器的端口的呢?
这里就要说到iptables的四表五链了,先说说这个四表五链是啥
2.四表五链总览
表 (Table) | 功能描述 | 核心操作 | 生效的链 (Chains) | 优先级顺序 |
---|---|---|---|---|
raw | 用于数据包状态跟踪的豁免 | NOTRACK |
PREROUTING , OUTPUT |
1 (最高) |
mangle | 修改数据包元数据(如 TTL, TOS, MARK) | TTL , TOS , MARK |
全部五链 PREROUTING , INPUT , FORWARD , OUTPUT , POSTROUTING |
2 |
nat (Network Address Translation) | 网络地址转换(端口转发、IP伪装) | SNAT , MASQUERADE , DNAT , REDIRECT |
PREROUTING , INPUT , OUTPUT , POSTROUTING |
3 |
filter | 过滤数据包(防火墙核心功能) | ACEPT , DROP , REJECTC |
INPUT , FORWARD , OUTPUT |
4 (最低) |
3.五链数据包流向图

链 (Chain) | 触发时机 | 主要用途 | 常用的表 |
---|---|---|---|
PREROUTING | 数据包刚进入网卡 ,尚未进行路由判断之前 | 目标地址转换 (DNAT) (端口转发、负载均衡) | raw , mangle , nat |
INPUT | 经路由判断后,数据包的目标地址是本机 | 处理发往本机的数据包 (主机防火墙关键) | mangle , filter |
FORWARD | 经路由判断后,数据包的目标地址是其他地址(本机负责转发) | 处理流经本机的数据包 (网络防火墙关键) | mangle , filter |
OUTPUT | 由本机进程产生的数据包,在发出之前 | 处理本机产生的出站数据包 | raw , mangle , nat , filter |
POSTROUTING | 数据包即将离开网卡之前,所有路由判断已完成 | 源地址转换 (SNAT) (IP伪装、共享上网) | mangle , nat |
4.直接实战
这里主要用到了nat表的dnat规则进行端口映射

