Roteamento de sub-rede de contêiner de roteamento LXC

Roteamento de sub-rede de contêiner de roteamento LXC

Eu tenho uma caixa CentOS 7 com 2 NICs - uma porta Ethernet e uma sem fio. Gostaria de criar um contêiner lxc que atue como um roteador que atenda aos seguintes requisitos:

  1. Ao executar o hostapd, os clientes conectados ao ponto de acesso devem ter todos os dados roteados através deste contêiner.
  2. Quaisquer outros contêineres lxc instalados também devem rotear todos os dados por meio desse contêiner de roteamento.
  3. Se a porta Ethernet estiver conectada à Internet, o host e todos os contêineres deverão ter acesso à Internet, assim como todos os clientes conectados ao ponto de acesso.

Para configurar isso, fiz o seguinte:

  • Criado o contêiner lxc de roteamento
  • O host possui interfaces eth0 e wlan0. Também criei br-eth0 e br-wlan0, que são pontes, e adicionei essas duas interfaces a eles, respectivamente.
  • br-eth0 está configurado como um cliente dhcp para se conectar ao meu roteador externo através da NIC eth0
  • br-wlan0 tem um IP estático de 10.0.0.1 e o dnsmasq está escutando nessa interface e emitindo endereços IP na sub-rede 10.0.0.0/24
  • Eu configurei o contêiner de roteamento lxc para criar 2 interfaces que estão conectadas a essas pontes (leth0, leth1). leth0 é um cliente dhcp e leth1 tem um endereço IP estático de 10.0.0.201.
  • Criei outra ponte, br-router, que também foi conectada a uma terceira interface no contêiner de roteamento. Esta ponte possui um endereço IP estático de 192.168.3.254 no host, e a interface no contêiner de roteamento (leth2) possui um endereço IP estático de 192.168.3.1
  • O contêiner de roteamento também está executando o dnsmasq, escutando na interface leth2 e fornece endereços IP na sub-rede 192.168.3/24 (.3 - .200), portanto, qualquer outro contêiner lxc que traga essa ponte receberá qualquer endereço IP naquela sub-rede
  • Ativei o mascaramento em leth0 no contêiner de roteamento.
  • Configurei o gateway padrão no host como 192.168.3.1, para que todo o tráfego originado no host seja roteado através do contêiner de roteamento.

Para fins de teste, também criei um segundo contêiner lxc, que inclui uma interface única que traz o roteador br para o contêiner, e esse contêiner hospeda uma página da web na porta 8080. Essa interface única (teth0) recebe um endereço IP via dhcp (neste caso, 192.168.3.9)

Com essa configuração, posso acessar a Internet com êxito a partir do host, do contêiner de roteamento e do contêiner de teste. Além disso, tanto no contêiner de roteamento quanto no contêiner de teste, posso enrolarhttp://192.168.3.9:8080e recupere a página da web com sucesso.

Portanto, os requisitos 2 e 3 foram atendidos. Porém, ao conectar um cliente a este sistema, embora eu receba um endereço IP na sub-rede 10.0.0.0/24 (via dnsmasq rodando em br-wlan0), não tenho conexão com a internet (sei que não teria sem algumas mudanças de roteamento ou algo assim, é por isso que estou aqui). Também tentei fazer algum encaminhamento de porta usando firewalld no contêiner de roteamento em leth1 da porta 80 para 192.168.3.9:8080, na esperança de poder servir a página da web do contêiner de teste para um cliente conectado usandohttp://10.0.0.201- no entanto, não tive essa sorte. (dito isto, esta tentativa de encaminhamento de porta me permite acessar o site através do endereço 201 do host)

Tenho certeza de que há uma combinação de alterações de roteamento, regras de tabela de IP e regras de encaminhamento de porta que fariam tudo funcionar bem, mas depois de alguns dias de experiências, não consigo descobrir. Ainda sou muito novato no que diz respeito a todo esse networking, então espero que alguém possa me ajudar. Espero ter pintado uma imagem decente da configuração atual.

Obrigado!

informação relacionada