Routing

通過 VPN 路由來自一個 docker 容器的流量(由第二個容器提供)

  • September 10, 2019

我需要了解如何讓兩個 docker 容器在這樣的場景下工作:

有一個帶有路由器和客戶端的分支機構。網路為 192.168.190.0/24,地址為 1 和 57。

網際網路上的其他地方有一個虛擬機,其公共 IP XYZK 和安裝在頂部的 docker 環境。裡面有兩個容器。第一個是僅面向地址為 192.168.80.2 的專用網路的 Web 伺服器。另一個容器與地址為 192.168.80.44 的專用網路連接,並將其在另一個網路介面上的 1194 埠暴露給公共 IP。

我需要能夠讓 192.168.190.57 打開 192.168.80.2 上的頁面。

VPN 部分工作正常(路由器連接並可以從客戶端 ping),我不需要幫助。

這是我的 docker-compose 文件的模型。

version: '2'
services:

 openvpn:
   image: mycompany/openvpn
   restart: 'always'
   cap_add:
     - NET_ADMIN
   ports:
     - '1194:1194/udp'
   networks:
     nat:
     private_net:
         ipv4_address: '192.168.80.44'

 coredns:
   image: 'nginx'
   restart: 'always'
   links:
     - openvpn:private_net_vpn
   networks:
     private_net:
       ipv4_address: '192.168.80.2'

networks:
 private_net:
   internal: true
   ipam:
     config:
       - subnet: '192.168.80.0/24'
 nat:

之前描述的場景

最後我發現了這個問題。

預設情況下,如果您定義一個網路internal: true,則意味著將製定一些 iptables 規則來阻止 lan 網段上的所有容器離開它。

一開始我以為這只是從 192.168.80.2 到 192.168.80.1(分配給該 lan 段的主機的 IP)然後到 Internet 的路由。仔細閱讀所有 iptables 規則,我發現轉發也被禁用。

刪除internal: true允許容器按預期通過 VPN 路由,代價是允許 Web 伺服器直接訪問公共網際網路。

引用自:https://serverfault.com/questions/982449