无法从 Windows 主机中的 linux docker 跟踪路由

use*_*170 6 traceroute docker docker-network

我已经安装了 18.04 ubuntu docker 映像,并在其中安装了以下软件包:

 apt-get install traceroute
 apt-get install net-tools
 apt-get install iputils-ping
 apt-get install netbase
Run Code Online (Sandbox Code Playgroud)

但是当我使用traceroute时,docker之外的所有数据包似乎都被过滤了:

#traceroute google.com
traceroute to google.com (172.217.16.206), 30 hops max, 60 byte packets

 1  172.17.0.1 (172.17.0.1)  0.397 ms  0.309 ms  0.286 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
Run Code Online (Sandbox Code Playgroud)

有没有解决方法可以使其发挥作用?请注意,在 Windows 主机中,tracert 可以工作。

pas*_*ord 1

据此其他人注意到“traceroute 不适用于在 Docker for Windows 上运行的 Linux 容器”。如果确实是 ICMP 的问题(traceroute 使用 UDP 作为默认协议),您应该能够按照 Traceroute 的文档强制 Traceroute 使用 ICMP 和/或“ICMP ECHO 作为探针”。

这里 192.168.1.254 是运行 Docker for Windows 的 Windows 机器的网关 IP,10.0.0.1 是 Docker 自定义网络的网关:

root@a6b6fc6aa0f5:/usr/local/apache2# traceroute 192.168.1.254
traceroute to 192.168.1.254 (192.168.1.254), 64 hops max
1   10.0.0.1  0.004ms  0.002ms  0.002ms
2   *  *  *
3   *  *  *
Run Code Online (Sandbox Code Playgroud)

应该使用:

root@a6b6fc6aa0f5:/usr/local/apache2# traceroute --icmp 192.168.1.254
traceroute to 192.168.1.254 (192.168.1.254), 64 hops max
  1   10.0.0.1  0.005ms  0.002ms  0.002ms
  2   192.168.1.254  1.217ms  0.984ms  0.853ms
Run Code Online (Sandbox Code Playgroud)

或者:

root@a6b6fc6aa0f5:/usr/local/apache2# traceroute --type=icmp 192.168.1.254
traceroute to 192.168.1.254 (192.168.1.254), 64 hops max
  1   10.0.0.1  0.003ms  0.002ms  0.001ms
  2   192.168.1.254  1.410ms  1.005ms  1.507ms
Run Code Online (Sandbox Code Playgroud)

使用www.google.com作为目标跟踪路由在我的机器上仍然有问题,但最终达到了一些目标。但不完全是“路由”...也许现在是关于 WinNAT、TTL、TCP 转发或一些 Docker 内部参数。

root@f5d952a9119f:/usr/local/apache2# traceroute --icmp www.google.com
traceroute to www.google.com (142.250.74.228), 64 hops max
  1   10.0.0.1  0.019ms  0.002ms  0.002ms
  2   *  *  *
  3   *  *  *
  4   *  *  *
  5   *  *  *
  6   *  *  *
  7   *  *  *
  8   142.250.74.228  8.304ms  7.595ms  7.027ms
Run Code Online (Sandbox Code Playgroud)

版本:traceroute (GNU inetutils) 2.0