个人随笔
目录
Linux网络命名空间+Docker端口映射核心笔记
2026-05-14 23:27:34
一、Linux网络命名空间(netns)基础认知
 
1. 核心本质:Linux实现网络隔离的技术,每个netns拥有独立的网卡、IP、路由表、防火墙规则,相当于一台独立的虚拟小主机,与主机及其他netns网络完全隔离。
2. 同网段通信规则:netns内网卡IP与主机网卡IP处于同一网段时,无需路由、无需转发,二层直连可直接ping通,仅通过ARP协议寻址通信。
3. 跨网段/外网通信前提:netns访问主机其他网段或互联网,必须配置路由+开启IP转发,主机此时充当路由器,负责数据包转发。
 
二、IP转发(ip_forward)核心要点
 
1. 默认状态:普通Linux系统默认关闭(值为0),仅Docker、K8s等容器服务启动时会自动开启。
2. 作用:控制Linux主机是否转发非本机目标地址的数据包,关闭时,主机收到跨netns/跨网卡的数据包会直接丢弃,无法实现转发。
3. 配置方式- 临时开启(重启失效): echo 1 > /proc/sys/net/ipv4/ip_forward  或  sysctl -w net.ipv4.ip_forward=1 
- 永久开启(重启生效):编辑 /etc/sysctl.conf ,添加 net.ipv4.ip_forward=1 ,执行 sysctl -p 生效
4. 关键补充:netns访问互联网,除IP转发外,还需配置SNAT(地址伪装),否则外网回包无法找到netns,导致只有请求无响应。
 
三、iptables DNAT原理与作用
 
1. 全称:Destination NAT(目标网络地址转换),是iptables防火墙的核心规则。
2. 核心作用:修改数据包的目标IP和目标端口,将发往本机某端口的流量,强制转发到指定的目标IP+端口。
3. 关键执行逻辑- 优先级:iptables DNAT规则早于本机进程监听执行,流量先经过DNAT处理,再判断路由。
- 匹配后结果:一旦流量匹配DNAT规则,目标IP/端口被修改,系统会判定为转发流量,绝不会查找本机对应端口的进程,直接转发至目标地址。
4. 配套SNAT:数据包回传时,SNAT修改源IP为主机IP,保证响应能正常返回请求端。
 
四、Docker端口映射底层逻辑(Nginx容器示例)
 
1. 容器网络本质:Docker容器默认基于Linux netns实现隔离,每个容器有独立的虚拟网卡(veth pair)和内网IP,通过docker0网桥与主机通信。
2. 端口映射命令: docker run -p 主机端口:容器端口 nginx (如 -p 8080:80 )
3. Docker自动执行操作- 创建独立netns,分配容器内网IP(如172.17.0.2)
- 自动生成DNAT规则,将访问主机8080端口的流量,目标地址改为容器IP:80
- 自动开启主机IP转发,配置SNAT规则保证回包
4. 访问全流程1. 访问主机IP:8080,流量到达主机网卡
2. iptables DNAT规则触发,修改目标为容器IP:80
3. 主机IP转发生效,流量通过docker0网桥转发至容器netns
4. 容器内Nginx监听80端口,接收请求并响应
5. 回包经SNAT伪装为主机IP,返回至访问端
5. 核心结论:主机未监听映射端口(8080),全靠DNAT规则实现流量转发,不会查找本机进程。
 
五、核心知识点总结
 
1. netns隔离网络,同网段直连,跨网段需路由+ip_forward+SNAT
2. ip_forward是Linux主机转发数据包的总开关,默认关闭,必须手动开启
3. DNAT修改数据包目标地址,优先级高于本机进程,匹配后直接转发,不查本地进程
4. Docker端口映射=netns隔离+iptables DNAT+ip_forward,是Linux网络技术的封装应用
 7

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2