Linux iptables NAT de uma sub-rede inteira / 24

4

Meu objetivo é NAT (traduzir) todos os endereços IP que alcançam a eth0 em todas as portas e protocolos desta maneira: 192.168.55.x - > 192.168.42.x (Eu tenho o encaminhamento de ip ativado e a sub-rede 192.168.42.0/24 está em eth1). Eu posso fazer isso por um host por par de linhas como este, 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 obter uma tradução simples de um-para-um?

Obrigado.

    
por Djee 17.10.2016 / 14:59

1 resposta

4

De man iptables-extensions :

NETMAP
This target allows you to statically map a whole network of addresses onto another network of addresses. It can only be used from rules in the nat table.

Portanto, é necessária apenas uma regra:

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 quiser que conexões iniciadas inicialmente a partir da rede "42" sejam vistas 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
    
por 24.10.2016 / 20:36