iptables corresponde ao pacote encaminhado se o endereço src estiver na mesma rede que o endereço dst

1

Estou procurando um caminho em iptables para corresponder aos pacotes encaminhados em que o endereço de origem é na mesma rede que o endereço de destino, sem especificar a rede .

Claro, quando eu especificar a rede, isso é simples:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.0/24

Mas digamos que eu queira fazer isso para qualquer rede de classe C (e eu não quero especificar todos eles, obviamente).

Eu olhei para a correspondência rpfilter , mas de acordo com a página de manual:

This match can only be used in the PREROUTING chain of the raw or mangle table.

Então isso não tem utilidade para mim. A correspondência u32 parece promissora, mas é muito complexa, não entendo.

Eu tentei uma abordagem diferente: combinar os pacotes que saem na mesma interface em que eles entraram, assim:

iptables -t nat -A POSTROUTING -i eth0 -o eth0

mas isso também não funciona, pois -i não pode ser usado na cadeia POSTROUTING:

iptables v1.4.21: Can't use -i with POSTROUTING

Uma solução em que pensei é usar marcação de pacotes: marcar pacotes que chegam em eth0 e corresponder à interface de saída e à marca na cadeia POSTROUTING, da seguinte forma:

iptables -t mangle -A PREROUTING -i eth0 -j MARK --set-mark 0x01/0xff
iptables -t nat -A POSTROUTING -o eth -m mark --mark 0x01/0xff

Isso funciona na maioria dos casos, com base na suposição de que você executa apenas uma rede em uma determinada interface, mas não exatamente o que eu quero, pois funciona em interfaces e não em redes.

Então, o problema ainda não foi resolvido. Eu não estou procurando uma solução de trabalho completa, mas para conselhos sobre uma maneira de resolver isso que eu perdi. Obrigado!

-EDIT -

A razão pela qual eu preciso disso é a seguinte. Eu tenho multihomed host linux, vamos chamá-lo de alice. Alice tem uma interface eth0 e Bob e Charly são os hosts dessa rede. Algumas portas no Alice são encaminhadas com as regras DNAT do iptables. Vamos dizer que eu encaminho a porta tcp 456 de Alice para a porta 456 em Bob. Eu quero que esse encaminhamento funcione também para o tráfego proveniente de hosts no eth0. Com apenas a regra DNAT em vigor, um pacote enviado por Charly para a porta Alice 456 é encaminhado para Bob, o bit seu endereço de origem permanece o da Charly. Assim, o pacote de retorno é enviado diretamente por Bob para Charly, o que torna o fluxo de tráfego não simétrico.

Para corrigir isso, quero SNAT este tráfego em Alice. Então, se o tráfego deixar Alice, tiver um endereço de destino em eth0 e um endereço de origem na rede eth0 (mas não em Alice), preciso SNAT it.

Isso não é difícil de fazer se você especificar os intervalos de endereços. Mas agora eu tenho várias interfaces, e gostaria de fazer isso genericamente.

    
por roelvanmeer 22.02.2017 / 10:18

0 respostas