无法连接到Anyconnect VPN上的docker

时间:2017-01-19 10:38:19

标签: docker vpn docker-toolbox

我在windows上使用docker工具箱进行与docker相关的开发。当我在家庭或办公室网络时工作正常,但当我使用anyconnect VPN连接到办公室网络时,它不起作用。如果有网络设置可以更改以使其正常工作,请告诉我。

4 个答案:

答案 0 :(得分:1)

我非常喜欢OpenConnect(它支持比network-manager-openconnect更多的配置选项)。即使是需要csd-wrapper的可怕安装通常也能正常工作。

AnyConnect以奇怪的方式打破了泊坞网络,即使您退出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,您可能会获得更好的体验。

答案 1 :(得分:0)

以下对我有用。

尝试使用OpenConnect而不是Anyconnect:

sudo apt install openconnect
sudo apt install network-manager-openconnect

然后注释掉dns=dnsmasq行,所以它变成了这样:

$ cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq

然后使用NetworkManager将连接添加到VPN提供商并进行连接。 (NetworkManager - >编辑连接 - >添加。然后选择连接类型为VPN - > Cisco Annyconnect)

重新启动并重新连接,现在docker容器应该可以访问互联网。

答案 2 :(得分:0)

您可以配置本地路由表。 通常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

答案 3 :(得分:0)

默认情况下,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中的步骤的文章。