Linux iptables NAT de uma sub-rede /24 inteira

Linux iptables NAT de uma sub-rede /24 inteira

Meu objetivo é NAT (traduzir) todos os endereços IP que alcançam a eth0 em todas as portas e protocolos desta forma: 192.168.55.x -> 192.168.42.x (tenho o encaminhamento de IP habilitado e a sub-rede 192.168.42.0/24 está na eth1 ). Posso fazer isso para um host por par de linhas como esta, por exemplo, com x=20:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.20 -j DNAT --to 192.168.42.20
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20 -j SNAT --to 192.168.55.20

Mas não consigo encontrar uma maneira de traduzir todos os 253 hosts possíveis. Eu tentei isso:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.0/24 -j DNAT --to 192.168.42.0-192.168.42.255
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20/24 -j SNAT --to 192.168.55.0-192-168.55.255

Isso resulta em uma tradução aleatória do host. Útil para balanceamento de carga. Mas como conseguir uma tradução simples e individual?

Obrigado.

Responder1

De man iptables-extensions:

NETMAP
Este alvo permite mapear estaticamente uma rede inteira de endereços em outra rede de endereços. Só pode ser usado a partir de regras na tabela nat.

Portanto, apenas uma regra é necessária:

iptables -t nat -A PREROUTING -d 192.168.55.0/24 -i eth0 -j NETMAP --to 192.168.42.0/24

Se você também deseja que as conexões inicialmente iniciadas a partir da rede "42" sejam visualizadas corretamente, complete com esta segunda regra:

iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j NETMAP --to 192.168.55.0/24

informação relacionada