一个小开发,docker用多了也想研究一下原理,就参考着搞了一下,一些设备和网络技术也学了点了,我现在创建2个 net ns,然后把它们加到一个 bridge 里面
### 创建 net1
ip netns add net1
### 新建 veth 对 veth1-veth2
ip link add veth1 type veth peer name veth2
ip link set veth1 netns net1
### 给 veth1 配置 ip 启动
ip netns exec net1 ip addr add 192.168.0.101/24 dev veth1
ip netns exec net1 ip link set veth1 up
### 创建 net2
ip netns add net2
### 新建 veth 对 veth3-veth4
ip link add veth3 type veth peer name veth4
ip link set veth3 netns net2
### 给 veth3 配置 ip 启动
ip netns exec net2 ip addr add 192.168.0.102/24 dev veth3
ip netns exec net2 ip link set veth3 up
### 创建 br0
brctl addbr br0
ip link set dev veth2 master br0
ip link set dev veth4 master br0
ip addr add 192.168.0.100/24 dev br0
ip link set veth2 up
ip link set veth4 up
ip link set br0 up
完成以上步骤,可以ns1 ping ns2 了,但是 ns1 ping 主机不行是吧,需要在 ns1 中加个路由规则,把流量都从 veth1 发出
ip netns exec net1 route add default dev veth1
ip netns exec net2 route add default dev veth3
到此都是没问题的,我想再研究一下,怎么访问本机外的网络,看到很多人说加个iptables
iptables -t nat -A POSTROUTING -s 192.168.0.102/24 ! -o br0 -j MASQUERADE
我测试了不行,我理解就是我的ns1,ns2的流量只能发到网桥,到不了eth0,所以我这个nat转换是没有匹配上的,不知道我理解的对不对?
主机上就只有这个的路由表,我是不是还需要配置一个什么路由表,让从ns1发到br0的流量能发到eth0,进而可以匹配iptables规则访问到外网
default gateway 0.0.0.0 UG 0 0 0 eth0
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
应该怎么做呢,我的思路是不是有问题呢,看了好久的资料了,只能来求助各位xdm了
看错了。。。。
我感觉是你这个nat设置得有问题,按照我的理解,出去的时候应该设置一个snat应该长这样: