1. 建 namespace 和默认空间联通
# veth1 在 ns1 上,IP:192.168.1.11
# veth0 从默认空间->br0,IP:192.168.1.10
ip netns add ns1 ip link add veth0 type veth peer name veth1 ip link set veth1 netns ns1 ip netns exec ns1 ifconfig veth1 192.168.1.11/24 up ip addr add 192.168.1.10/24 dev veth0 ip link set dev veth0 up ping -c 2 -I veth0 192.168.1.11 # ping ns1中的IP可以通了,-I指定源路由 ip netns exec ns1 ping -c 2 192.168.1.10 # 从 ns1 中 ping 默认空间的 veth1 可以通了
2. 加入网桥,将默认空间中的端口放入网桥
ip link add name br0 type bridge ip link set br0 up ip link set dev veth0 master br0
# br0和veth0相连之后发生了如下变化:
- br0和veth0之间连接起来了,并且是双向的通道;
- 协议栈和veth0之间变成了单通道,协议栈能发数据给veth0,但veth0从外面收到的数据不会转发给协议栈;
- br0的MAC地址变成了veth0的MAC地址。
这就好比Linux bridge在veth0和协议栈之间做了一次拦截,在veth0上面做了点小动作,将veth0本来要转发给协议栈的数据拦截,全部转发给bridge。同时,bridge也可以向veth0发数据。
ping -c 2 -I veth0 192.168.1.11 # ping ns1中的IP,不通了!-I 指定br0也不会通 ip netns exec ns1 ping -c 2 192.168.1.10 # 从 ns1 中 ping 默认空间的 veth1 可以通了 ip addr del 192.168.1.10/24 dev veth0 ip addr add 192.168.1.10/24 dev br0 ping -c 2 -I br0 192.168.1.11 # ping ns1中的IP可以通了 ip netns exec ns1 ping -c 2 192.168.1.10 # 从 ns1 中 ping 默认空间的 veth1 可以通了
3.与外网通信
ip netns exec ns1 ip route add default via 192.168.1.10 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
参考:https://blog.csdn.net/weixin_39169791/article/details/105099072
标签:桥接,ip,手动,ping,192.168,br0,veth0,ns1,搭建 From: https://www.cnblogs.com/aaron-agu/p/17146489.html