Linux VRF 和组播 IP

Linux VRF 和组播 IP

我尝试在 Xubuntu 18.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-blue

的输出ip 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:ff

的输出ip 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当我 ping 本地地址时,我可以通过运行和查看接口和 VRF 主设备上的 ICMP 数据包,tcpdump -I enp0s8但是,如果我 ping 多播地址,我只能看到在 VRF 上运行的捕获上的数据包不是界面。我尝试在 VRF 上设置多播标志,但效果甚微。

ping 224.0.0.1 -I vrf-blue
ping 192.168.0.2 -I vrf-blue

据我了解,多播 ping 应该在连接到 VRF 的任何接口上发送,有人可以建议吗?

答案1

我在 Cumulus Networks 论坛上发布了同样的问题; David Ahern(内核中大部分 VRF 代码的作者)回答道:

IPv4 多播数据包可以在 VRF 设备上接收,这是用户无意中产生的副作用,因此无法进行更改。一般来说,多播和链路本地 (IPv6) 旨在绑定到真实设备,而不是 VRF 设备。这意味着,数据包传输必须在从属设备上完成。尝试通过 VRF 设备将数据包发送到多播地址不是每个从属设备复制。

或者至少我记得它是这样工作的。

我现在在 v4.17 上使用此功能,当发送多播 IP 时,套接字绑定到接口而不是 VRF。

相关内容