我有一个桥接 docker 网络,并希望容器能够通过 CiscoAnyConnect VPN 访问我公司 LAN 上的设备。(即,我希望将流量从路由docker0
到cscotun0
但是,我无法让它工作。
这是我的桥接网络:
[
{
"Name": "bridge",
"Id": "5ec3c7c84c649c1126370d95cfaf7528e54c57a46e6070de02c14f55d7b5a218",
"Created": "2024-04-03T09:25:23.699641867+02: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": {}
}
]
我已开启 IP 转发:
net.ipv4.ip_forward = 1
我可以 ping 通外面的世界:
root@36610d5128e6:/# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=6.50 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=10.7 ms
但不是我的 VPN 上的服务器:
root@36610d5128e6:/# ping 192.168.119.179
PING 192.168.119.179 (192.168.119.179) 56(84) bytes of data.
路线:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.30.214.1 0.0.0.0 UG 600 0 0 wlp4s0
10.30.214.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp4s0
10.30.214.1 0.0.0.0 255.255.255.255 UH 0 0 0 wlp4s0
10.101.7.0 0.0.0.0 255.255.255.0 U 0 0 0 cscotun0
100.79.0.0 0.0.0.0 255.255.0.0 U 0 0 0 cscotun0
100.79.119.2 0.0.0.0 255.255.255.255 UH 0 0 0 cscotun0
100.79.119.3 0.0.0.0 255.255.255.255 UH 0 0 0 cscotun0
100.80.0.0 0.0.0.0 255.255.0.0 U 0 0 0 cscotun0
155.190.67.21 10.30.214.1 255.255.255.255 UGH 0 0 0 wlp4s0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 br-2b540c1d9d5b
172.16.46.0 0.0.0.0 255.255.255.0 U 0 0 0 cscotun0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.119.0 0.0.0.0 255.255.255.0 U 0 0 0 cscotun0
192.168.124.0 0.0.0.0 255.255.255.0 U 0 0 0 cscotun0
192.168.192.0 0.0.0.0 255.255.255.0 U 0 0 0 cscotun0
192.168.219.0 0.0.0.0 255.255.255.0 U 0 0 0 cscotun0
208.67.220.220 10.30.214.1 255.255.255.255 UGH 0 0 0 wlp4s0
208.67.222.222 10.30.214.1 255.255.255.255 UGH 0 0 0 wlp4s0
我尝试了这个:
sudo iptables -t nat -A POSTROUTING -o cscotun0 -j MASQUERADE
sudo iptables -A FORWARD -i cscotun0 -o docker0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i docker0 -o cscotun0 -j ACCEPT
但这没有帮助。我是新手,iptables
所以我可能会遗漏一些东西,例如冲突的配置。显示此输出的相关命令是什么?
关于这种方法有什么提示吗?
答案1
查看帖子 通过 VPN 连接时无法访问 Docker 容器:
我曾遇到过这个问题,并尝试了互联网上所有可能的解决方案,但都不起作用。看起来 Cisco Anyconnect vpn 对系统的路由拥有独占控制权,所做的任何更改都没有效果。
以下方法对我有用。不要使用 Cisco Anyconnect,而是使用 OpenConnect VPN。两者使用相同的协议。下载:
sudo apt install openconnect network-manager-openconnect network-manager-openconnect-gnome
重新启动您的电脑,然后转到 VPN 设置 -> 多协议 VPN 客户端(打开连接)并根据您的组织要求提供设置。