我在Windows上使用Docker Toolbox进行Docker相关开发。当我在家庭或办公网络上时,这很正常,但是当我使用AnyConnect VPN连接到办公网络时,它就不能工作了。请告诉我是否有可以更改的网络设置来使其工作。
我在Windows上使用Docker Toolbox进行Docker相关开发。当我在家庭或办公网络上时,这很正常,但是当我使用AnyConnect VPN连接到办公网络时,它就不能工作了。请告诉我是否有可以更改的网络设置来使其工作。
我特别喜欢OpenConnect(比network-manager-openconnect支持更多的配置选项)。即使需要csd-wrapper的丑陋安装通常也运行良好。
AnyConnect以奇怪的方式破坏Docker网络,即使在退出VPN后它们仍然无法使用(即使在之后停止vpnagentd)。
解决方法是停止docker,清除其所有网络和桥接,并仅在此之后开始AnyConnect VPN。 在VPN会话结束后可以启动docker,它将重新创建所有必要的内容。
我创建了一个脚本来解决这个不幸的行为,正是这样做:
#!/bin/sh
# usage:
# vpn.sh [start]
# vpn.sh stop
if [ "$1" = "stop" ]; then
/opt/cisco/anyconnect/vpn/vpn disconnect
sudo systemctl stop vpnagentd
echo "Cisco VPN stopped"
echo "Starting docker"
sudo systemctl start docker
else
echo "Stopping docker"
sudo systemctl stop docker
bridges=$(sudo brctl show | cut -f1 | tail -n +2)
for b in $bridges; do
sudo nmcli connection delete $b
sudo ip link set dev $b down
sudo brctl delbr $b
done
echo "Starting Cisco VPN"
sudo systemctl start vpnagentd
/opt/cisco/anyconnect/vpn/vpn connect 'VPN-NAME'
fi
注意:VPN管理员可以阻止您使用OpenConnect,并强制您仅使用Cisco AnyConnect,但如果VPN配置文件中启用了LocalLanAccess
,您可能会获得更好的使用体验。
{
"default-address-pools":
[
{"base":"10.10.0.0/16","size":24}
]
}
在进行这些配置更改后,重新启动Docker服务并验证是否已设置新的子网(您可以使用 netstat -rn
)。
有关Linux步骤的文章在这里。
sudo apt install openconnect
sudo apt install network-manager-openconnect
然后(至少适用于Ubuntu 16),请注释掉dns=dnsmasq
这一行,使它变成以下形式:
$ cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq
然后使用NetworkManager添加一个连接到您的VPN提供商并连接。(NetworkManager->编辑连接->添加。然后选择连接类型为VPN->Cisco Annyconnect)
重新启动并重新连接,现在Docker容器应该可以访问互联网了。
route add 192.168.0.0 mask 255.255.0.0 192.168.0.1 -p
-p 表示将其永久添加。然后运行以下命令查看是否设置成功。
route print
我曾经遇到过完全相同的问题——在 Cisco Anyconnect VPN 下,Docker 容器网络无法工作。 我尝试了很多在线发布的解决方案——启用 Cisco Anyconnect 的本地 LAN 地址、更新 IP 路由表等等。 但是,这些方法对我都没有起作用。 后来,我安装了 Docker Desktop 应用程序,该应用程序包含在 Linux 中。 打开 Docker Desktop 应用程序后,我重新启动了所有容器,容器网络恢复正常并开始工作。
我知道这个问题有些老了,但如果您在谷歌上搜索docker cisco vpn相关问题的话,这是第一个stackoverflow的结果。 由于我最近几天也遇到了这个问题,并且我在网上找到的所有解决方案都不能解决我的问题,所以我想在这里分享我的解决方案。
# Some setup at first, skip if you already have those..
sudo apt-get install ca-certificates curl gnupg lsb-release
# add key and sources
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# install docker
sudo apt-get update \
&& sudo apt-get install docker-ce docker-ce-cli containerd.io
# disable docker services
sudo systemctl disable --now docker.service docker.socket
# setup docker for rootless usage and switch to that context
dockerd-rootless-setuptool.sh install
docker context use rootless
# add the following to your bashrc or zshrc and source it ofc
export DOCKER_HOST=unix:///run/user/1000/docker.sock
# user start the docker service again (no sudo)
systemctl --user start docker
希望这能至少帮助到某个人。