Eu quero configurar as regras de encaminhamento externas e internas para que se comportem da mesma maneira, e o problema simplificado que tenho com a parte interna é assim:
se eu tiver
compA - eth0 192.168.0.1
compB - br0 192.168.0.2
+eth0
compC - eth0 192.168.0.3 ...running appache on port80 with simple "it works" page
é possível fazer o tcp tunnel em compB, que encaminhará a porta 80 de A para C.
Quando não há bridge (compB - eth0 192.168.0.2), comandos suficientes são:
compB# iptables -t nat -A PREROUTING -d 192.168.0.2 -p tcp --dport 80 -j DNAT --to-destination 192.168.0 3
compB# iptables -t nat -A POSTROUTING -d 192.168.0.3 -p tcp --dport 80 -j MASQUERADE
mas depois de adicionar BRIDGE com comandos:
compB# brctl addbr br0; brctl addif br0 eth0
compB# ip addr del 192.168.0.2/24 dev eth0
compB# ip addr add 192.168.0.2/24 dev br0
compB# ip route del default; ip route add default 192.168.0.2/24 dev br0
compB# ip link set dev br0 on
os pacotes da compA não alcançam mais o compC. Testando com:
compA# echo -en "GET / HTTP/1.0\r\n\r\n" | nc 192.168.0.2 80
... que deve retornar a página http raiz do compC (trabalhando ok sem ponte envolvida).
ATUALIZAÇÃO:
SOLUÇÃO1:
echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
depois de desabilitar os ganchos de ponte para a situação iptables está OK novamente.
Mas eu ainda estou procurando a solução 'combinação de comandos iptables' que funcionará com a maneira padrão configurada em ponte.
SOLUTION2:
ip link set dev br0 promisc on
funciona também, mas terá impacto no desempenho global.
SOLUTION3:
ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-dport 143 -j redirect --redirect-target DROP
ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-dport 80 -j redirect --redirect-target DROP
ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-sport 80 -j redirect --redirect-target DROP
... parece ok, informações encontradas aqui e aqui .