我需要了解如何使两个 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 服务器直接访问公共互联网。