无法连接到 Anyconnect *** 上的 docker
Posted
技术标签:
【中文标题】无法连接到 Anyconnect *** 上的 docker【英文标题】:Unable to connect to docker on Anyconnect *** 【发布时间】:2017-06-04 00:39:10 【问题描述】:我在 windows 上使用 docker 工具箱进行 docker 相关的开发。当我在家庭或办公室网络上时这工作正常,但当我使用 anyconnect *** 连接到办公室网络时不起作用。请让我知道是否可以更改网络设置以使其正常工作。
【问题讨论】:
【参考方案1】:以下内容对我有用。
尝试使用 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 将连接添加到您的 *** 提供商并连接。 (NetworkManager -> 编辑连接 -> 添加。然后选择连接类型为 *** -> Cisco Annyconnect)
重新启动并重新连接,现在 docker 容器应该可以访问互联网了。
【讨论】:
这对我有用。我不知道为什么 AnyConnect 应用程序不起作用,但我的时间比排除 *** 连接故障要好:)【参考方案2】:我真的很喜欢 OpenConnect(它支持比 network-manager-openconnect 更多的配置选项)。即使是需要 csd-wrapper 的可怕安装通常也能正常工作。
AnyConnect 以一种奇怪的方式破坏了 docker 网络,即使在您退出 *** 后(即使您之后停止 ***agentd),它们也会保持断开状态。
解决方法是停止 docker,清除其所有网络和网桥,然后才启动 AnyConnect ***。您可以在 *** 会话结束后启动 docker,它将重新创建所有必要的东西。
我创建了一个脚本来解决这种不幸的行为:
#!/bin/sh
# usage:
# ***.sh [start]
# ***.sh stop
if [ "$1" = "stop" ]; then
/opt/cisco/anyconnect/***/*** disconnect
sudo systemctl stop ***agentd
echo "Cisco *** 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 ***"
sudo systemctl start ***agentd
/opt/cisco/anyconnect/***/*** connect '***-NAME'
fi
注意:*** 管理员可以阻止您使用 OpenConnect 并强制您仅使用 Cisco AnyConnect,但如果在您的 *** 配置文件中启用LocalLanAccess
,您可能会获得更好的体验。
【讨论】:
【参考方案3】:您可以配置本地路由表。
通常 docker_endpoint 是 192.168.x.x,为了让它去本地网络而不是 ***,你可以添加如下路由规则。
route add 192.168.0.0 mask 255.255.0.0 192.168.0.1 -p
-p 表示永久添加。
然后运行以下命令以查看它是否已设置。
route print
【讨论】:
【参考方案4】:Docker 默认会在路由表中添加一个条目,该条目会通过环回地址转发目标为 172.17.X.X 的所有流量。在您的情况下,如果 AnyConnect 分配给您的计算机的 IP 地址以 172.17 开头,则两个子网重叠并且 Docker 冻结 *** 连接(您可以通过查看由 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。
【讨论】:
以上是关于无法连接到 Anyconnect *** 上的 docker的主要内容,如果未能解决你的问题,请参考以下文章
使用 Cisco *** AnyConnect 时无法让 docker-machine 与 virtualbox 一起使用
如何连接到谷歌计算引擎上的远程 PostgreSQL 服务器?