无法连接到Anyconnect VPN上的Docker

jchrr9hc  于 2023-04-05  发布在  Docker
关注(0)|答案(6)|浏览(148)

我正在使用Windows上的Docker工具箱进行Docker相关的开发。当我在家庭或办公室网络上时,此功能正常工作,但当我使用Anyconnect VPN连接到办公室网络时,此功能不起作用。请让我知道是否可以更改网络设置以使其工作。

cngwdvgl

cngwdvgl1#

我真的很喜欢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,您可能会获得更好的体验。

mw3dktmi

mw3dktmi2#

下面这些对我很有效。
尝试使用OpenConnect而不是Anyconnect:

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容器应该可以访问互联网。

pftdvrlh

pftdvrlh3#

Docker默认会在路由表中添加一个条目,该条目会通过环回地址转发目的地为172.17.X.X的所有流量。在您的示例中,如果AnyConnect分配给您的计算机的IP地址以172.17开头,则两个子网重叠,Docker将冻结vpn连接(你可以通过查看anyconnect分配给你的IP并将其与docker机器的路由表进行比较来检查)。
如果是这种情况,您可以通过将以下内容添加到**%programdata%\docker\config\daemon.json**来更改Docker使用的默认子网

{
  "default-address-pools":
  [
    {"base":"10.10.0.0/16","size":24}
  ]
}

在这些配置更改之后,重新启动Docker服务并验证新的子集已经设置(您可以使用netstat -rn)。
Linux here中的步骤。

1bqhqjot

1bqhqjot4#

你可以配置你的本地路由表。通常docker_endpoint是192.168.x.x,为了让它去本地网络而不是vpn,你可以添加路由规则如下。route add 192.168.0.0 mask 255.255.0.0 192.168.0.1 -p-p表示永久添加。然后运行下面的命令看看是否设置。route print

ibps3vxo

ibps3vxo5#

我遇到了完全相同的问题- Docker容器网络在Cisco Anyconnect VPN下无法工作。我尝试了网上发布的一堆解决方案-从Cisco Anyconnect启用本地LAN地址,更新IP路由表等。绝对没有对我起作用。然后,我安装了Docker桌面应用程序,可用于Linux包括。随着Docker桌面应用程序打开,我重新启动了我所有的容器,容器网络重新在线并工作。

9o685dep

9o685dep6#

我知道这个问题有点老了..但它的第一个stackoverflow击中如果你谷歌docker思科vpn相关问题.因为我有我的问题,这个问题自己在过去几天,我发现网上似乎没有工作,我想在这里分享我的解决方案.

# 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

希望这至少能帮助到一些人。

相关问题