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:
- Ao executar o hostapd, os clientes conectados ao ponto de acesso devem ter todos os dados roteados através deste contêiner.
- Quaisquer outros contêineres lxc instalados também devem rotear todos os dados por meio desse contêiner de roteamento.
- 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!