Estou usando o lxc para hospedar alguns serviços. Desejo expor um desses serviços ao mundo exterior.
Eu configurei três regras NAT no meu host usando iptables, uma para a eth0, uma para a br0 (a ponte para os containers / guests) e uma regra OUTPUT para o tráfego do próprio host.
Com essas regras, posso usar o IP dos hosts (10.234.13.185) com a porta escolhida (4050) para alcançar o guest / container (192.168.3.54:61616). Isso funciona do mundo exterior, o host e outros convidados.
No entanto, não consigo fazê-lo funcionar a partir do convidado com o serviço (192.168.3.54).
Percebo que o tráfego entra no host na porta 4050 e, em condições normais, acaba no convidado na porta 61616. No entanto, se o tráfego vier do convidado, ele ainda atingirá a porta do host 4050, mas não será roteado para o 61616 mas adere a 4050.
Eu fiz um ngrep e de outros clientes que eu vejo (usando o telnet):
No entanto, quando eu repito, mas faço telnet do próprio convidado, vejo:
Estou presumindo uma regra ausente (possivelmente uma regra POSTROUTING para a fonte?).
Aqui está uma cópia do meu iptables-save
*nat
:PREROUTING ACCEPT [36:2286]
:INPUT ACCEPT [5:426]
:OUTPUT ACCEPT [25:1610]
:POSTROUTING ACCEPT [8:504]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 4050 -j DNAT --to-destination 192.168.3.54:61616
-A PREROUTING -i br0 -p tcp -m tcp --dport 4050 -j DNAT --to-destination 192.168.3.54:61616
-A OUTPUT -p tcp -m tcp --dport 4050 -j DNAT --to-destination 192.168.3.54:61616
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
Qualquer ajuda muito apreciada.