16

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

4

4 回答 4

5

我真的很喜欢 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,但如果LocalLanAccess在您的 VPN 配置文件中启用,您可能会获得更好的体验。

于 2017-10-05T12:24:34.280 回答
2

以下对我有用。

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

于 2017-08-30T09:10:11.287 回答
1

Docker 默认在路由表中添加一个条目,该条目通过环回地址转发所有目的地为 172.17.XX 的流量。在您的情况下,如果 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 步骤的文章,请点击此处

于 2020-08-26T11:46:21.757 回答
0

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

于 2018-05-15T13:00:13.383 回答