我的近期目标是从 LAN 上的设备 ping 到 WSL2 上的 Ubuntu 22.04。
语境
我正在学习使用 ROS2。它允许通过 FastDDS 在不同的机器上进行实例通信。一旦设置好,它应该会相当方便。由于我不知道如何在我的环境中设置它,所以我问FastDDS:WSL2 和 Raspberry Pi 之间的 demo_nodes_cpp。总结:FastDDS 默认情况下不起作用,所以我开始研究如何让它工作。上面链接的对话让我绕过了发现其他 ROS2 实例的默认方式,而是配置了一个发现服务器。这可行,但现在我想找到一个不使用 WireGuard VPN 的解决方案。我相信只要设置正确,这就可以实现。我希望这也可能是一种找出如何路由多播包的方法。
现状
我有一个运行 Ubuntu 22.04 的 RasPi,通过子网上的 WiFi 连接,192.168.178.0/24
IP 地址为192.168.178.21
。
我的 Windows 10 PC 有 IP 192.168.178.51
。
WSL2 使用172.27.112.1
子网上的地址公开其适配器172.27.112.0/20
。在 WSL2 上运行的 Ubuntu 22.04 具有该地址172.127.124.243
。
我的 fritz.box 路由器正在192.168.178.1
运行。我已将其配置为172.27.112.0/20
通过网关进行路由192.168.178.51
。从192.168.178.21
到172.27.112.1
执行 ping 操作有效:
[192.168.178.21]$ ping 172.27.112.1
PING 172.27.112.1 (172.27.112.1) 56(84) bytes of data.
From 192.168.178.1 icmp_seq=1 Redirect Host(New nexthop: 192.168.178.51)
64 bytes from 172.27.112.1: icmp_seq=1 ttl=127 time=5.46 ms
...
但是,从 到 ping192.168.178.21
不起作用172.27.124.243
:
[192.168.178.21]$ ping 172.27.124.243
PING 172.27.124.243 (172.27.124.243) 56(84) bytes of data.
From 192.168.178.1 icmp_seq=1 Redirect Host(New nexthop: 192.168.178.51)
^C
--- 172.27.124.243 ping statistics ---
5 packets transmitted, 0 received, +1 errors, 100% packet loss, time 4063ms
这让我很困惑,因为 traceroute from192.168.178.21
到 是172.27.124.243
有效的:
[192.168.178.21]$ traceroute 172.27.124.243
traceroute to 172.27.124.243 (172.27.124.243), 30 hops max, 60 byte packets
1 DESKTOP-XXXXXXX.fritz.box (192.168.178.51) 1.925 ms * *
2 172.27.124.243 (172.27.124.243) 3.348 ms 2.353 ms 3.321 ms
甚至还可以 ping 从192.168.178.51
到172.27.124.243
:
[192.168.178.51]$ ping 172.27.124.243
Pinging 172.27.124.243 with 32 bytes of data:
Reply from 172.27.124.243: bytes=32 time<1ms TTL=64
...
172.27.124.243
此外,从到 的另一个方向的 ping 操作也可以正常进行192.168.178.21
:
[172.27.124.243]$ ping 192.168.178.21
PING 192.168.178.21 (192.168.178.21) 56(84) bytes of data.
64 bytes from 192.168.178.21: icmp_seq=1 ttl=63 time=98.6 ms
64 bytes from 192.168.178.21: icmp_seq=2 ttl=63 time=2.19 ms
我已经读过 traceroute 不会对超级用户但这仍然让我困惑。
编辑:防火墙开启172.27.124.243
:
[172.27.124.243]$ sudo iptables -L
[sudo] password for user:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere icmp echo-request
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
在 Windows 上,我已将防火墙配置为允许所有传入的 ICMPv4 包。虽然这不会影响其他机器上的 ping。我还将其设置Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter
为 1。
问题
为什么 traceroute 可以工作,但是 ping 却不行?
我怎样才能解决这个问题?
我需要在配置中进行哪些更改才能使发现(FastDDS)与网络上的多播一起工作?