Docker容器无法通过Cisco VPN访问互联网

9

我的设备:

  • Linux Mint 20
  • Docker版本19.03.12
  • Cisco AnyConnect 4.3.05017

我的问题:

当我连接到公司的VPN时,我无法通过我的docker容器访问互联网。 例如运行docker run -it ubuntu apt update会失败,并显示以下错误信息:“Err:1 http://archive.ubuntu.com/ubuntu focal InRelease
Temporary failure resolving 'archive.ubuntu.com'

断开VPN连接不能解决这个问题。(见解决方法#2)

我有两种解决方法:

  1. 使用docker run -it --net=host ubuntu apt update命令运行docker,这可以正常工作,但对于我的公司脚本和构建系统来说不是一个适合的解决方法。它只适合临时任务。
  2. 断开VPN连接并运行以下脚本(来自https://github.com/moby/moby/issues/36151):
# /bin/bash
docker system prune -a
systemctl stop docker
iptables -F
ip link set docker0 down
brctl delbr docker0
systemctl start docker

我尝试让Docker重新工作,但这样一来我就无法访问我的公司内部服务器,而这也是构建我们软件所必需的。

我尝试过以下几种方法:


我从未找到解决这个问题的好方法。我通过不使用Cisco Anyconnect客户端来找到了一个解决方法。相反,我配置了openconnect以与公司的VPN终端配合使用。这需要花费相当多的工作量,我也不建议采用这种方法。 - F. Hansen
2个回答

1
在我的机器上(Ubuntu)使用Cisco AnyConnect和Docker,我发现VPN与iptables不正确地配合工作,因此我的桥接网络无法正常工作。
解决方法是添加以下规则:
 iptables -I FORWARD -i docker0 -j ACCEPT
 iptables -I FORWARD -o docker0 -j ACCEPT

docker0是默认的Docker桥接网络名称,对于自定义网络,您需要将“docker0”替换为网络接口名称。通常这个名称以“br-”开头。


0

要实现这一点,您需要在 Cisco AnyConnect 中启用“允许在使用 VPN(如果已配置)时进行本地(LAN)访问”的设置。

cisco-anyconnect-preferences-window

但是,由于安全策略的原因,有些公司不允许这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接