通过 VPN(由第二个容器提供)路由从一个 Docker 容器的流量

通过 VPN(由第二个容器提供)路由从一个 Docker 容器的流量

我需要了解如何使两个 Docker 容器在这样的场景下工作:

有一个分支机构,有一台路由器和一台客户端。网络为 192.168.190.0/24,地址为 1 和 57。

其他地方有一台面向互联网的虚拟机,其公共 IP 为 XYZK,并在其上安装了 docker 环境。里面有两个容器。第一个是仅面向私有网络的 Web 服务器,地址为 192.168.80.2。另一个容器连接到私有网络,地址为 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:

之前描述的场景

答案1

最后我发现了这个问题。

默认情况下,如果您定义了一个网络,internal: true则意味着将制定一些 iptables 规则来阻止 LAN 段上的所有容器离开该网络。

一开始我以为这只是从 192.168.80.2 到 192.168.80.1(分配给该局域网段的主机的 IP)再到互联网的路由。仔细阅读所有 iptables 规则后,我发现转发也被禁用了。

删除internal: true允许容器按预期通过 VPN 进行路由的权限,但代价是允许 Web 服务器直接访问公共互联网。

相关内容