Roteie o tráfego de um contêiner docker por meio de uma VPN (fornecido por um segundo contêiner)

Preciso entender como fazer dois contêineres docker funcionarem com um cenário como este:

Há uma filial com um roteador e um cliente. A rede é 192.168.190.0 / 24 e os endereços são 1 e 57.

Há em outro lugar uma VM voltada para a internet com IP público X. Y. Z. K e o ambiente docker instalado na parte superior.No interior existem dois recipientes. O primeiro é um servidor web voltado apenas para uma rede privada com endereço 192.168.80.2. O outro contêiner tem conexão na rede privada com o endereço 192.168.80.44 e expõe sua porta 1194 na outra interface de rede ao IP público.

Eu preciso ser capaz de fazer 192.168.190.57 abrir as páginas em 192.168.80.2.

A parte VPN funciona bem (o roteador se conecta e pode ser pingado do cliente) e não preciso de ajuda nisso.

Esta é uma maquete para o meu arquivo 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:

Cenário descrito antes

No final, descobri o problema.

Por padrão, se você definir uma rede internal: true isso significa que algumas regras iptables serão promulgadas para impedir que todos os contêineres no segmento lan saiam dele.

No início, pensei que era apenas a rota de, digamos, 192.168.80.2 para 192.168.80.1 (o ip atribuído à máquina host para esse segmento lan) e depois para a internet. Lendo atentamente todas as regras iptables descobri que o encaminhamento também está desativado.

Removendo o internal: true permitiu que o contêiner passasse pela VPN conforme o esperado, ao custo de permitir que o servidor da web acessasse diretamente a internet pública.

Sim, tenho. 192.168.190.57 também pode fazer ping no servidor VPN. Além disso, o servidor VPN pode fazer ping 192.168.80.2.

você pode`` traceroute "’ servidor web do cliente vpn ? também tente “'curl”’, ping pode ser bloqueado no contêiner

Não, eu não era capaz. Nenhum protocolo (icmp, tcp, udp) funcionou da maneira como foi configurado. Mas eu descobri. Mais sobre minha própria resposta abaixo.

Se você olhar atentamente para o esquema na imagem, poderá ver que o contêiner do docker para a VPN é um servidor, não um cliente. Eu não acho que essa imagem funcionaria para mim.

ok, você tem esta entrada em ``push 'route 192.168.80.0 255.255.255.0"` no seu arquivo de configuração do servidor openvpn ?