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 可以工作。
据此,其他人注意到“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
| 归档时间: |
|
| 查看次数: |
5789 次 |
| 最近记录: |