#本机地址192.168.2.134
#添加一个netns0模拟一台机器
ip netns add netns0
ip link add veth0 type veth peer name ceth0
ip link set veth0 up
ip link set ceth0 netns netns0
nsenter --net=/var/run/netns/netns0
ip link set lo up
ip link set ceth0 up
ip addr add 172.18.0.10/16 dev ceth0
exit
#添加一个netns1模拟另外一台机器
ip netns add netns1
ip link add veth1 type veth peer name ceth1
ip link set veth1 up
ip link set ceth1 netns netns1
nsenter --net=/var/run/netns/netns1
ip link set lo up
ip link set ceth1 up
ip addr add 172.18.0.20/16 dev ceth1
exit
# 在主空间添加一个网桥
ip link add br0 type bridge
ip link set br0 up
ip link set veth0 master br0
ip link set veth1 master br0
# 给网桥添加上地址(变成三层交换机)
ip addr add 172.18.0.1/16 dev br0
# 给netns0添加一个默认路由
nsenter --net=/var/run/netns/netns0
ip route add default via 172.18.0.1
ping -c 2 192.168.2.134 # 可以ping通主网卡的地址
ping -c 2 baidu.com # ping不通
exit
# 主空间开启ip转发
bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
# 添加来自br0的snat
iptables -t nat -A POSTROUTING -s 172.18.0.0/16 ! -o br0 -j MASQUERADE
# 给netns0添加一个默认路由
nsenter --net=/var/run/netns/netns0
ping -c 2 baidu.com # ping通
exit
#清理
ip netns delete netns0
ip netns delete netns1
ip link del dev veth1
ip link del dev veth0
ip link del dev br0
iptables -t nat -D POSTROUTING -s 172.18.0.0/16 ! -o br0 -j MASQUERADE
# 在主空间模拟k8s nodeport/docker expose
iptables -t nat -A PREROUTING -d 192.168.2.134 -p tcp -m tcp --dport 5000 -j DNAT --to-destination 172.18.0.10:5000
# 本地流量 (因为它没有通过 PREROUTING chain)
iptables -t nat -A OUTPUT -d 192.168.2.134 -p tcp -m tcp --dport 5000 -j DNAT --to-destination 172.18.0.10:5000