欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

Linux 内核网络命名空间间路由:veth + bridge + iptables NAT 实战

发表于:|最后更新:|分类:Linux与网络|阅读:1187 次

将多个 Network Namespace 通过 veth pair 接入 Linux Bridge,再配合 iptables MASQUERADE 即可在单机上模拟完整的容器网络拓扑与 SNAT 出网。

Linux 网络栈

一、构建 NAT 出网链路

bash
# 创建网桥并接入两个命名空间
ip link add br0 type bridge
ip link set br0 up
ip addr add 172.20.0.1/24 dev br0

ip netns add app1
ip link add veth1 type veth peer name veth1-br
ip link set veth1 netns app1
ip link set veth1-br master br0
ip link set veth1-br up

ip netns exec app1 ip addr add 172.20.0.2/24 dev veth1
ip netns exec app1 ip link set veth1 up
ip netns exec app1 ip route add default via 172.20.0.1

# 开启转发并对出网流量做 SNAT
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 172.20.0.0/24 -o eth0 -j MASQUERADE