簡體   English   中英

"Docker Desktop Windows 和 VPN - 容器內沒有網絡連接"

[英]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

如何解決此問題並使其正常工作?

我的設置是:

  • Windows 10 版本 1809(操作系統內部版本 17763.1098)
  • Docker 桌面社區 2.2.0.4 (43472):引擎 19.03.8、Compose 1.25.4、Kubernetes 1.15.5、Notary 0.6.1、Credential Helper 0.6.3
  • Docker 處於 Windows 容器模式,啟用了實驗性功能(需要同時運行 windows 和 linux 映像)

實際上,我是使用 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 1​​92.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM