LINUX.ORG.RU
решено ФорумAdmin

Двойной NAT

 ,


0

2

Здравствуйте, уважаемые! Очень нужна ваша помощь. Уже неделю ковыряю и ничего не выходит. Имеется роутер Asus RT-32G (с прошивкой Wive-NG) c белым адресом, допустим, 12.34.56.78, на интерфейсе eth2.2. Также внутри сети того же провайдера имеется маршрутизатор Mikrotik за натом с внешним адресом 10.48.57.4, и внутренним - 192.168.0.1. За Микротиком находится несколько сервисов, которые нужно пробросить наружу. Один из них - веб-сервер с адресом 192.168.0.2. Схематично выглядит так:

ISP -- (12.34.56.78) -- (10.48.57.4 -- 192.168.0.1) -- (192.168.0.2)
Мои рассуждения порядок действий:

  1. Асус. DNAT на 10.48.57.4:80
  2. Микротик. DNAT на 192.168.0.2:80
  3. Микротик. SNAT/MASQUERADE с 192.168.0.2 на 10.48.57.4
  4. Асус. SNAT/MASQUERADE c 10.48.57.4 на 12.34.56.78
  5. Так как оба роутера натируют каждый свою сеть, то нужда в пунктах 3 и 4 отпадает


Соответственно, правила для Асуса:

iptables -t nat -A POSTROUTING -o eth2.2 -j MASQUERADE
iptables -t nat -A PREROUTING -d 12.34.56.78 -p tcp --dport 8080 -j DNAT --to-destination 10.48.57.4:80
Правила в Микротике:
chain=dstnat action=netmap to-addresses=192.168.0.2 to-ports=80 protocol=tcp in-interface=ether1-gateway dst-port=80 
chain=srcnat action=masquerade to-addresses=0.0.0.0 out-interface=ether1-gateway 
В итоге это не помогло. Прошу совета. Что я делаю не так? Где я рассуждаю неправильно?



Последнее исправление: Udeen (всего исправлений: 1)

Ответ на: комментарий от fjfalcon

tcpdump из прошивки выпилен. При попытке доступа извне, пакеты не проходят до Микротика. А при попытке открыть изнутри сети - пакеты проходят до веб-сервера, но на обратном пути блочатся в Микротике как invalid. Если же стучаться на http://10.48.57.4, то все нормально работает.

Udeen
() автор топика
Ответ на: комментарий от fjfalcon

Дело в том, что при прямом обращении к микротику пакеты имеют тот же внешний адрес (я сижу за натом асуса), и в данном случае все нормально. А если же асус делает на микротик dnat, то ответные пакеты дропаются. Или я Вас неправильно понял?

Udeen
() автор топика
Ответ на: комментарий от Udeen

в общем-то без tcpdump'a это гадание... на asus'e поднимите его.

fjfalcon ★★★
()

На асусе

iptables -t nat -A POSTROUTING -d 10.48.57.4 -p tcp --dport 80 -j MASQUERADE
И обязательно добавь маршрут до 10.48.57.4 через внутреннюю сеть.

Gattai
()

Итак, вести с полей. Поднять tcpdump на асусе не удалось. Маскрадинг на микротик отчасти решил проблему, но ответные пакеты где-то теряются. Эталонный тест дает такой результат в цепочке forward таблицы filter (лог микротика):

18:40:04 in:ether1-gateway out:bridge-local, proto TCP (SYN), 12.34.56.78:19582->192.168.0.2:80, len 60 
18:40:05 in:ether1-gateway out:bridge-local, proto TCP (SYN), 12.34.56.78:19905->192.168.0.2:80, len 60 
18:40:08 in:ether1-gateway out:bridge-local, proto TCP (SYN), 12.34.56.78:20200->192.168.0.2:80, len 60 
18:40:10 in:ether1-gateway out:bridge-local, proto TCP (SYN), 12.34.56.78:20543->192.168.0.2:80, len 60 
18:40:11 in:ether1-gateway out:bridge-local, proto TCP (SYN), 12.34.56.78:20697->192.168.0.2:80, len 60 
18:40:14 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:19582, len 60 
18:40:15 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:19905, len 60 
18:40:17 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:20200, len 60 
18:40:19 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:20543, len 60 
18:40:20 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:20697, len 60 
18:40:26 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:19582, len 60 
18:40:27 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:19905, len 60 
18:40:29 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:20200, len 60 
18:40:32 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:20543, len 60 
18:40:32 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:20697, len 60 
18:40:50 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:19582, len 60 
18:40:51 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:19905, len 60 
18:40:53 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:20200, len 60 
18:40:56 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:20543, len 60 
18:40:56 in:bridge-local out:ether1-gateway, proto TCP (SYN,ACK), 192.168.0.2:80->12.34.56.78:20697, len 60 
И, я так понимаю, на микротике пакеты ходят верно. Поправьте, если не прав. Но на асусе их отловить не получается.
Ох уж эта маршрутизация. Вот в кручу эту схему в уме, и вроде бы просто все. А в итоге не выходит ничего.

Udeen
() автор топика
Ответ на: комментарий от Udeen

Возможно, трафик от асуса к микротику и обратно ходит разными путями, и во втором случае проходит через нат. В идеале надо было бы поснифать tcpdump'ом на асусе, но если не можешь - задай вопрос провайдеру.

Как обойти такую ситуацию - в голову не приходит.

Gattai
()
Ответ на: комментарий от Gattai

Вообщем, я психанул и, потратив всего один день, купил еще один микротик =)
Что было проделано далее:

  1. Поднял между роутерами туннель. Прописал маршруты до внутренних сетей на обоих роутерах.
  2. Добавил три правила в фаервол с белым IP:
    • chain=forward action=accept protocol=tcp dst-port=80
      chain=dstnat action=netmap to-addresses=192.168.0.2 protocol=tcp dst-address=12.34.56.78 dst-port=80
      chain=srcnat action=netmap to-addresses=12.34.56.78 protocol=tcp dst-address=192.168.0.2 dst-port=80
  3. Profit!

От души благодарю откликнувшихся!
На заметку: для серьезных задач использовать серьезное оборудование.

Udeen
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.