在 Fedora 30 上,我尝试在同一主机上的另一个进程中查看多播数据包。使用 netstat、iperf 和 tcpdump,我已验证该组已加入并且数据包已发送到多播地址,但服务器模式的 iperf 从未收到任何内容。
当我在另一个网络(我没有设置)上的另一台机器(CentOS 7)上尝试此操作时,我看到数据包离开,但没有看到数据包返回,但服务器 iperf 确实打印出收到的数据包。我猜这是内核的问题,但我该如何启用它?
以下是一些终端会话:
jnordwick@jnkde ~ iperf -s -u -B 226.94.1.1 -i 1
------------------------------------------------------------
Server listening on UDP port 5001
Binding to local address 226.94.1.1
Joining multicast group 226.94.1.1
Receiving 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
另一个终端
jnordwick@jnkde ~ netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 all-systems.mcast.net
eno1 1 226.94.1.1
现在正在发送数据包
jnordwick@jnkde ~ iperf -c 226.94.1.1 -u -T 32 -t 3 -i 1
------------------------------------------------------------
Client connecting to 226.94.1.1, UDP port 5001
Sending 1470 byte datagrams, IPG target: 11215.21 us (kalman adjust)
Setting multicast TTL to 32
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.2.155 port 47755 connected with 226.94.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 131 KBytes 1.07 Mbits/sec
[ 3] 1.0- 2.0 sec 128 KBytes 1.05 Mbits/sec
[ 3] 0.0- 3.0 sec 385 KBytes 1.05 Mbits/sec
[ 3] Sent 268 datagrams
服务器端性能中没有出现任何内容,但如果我在另一个网络上运行完全相同的命令,我可以看到:
[jnordwick@network2 ~]$ iperf -s -u -B 226.94.1.1 -i 1
------------------------------------------------------------
Server listening on UDP port 5001
Binding to local address 226.94.1.1
Joining multicast group 226.94.1.1
Receiving 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 226.94.1.1 port 5001 connected with 204.2.57.7 port 58971
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0- 1.0 sec 129 KBytes 1.06 Mbits/sec 0.000 ms 0/ 90 (0%)
[ 3] 1.0- 2.0 sec 128 KBytes 1.05 Mbits/sec 0.001 ms 0/ 89 (0%)
[ 3] 2.0- 3.0 sec 128 KBytes 1.05 Mbits/sec 0.001 ms 0/ 89 (0%)
[ 3] 0.0- 3.0 sec 385 KBytes 1.05 Mbits/sec 0.001 ms 0/ 268 (0%)
tcpdump 确认 igmp 加入并且数据包已发送。我转储了所有可能的接口(包括绑定接口及其从属接口),我可以看到多播数据包从哪个接口发出,但没有任何数据包返回。我认为这是内核问题,因为我认为交换机通常不会将多播/广播流量发送回发送主机。
答案1
这似乎是一个防火墙问题,我尝试过的任何 ipchains 都没有用,但这个有用。
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 \
-m pkttype --pkt-type multicast -j ACCEPT
另外,关闭防火墙也有效:
systemctl stop firewalld