Estou usando contêineres LXC. Cada um dos meus contêineres tem um endereço IP em 10.0.3.0/24. Eu quero que os pacotes que entram em meu host em uma certa porta sejam redirecionados para um contêiner, então eu uso esta regra:
iptables -t nat -A PREROUTING -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000
Isto permite fazer (fora do pacote) # - > HOST: 3000 - > RECIPIENTE: 3000
Funciona muito bem. No entanto, quando estou dentro de um contêiner (não aquele usado nesta regra anterior) e desejo acessar outro host (por exemplo, HOST2) na porta 3000, meu pacote está sendo redirecionado para meu contêiner. Faz:
(dentro do pacote do contêiner) # - > HOST2: 3000 - > HOST: 3000 - > RECIPIENTE: 3000
em vez de
(dentro do pacote do contêiner) # - > HOST2: 3000 - > HOST: 3000 - > HOST2: 3000
Eu tentei mudar minha regra acima para
iptables -t nat -A PREROUTING -s 10.0.3.0/24 -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000
para dizer: se o pacote vem de um contêiner, não aplique a regra, mas isso não funciona. Qualquer ajuda seria ótimo,
Atenciosamente
Aqui estão minhas regras do iptables:
Chain PREROUTING (policy ACCEPT 154 packets, 29925 bytes)
pkts bytes target prot opt in out source destination
4 240 DNAT tcp -- * * 10.0.3.0/24 0.0.0.0/0 tcp dpt:3000 to:10.0.3.5:3000
3 180 DNAT tcp -- * * 10.0.3.0/24 0.0.0.0/0 tcp dpt:3001 to:10.0.3.6:3001
Chain INPUT (policy ACCEPT 126 packets, 28400 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 25 packets, 1900 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 29 packets, 2140 bytes)
pkts bytes target prot opt in out source destination
28 1525 MASQUERADE all -- * * 10.0.3.0/24 !10.0.3.0/24
Por não funcionar, quero dizer que quando eu encurro 3000 todos os hosts de dentro de um contêiner, sou redirecionado para o meu contêiner: 3000