web-dev-qa-db-fra.com

Linux iptables NAT d'un tout-réseau complet / 24

Mon objectif est de NAT (Traduire) toutes les adresses IP qui atteignent Eth0 sur tous les ports et protocoles de la manière suivante: 192.168.55.x -> 192.168.42.x (J'ai une transmission IP activée et 192.168.42.0/24 Sous-réseau est sur Eth1). Je peux le faire pour un hôte par paire de lignes comme celle-ci, par exemple avec 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

Mais je ne trouve pas un moyen de traduire tous les 253 hôtes possibles. J'ai essayé ceci:

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

Cela se traduit par une traduction d'hôte aléatoire. Utile pour équilibrer la charge. Mais comment obtenir une traduction d'une seule à une en une seule?

Merci.

8
Djee

De man iptables-extensions:

NetMap
Cette cible vous permet de planer statistiquement un réseau complet d'adresses sur un autre réseau d'adresses. Il ne peut être utilisé que dans des règles de la table NAT.

Donc, une règle n'est nécessaire que:

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

Si vous souhaitez également les connexions initialement démarrées à partir du filet "42" à voir correctement, complétez avec cette deuxième règle:

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