[英]Docker Desktop Windows and VPN - no network connection inside container
我正在尝试在连接到 VPN 时在 Windows 上使用 Docker。
当 VPN 未连接时,一切正常。
但是当我使用 Cisco AnyConnect 客户端连接到我们的公司 VPN 时,docker 容器内的网络不再工作:
docker run alpine ping www.google.com
ping: bad address 'www.google.com'
docker run alpine ping -c 5 216.58.204.36
PING 216.58.204.36 (216.58.204.36): 56 data bytes
--- 216.58.204.36 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss
如何解决此问题并使其正常工作?
我的设置是:
实际上,我是使用 Docker 桌面和 Hyper-V 虚拟机完成的。 使用 OpenConnect,但我认为大多数 VPN 客户端只需稍作调整即可完成。
完整解释的说明在这里Docker 桌面、Hyper-V 和 VPN以及 Docker 容器、Windows VM 和 Linux VM 的设置
我创建了一个新的内部虚拟交换机(我们称之为“内部”)并为其分配了一个静态 IP 地址(假设为 192.168.4.2)
我使用 Ubuntu 服务器和 OpenConnect 创建了一个新 VM,连接到默认虚拟交换机和“内部”
在 OpenConnect 虚拟机上
分配给“内部”一个固定 ip (192.168.4.3)
添加了一个新的 tun 接口“persistent”,告诉 openconnect 使用该 tun(添加“-i tun0”参数作为 openconnect 启动参数)
sudo ip tuntap 添加名称 tun0 模式 tun
安装了persist-iptables
强制ip转发
须藤回声“net.ipv4.ip_forward=1”>> /etc/sysctl.conf && sysctl -p
设置路由
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE sudo iptables -A FORWARD -i eth0 -o tun0 -j 接受 sudo iptables -A FORWARD -o tun0 -j 接受 sudo iptables -A FORWARD -i contun0 --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -A INPUT -i tun0 -j ACCEPT
连接 vpn 后,我将 dns 服务器永久添加到了 resolve.conf
和检索类的VPN的地址(类似10。*)
在 Docker 容器上
在 Dockerfile 上添加了基本路由
运行路由添加 -net 10.0.0.0 网络掩码 255.0.0.0 gw 192.168.4.3
然后运行 docker 文件,我添加了 dns,授予 net admin 和 sys 模块权限
--dns 8.8.8.8 --dns 10.1.77.21 --dns 10.4.52.21 --dns-search test.dns.it
--cap-add=NET_ADMIN --cap-add=SYS_MODULE
在我的 VPN (AnyConnect) 运行时,我必须从 PowerShell(管理员模式)运行以下命令:
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.