我试图在Xubuntu18.04中使用VRF,但在多播IP地址方面,我运气不佳。我一直使用https://www.kernel.org/doc/Documentation/networking/vrf.txt作为指导方针。
这是我的设计:
sudo ip addr add 192.168.0.1/24 dev enp0s8
sudo ip li set dev enp0s8 up
sudo ip link add vrf-blue type vrf table 10
sudo ip link set dev vrf-blue up
sudo ip link set dev enp0s8 master vrf-blueip a的输出如下:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 08:00:27:0c:19:91 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vrf-blue state UP group default qlen 1000
link/ether 08:00:27:5e:ed:76 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 scope global enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe5e:ed76/64 scope link
valid_lft forever preferred_lft forever
4: vrf-blue: <NOARP,MASTER,UP,LOWER_UP> mtu 65536 qdisc noqueue state UP group default qlen 1000
link/ether 8a:f6:90:1c:c1:1e brd ff:ff:ff:ff:ff:ffip route show table 10的输出:
default via 192.168.0.2 dev enp0s8
broadcast 192.168.0.0 dev enp0s8 proto kernel scope link src 192.168.0.1
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.1
local 192.168.0.1 dev enp0s8 proto kernel scope host src 192.168.0.1
broadcast 192.168.0.255 dev enp0s8 proto kernel scope link src 192.168.0.1 当我平一个本地地址时,我可以通过运行tcpdump -I vrf-blue和tcpdump -I enp0s8在接口和VRF主设备上看到ICMP数据包,但是如果我平了一个多播地址,我只能看到在VRF上运行的捕获上的数据包,而不是接口。我尝试过在VRF上设置多播标志,但效果很小。
ping 224.0.0.1 -I vrf-blue
ping 192.168.0.2 -I vrf-blue据我了解,组播平应该在任何附在VRF上的接口上发送,有人能告诉我吗?
发布于 2018-07-25 12:24:53
我在论坛上发布了同样的问题;David (内核中许多VRF代码的作者)回答道:
IPv4多播数据包可以在VRF设备上接收--这是用户利用的意外副作用,因此无法进行更改。通常,多播和链路本地(IPv6)是指绑定到真正的设备,而不是VRF设备。也就是说,包的传输必须在被奴役的装置上进行。试图通过VRF设备将数据包发送到mcast地址的每个被奴役设备不会被复制。或者至少我记得是这样运作的。
现在,我可以在v4.17上使用套接字绑定到接口,而不是在发送多播IP时使用VRF。
https://unix.stackexchange.com/questions/457559
复制相似问题