Назад | Перейти на главную страницу

Iptables массивный NAT 1: 1

Мне нужно подключить две локальные сети: LAN1: 10.10.0.0/16 и LAN2: 192.168.0.0/16. Я не могу выполнить простую маршрутизацию, потому что сеть 192.168.0.0/16 запрещена в LAN1, поэтому я думаю об использовании Full cone nat (1: 1) для преобразования 192.168.x.y / 16 в 10.11.x.y / 16. Каждый перевод выполняется по следующим правилам:

iptables -t nat -A PREROUTING -d 10.11.0.0/16 -j DNAT --to-destination 192.168.0.0/16
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j SNAT --to-source 10.11.0.0/16

Но мне придется ввести 254 * 254 * 2 правил, что, я думаю, приведет к огромному снижению производительности. Итак, есть ли способ написать такой индивидуальный перевод с минимальным количеством правил?

Я не уверен, присутствует ли он во всех ядрах, но, возможно, вы ищете NETMAP цель.

Из страница руководства iptables

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. 

 --to address[/mask]
     Network address to map to. The resulting address will be 
     constructed in the following way: All 'one' bits in the 
     mask are filled in from the new 'address'. All bits that 
     are zero in the mask are filled in from the original 
     address. 

Как сказано в первом ответе, используйте -j NETMAP:

# iptables -t nat -A PREROUTING -d 10.11.0.0/16 -j NETMAP --to 192.168.0.0/16
# iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j NETMAP --to 10.11.0.0/16

Вероятно, неплохо также добавить -d 10.10.0.0/16 в строку POSTROUTING.

Вы можете сделать это с помощью небольшого сценария оболочки

#!/bin/bash
for (( i=0 ; $i<256 ; i=$i+1 )) ; do
  for (( j=0 ; $j<256 ; j=$j+1 )) ; do
    iptables -t nat -A PREROUTING -d 10.11.$i.$j/16 -j DNAT --to-destination 192.168.$i.$j/16
    iptables -t nat -A POSTROUTING -s 192.168.$i.$j/16 -j SNAT --to-source 10.11.$i.$j/16
  done
done

Но я думаю, что это ошибка. Думаю, должно быть / 32, а не / 16.