我的阿里云账号下有三台服务器:
深圳 可用区 D
A:Ubuntu 服务器,内网:172.28.119.31
B:Windows 服务器,内网:172.28.119.32
深圳 可用区 E
C:Ubuntu 服务器,内网:172.17.230.3
三台服务器在同一个 VPC 专有网络下,也在同一个安全组下。按照 阿里云官方说明,三台服务器是默认内网互通的。
问题
A 和 C 之间内网无法 ping 通,但是 A 和 C 内网都能 ping 通 B。
检查
查看 A 服务器路由表:
root@ubuntu-20220304:~# route -n | |
Kernel IP routing table | |
Destination Gateway Genmask Flags Metric Ref Use Iface | |
0.0.0.0 172.28.127.253 0.0.0.0 UG 100 0 0 eth0 | |
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 | |
172.21.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-72f5d0a4f9cd | |
172.22.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-bf5ce375897e | |
172.28.112.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0 | |
172.28.127.253 0.0.0.0 255.255.255.255 UH 100 0 0 eth0 |
查看 C 服务器路由表:
root@ubuntu-20220616:~# route -n | |
Kernel IP routing table | |
Destination Gateway Genmask Flags Metric Ref Use Iface | |
0.0.0.0 172.17.239.253 0.0.0.0 UG 100 0 0 eth0 | |
172.17.224.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0 | |
172.17.239.253 0.0.0.0 255.255.255.255 UH 100 0 0 eth0 |
发现 A 服务器路由表里 172.17.0.0
被 docker 占用,而 C 服务器 IP 正好是 172.17.230.3
。
查看 docker bridge 网络配置:
{ | |
"Name": "bridge", | |
"Id": "fdd7ac1fee6e82486d42e53d8a3cce1164411b65de6a963bf5342aab019f7f7e", | |
"Created": "2022-06-16T13:22:29.147640187+08:00", | |
"Scope": "local", | |
"Driver": "bridge", | |
"EnableIPv6": false, | |
"IPAM": { | |
"Driver": "default", | |
"Options": null, | |
"Config": [ | |
{ | |
"Subnet": "172.17.0.0/16", | |
"Gateway": "172.17.0.1" | |
} | |
] | |
}, | |
"Internal": false, | |
"Attachable": false, | |
"Ingress": false, | |
"ConfigFrom": { | |
"Network": "" | |
}, | |
"ConfigOnly": false, | |
"Containers": {}, | |
"Options": { | |
"com.docker.network.bridge.default_bridge": "true", | |
"com.docker.network.bridge.enable_icc": "true", | |
"com.docker.network.bridge.enable_ip_masquerade": "true", | |
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", | |
"com.docker.network.bridge.name": "docker0", | |
"com.docker.network.driver.mtu": "1500" | |
}, | |
"Labels": {}, | |
"CreatedTime": 1655356949147 | |
} |
解决
方案一
添加 A 服务器路由:
$ route add -net 172.17.230.0/24 gw 172.28.127.253 dev eth0
这是临时方案,重启服务器会失效。
方案二
更换 C 服务器虚拟交换机,使用其他内网网段
方案三
更换 A 服务器 docker 的默认网段
编辑 /etc/docker/daemon.json
(不存在则创建一个)
$ vim /etc/docker/daemon.json
添加以下代码:
{ | |
"bip": "172.20.0.1/16" | |
} |
重启 docker 服务:
$ systemctl restart docker