主机可以 ping 通 vpn 中的主机,但 docker 容器无法 ping 通 vpn 中的任何主机。
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.100.1 0.0.0.0 UG 600 0 0 wlan0
3.210.122.60 192.168.100.1 255.255.255.255 UGH 0 0 0 wlan0
172.17.0.0 192.168.100.86 255.255.0.0 UG 0 0 0 wlan0
172.18.0.0 192.168.100.86 255.255.0.0 UG 0 0 0 wlan0
172.19.0.0 192.168.100.86 255.255.0.0 UG 0 0 0 wlan0
172.20.0.0 192.168.100.86 255.255.0.0 UG 0 0 0 wlan0
172.21.0.0 192.168.100.86 255.255.0.0 UG 0 0 0 wlan0
172.22.0.0 192.168.100.86 255.255.0.0 UG 0 0 0 wlan0
172.23.0.0 192.168.100.86 255.255.0.0 UG 0 0 0 wlan0
172.24.0.0 192.168.100.86 255.255.0.0 UG 0 0 0 wlan0
172.25.0.0 192.168.100.86 255.255.0.0 UG 0 0 0 wlan0
172.26.0.0 192.168.100.86 255.255.0.0 UG 0 0 0 wlan0
172.41.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.100.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan0
tcdump 显示 ping 到达 VPN,并返回主机,但没有返回容器。我认为主机不知道如何处理从 VPN 收到的数据包。
我尝试了一些 iptables 规则,但无济于事。除了 tcpdump 之外,无法进行其他调试...
$ docker --version
Docker version 18.03.1-ce, build 9ee9f40
$ cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
答案1
更改主机上的网络(包括连接到 VPN)后,尝试重新启动 docker 守护进程 ( systemctl restart docker
)。守护进程在首次启动时会配置各种 iptables 规则,当新网络连接到主机时,这些规则可能无法正常工作。