我的最终目标是在Linux中实现虚拟路由和转发(VRF)。 似乎被广泛接受的方法是设置不同的networking名称空间(每个单独的路由表一个),并为每个名称空间/路由表运行一个Quagga或BIRD守护进程。 我没有结婚这个方法,所以如果有人有任何其他的build议,请让我知道。
有问题的机器在VMware工作站12中运行Debian 7(wheezy)。它一直是一个路由器,并且在我开始重新configuration之前已经成功路由了一段时间,所以我知道一般的路由设置是好的。
目前的问题是我无法通过我的networking名称空间进行通信。 也就是说,veth1(这是在我的名字空间如下)只能ping veth0,没有别的。 veth1和它下面的networking之间没有networking通信 – 甚至没有ARP。 如果我不知道更好的话,我会说有人从交换机上拔下了电缆(但在虚拟环境中很难做到这一点)。 是的,我检查了vmnets设置正确。 路由器在恢复到旧configuration时工作。 这只是在这个新的configuration不起作用。
任何人有任何想法如何获得veth1沟通? 甚至是完全不同的方法来获得VRF在Linux上的工作? 提前致谢。
我build立了新的configuration如下:
添加命名空间
ip netns add nsx
添加虚拟接口
ip link add veth0 type veth peer name veth1
创造一座桥梁
ip link add name vbr0 type bridge
将eth1和veth1添加到桥
ip link set dev eth1 master vbr0 ip link set dev veth1 master vbr0
将veth1分配给名称空间
ip link set veth1 netns nsx
configurationveth的IP
ip addr add 10.0.2.10/24 dev vbr0 ip addr add 10.0.2.1/24 dev veth0 ip netns exec nsx ip addr add 10.0.2.2/24 dev veth1
带上这个i / f
ip link set dev vbr0 up ip link set dev veth0 up ip netns exec nsx ip link set dev veth1 up
分配veth2自己的路由表
ip netns exec nsx ip rule add dev veth1 table 1
设置vtable的默认路由
ip netns exec nsx ip route add default via 10.0.2.1 dev veth1
您可以在iptables的输出中看到,保存所有设置为ACCEPT或FORWARD
ip addr的输出显示:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:10:e0:01 brd ff:ff:ff:ff:ff:ff inet 192.168.26.5/24 brd 192.168.26.255 scope global eth0 inet 192.168.26.0/24 brd 192.168.26.255 scope global secondary eth0 inet6 fe80::20c:29ff:fe10:e001/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vbr0 state UP qlen 1000 link/ether 00:0c:29:10:e0:ed brd ff:ff:ff:ff:ff:ff inet 10.0.0.1/24 brd 10.0.0.255 scope global eth1 inet6 fe80::20c:29ff:fe10:e0ed/64 scope link valid_lft forever preferred_lft forever 47: veth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether ce:63:69:82:73:35 brd ff:ff:ff:ff:ff:ff inet 10.0.2.1/24 scope global veth0 inet6 fe80::cc63:69ff:fe82:7335/64 scope link tentative valid_lft forever preferred_lft forever 48: vbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 00:0c:29:10:e0:ed brd ff:ff:ff:ff:ff:ff inet 10.0.2.10/24 scope global vbr0 inet6 fe80::20c:29ff:fe10:e0ed/64 scope link tentative valid_lft forever preferred_lft forever
ip route的输出显示:
default via 192.168.26.2 dev eth0 10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.1 10.0.2.0/24 dev vbr0 proto kernel scope link src 10.0.2.10 10.0.2.0/24 dev veth0 proto kernel scope link src 10.0.2.1 192.168.26.0/24 dev eth0 proto kernel scope link src 192.168.26.5
输出ip netns exec nsx ip addr显示:
45: lo: <LOOPBACK> mtu 16436 qdisc noop state DOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 46: veth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether b6:27:40:06:c2:de brd ff:ff:ff:ff:ff:ff inet 10.0.2.2/24 scope global veth1 inet6 fe80::b427:40ff:fe06:c2de/64 scope link tentative valid_lft forever preferred_lft forever
ip netns exec nsx ip route show的输出
default via 10.0.2.1 dev veth1 10.0.2.0/24 dev veth1 proto kernel scope link src 10.0.2.2
输出iptables-save
# Generated by iptables-save v1.4.14 on Thu Apr 14 18:19:19 2016 *nat :PREROUTING ACCEPT [36:3588] :INPUT ACCEPT [32:2540] :OUTPUT ACCEPT [51:3744] :POSTROUTING ACCEPT [55:4792] COMMIT # Completed on Thu Apr 14 18:19:19 2016 # Generated by iptables-save v1.4.14 on Thu Apr 14 18:19:19 2016 *filter :INPUT ACCEPT [3319:373389] :FORWARD ACCEPT [8:2004] :OUTPUT ACCEPT [3558:428447] COMMIT # Completed on Thu Apr 14 18:19:19 2016
从内核版本4.3开始,Linux有一个VRF实现。 结帐: https : //www.kernel.org/doc/Documentation/networking/vrf.txt 。