我无法弄清楚我配置错误的地方。我无法将数据包从 velodyne 返回到具有 2 个 eth 接口 em1 和 em2 的 Fedora 服务器上。我已使用 eth 电缆将 velodyne 连接到 em1 主机。
我知道 velodyne 正在 2368 上发送 UDP 数据包,我可以在 wireshark 上看到它们。我知道 velodyne 正在做出反应,因为它响应了 ping:
ping 192.168.0.27
PING 192.168.0.27 (192.168.0.27) 56(84) bytes of data.
64 bytes from 192.168.0.27: icmp_seq=1 ttl=64 time=1.36 ms
64 bytes from 192.168.0.27: icmp_seq=2 ttl=64 time=0.521 ms
64 bytes from 192.168.0.27: icmp_seq=3 ttl=64 time=0.353 ms
64 bytes from 192.168.0.27: icmp_seq=4 ttl=64 time=0.485 ms
它在 255.255.255.255 上写出广播 UDP 数据报。em1 上的主机地址是 192.168.0.200。velodyne 是 192.168.0.67
ifconfig -a
em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.200 netmask 255.255.0.0 broadcast 192.168.255.255
inet6 fe80::222:19ff:feab:d328 prefixlen 64 scopeid 0x20<link>
ether 00:22:19:ab:d3:28 txqueuelen 1000 (Ethernet)
RX packets 20457575 bytes 24210246456 (22.5 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 52 bytes 6272 (6.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
以下是路由表:
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 131.135.134.240 0.0.0.0 UG 0 0 0 em2
131.135.134.0 0.0.0.0 255.255.255.0 U 0 0 0 em2
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 em1
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 em2
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 em1
192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 em1
我启动了一个 C UDP 套接字,但它仍未连接
netstat -an | grep udp
udp 0 0 192.168.0.200:2368 0.0.0.0:*
udp 0 0 0.0.0.0:43329 0.0.0.0:*
udp 0 0 0.0.0.0:43348 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
ss -l | grep 2368
tcp UNCONN 0 0 192.168.0.200:ipproto-2368 *:*
以下是从 velodyne 的 IP/TCP/UDP 数据包中提取的标头:
Ethernet II, Src: Velodyne_20:13:62 (60:76:88:20:13:62), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
1 0.000000000 192.168.0.27 255.255.255.255 UDP 1248 Source port: opentable(2368)
Destination port: opentable (2368)
User Datagram Protocol, Src Port: opentable (2368), Dst Port: opentable (2368)
我做错了什么?同时启用 IPV4 和 IPV6 接口有关系吗?还有其他方法可以将主机添加到路由表吗?
答案1
我首先要检查的是,防火墙是否阻止了传入的 UDP 数据报。如果您可以在 Wireshark 中看到它们,但它们却无法到达应用程序,那么这很可能表明有东西阻止了它们。
如果不了解你的服务器的更多信息,很难确切地说出是什么导致了阻塞,但是作为一个 Fedora 系统,最有可能的是网络过滤器,它是 Linux 内核的一部分。
您可以使用(以 root 身份)检查入站连接的防火墙规则iptables -vL INPUT
,也可以使用 Fedora 的 GUI 运行system-config-firewall
以下命令查看详细信息:在 Fedora 文档中。
如果您想向表中添加一条规则以允许此类流量进入您的系统,我会使用以下命令:
sudo iptables -t filter -A INPUT -i em1 -p udp --dport 2368 -j ACCEPT
答案2
解决了;
不确定是否是以下全部或部分;
我将 selinux 设置为最低;
我添加了您的 ACCEPT 规则,然后将此行添加到 iptables
iptables -t raw -I PREROUTING 1 -p udp --dport 2368 -j NOTRACK
并且我卸载了netfilter_conntrack。
看来 libnfnet_conntrack 和 kmod nf_conntrack 是问题的一部分,因为那是最后一个改变。