Routing
通過 VPN 路由來自一個 docker 容器的流量(由第二個容器提供)
我需要了解如何讓兩個 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 伺服器直接訪問公共網際網路。