tcp dentro da rede local com o iptables e bridge envolvidos

1

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 .

    
por MetNP 25.05.2016 / 17:44

1 resposta

1

Aqui está uma maneira simples de fazer isso:

iptables -A PREROUTING -d my.public.ip.address/32 -p tcp -m tcp --dport 587 -j DNAT --to-destination a.different.ip.address:587

Observe que a.different.ip.address pode estar em qualquer interface desde que a tabela de roteamento esteja configurada corretamente.

Você também precisaria do seguinte para fazer o loop completo:

iptables -A POSTROUTING -s a.different.ip.address/24 -j SNAT --to-source my.public.ip.address
    
por 26.05.2016 / 02:41