Traceroute 有效,但 ping 无效

Traceroute 有效,但 ping 无效

我的近期目标是从 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/24IP 地址为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.21172.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.51172.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。

问题

  1. 为什么 traceroute 可以工作,但是 ping 却不行?

  2. 我怎样才能解决这个问题?

  3. 我需要在配置中进行哪些更改才能使发现(FastDDS)与网络上的多播一起工作?

相关内容