проброска портов работает, но не для внутренних машин

Обсуждение ПО и его настройки
Ответить
ruz
Сообщения: 6
Зарегистрирован: 27 фев 2012, 22:54

RB751. Тестировал с одинаковым результатом на RouterOS 5.12 и 5.14. Пробросил порты и сидел несколько часов пытался понять почему не работает. Потом выяснилось, что все работает, когда запросы приходят снаружи напряму на внешний интерфейс, а вот из внутренней сети пакеты где-то дропаются.

Настройки NAT:

Код: Выделить всё

 0   ;;; default configuration
     chain=srcnat action=masquerade to-addresses=0.0.0.0 out-interface=ether1-gateway

 1   chain=dstnat action=dst-nat to-addresses=192.168.88.10 protocol=tcp
     dst-address=внешний IP dst-port=2000-2099


Не понятно в чем проблема. Есть идеи?


iSupport
Сообщения: 2359
Зарегистрирован: 06 фев 2011, 20:44

была подробная тема, необходимо Торчем и ип-файрволл-коннекшенс

понять как именно у Вас ходит трафик


Граждане, сколько раз просил =) чем понятнее и точнее сформулирован вопрос - тем понятнее и точнее будет на него ответ.
Я просматриваю ВСЕ темы форума и стараюсь помочь в каждой из них
Поэтому, НА ЛС отвечаю в последнюю очередь
ruz
Сообщения: 6
Зарегистрирован: 27 фев 2012, 22:54

Вроде разобрался. Покурил tcpdump и получается следуещее. Идет SYN запрос от 192.168.88.x на внешний IP, где адрес получателя переписывается (dst-nat действие, которое описано ранее) на внутренний. Получаем новый пакет с внутренними адресами в отправителе и получателе, сервак отвечает SYN+ACK пакетом, но уже на локальный адрес, а этот пакет конечно отправителю SYN запроса не нравится и он немедленно делает RST - соединение не устанвлено.

Схема работает для внешних запросов из-за маскарадинга, который ответы внутренних серверов маскирует под внешний IP.

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

Сделал я это через выставление метки (mangle) в preroute цепи и srcnat действием.

Код: Выделить всё

/ip firewall mangle print
 1   chain=prerouting action=mark-packet new-packet-mark=local via gate passthrough=yes
     protocol=tcp src-address=192.168.88.0/24 dst-address=внешний IP

/ip firewall nat print
 1   chain=srcnat action=src-nat to-addresses=внещний IP packet-mark=local via gate


Вот так. Вроде должно работать для любых пробросов портов.

Есть замечания?


olhovik
Сообщения: 30
Зарегистрирован: 21 фев 2012, 12:00

ruz писал(а):Есть замечания?



Эээ, фактически одно
chain=dstnat action=netmap to-addresses=10.17.12.252 to-ports=9999 protocol=tcp in-interface=ether5 dst-port=9999


ruz
Сообщения: 6
Зарегистрирован: 27 фев 2012, 22:54

Подробнее можно про netmap? Внятного объяснения отличий от действия dst-map я не нашел.


olhovik
Сообщения: 30
Зарегистрирован: 21 фев 2012, 12:00

ruz писал(а):Подробнее можно про netmap? Внятного объяснения отличий от действия dst-map я не нашел.


Неа :) Я и не искал объяснений, искал механизм проброса портов. Вот нашёл и пользуюсь несколько лет. Рекомендую.
Это правило из конфига моего роутера, проброс порта для utorrentа работающего на порту 9999, на пк с адресом 10.17.12.252.
Правило нужно только одно для каждого порта.

P.S. Кстати вспомнилось, рекомендую попробовать поискать способы сделать то или иное на МТ при помощи вот такого поискового запроса: Greg Sowell
Шутка, но как и в каждой шутке... Применение netmap увидел у него.


ruz
Сообщения: 6
Зарегистрирован: 27 фев 2012, 22:54

Вы плохо прочитали оригинальный вопрос. Вы хоть раз пробывали с IP 10.17.12.252 обратиться на порт 9999 внешнего IP, где у вас стоит проброс?

Я немного подумал и понял чем отличается dst-nat от netmap. Видимо netmap работает в обестороны и делает src-map на обратном пути. Так как тут мапинг 1:1, то это дешевле маскарадинга. Хотя это домыслы.


EDX
Сообщения: 43
Зарегистрирован: 02 фев 2012, 21:52
Откуда: Мурманск

посмотрите моё правило
viewtopic.php?p=2467#p2467


ruz
Сообщения: 6
Зарегистрирован: 27 фев 2012, 22:54

EDX, посмотрел. Я тоже так сделал вначале, только потом переделал. В моем решении есть плюс - для проброски дополнительных портов на эту или другие машины не нужно больше добавлять дополнительных src-nat правил. Достаточно правила dst-nat.

Работает это просто. Любой пакет, который идет из локальной сети на внешний адрес помечаем меткой. Если есть dstnat действие, то пакет перепишется и пойдет далее в цепочки, где попадет на srcnat действие, которое перепишет исходник, но только если у пакета есть метка. Если dstnat действия нет, то пакет дропнется.

Возможно кому-нибудь будет полезно.


sontrava
Сообщения: 66
Зарегистрирован: 26 июл 2011, 17:19

Хм...
Ну и намудрили же....
Mangle, NetMap тут вовсе не нужен.

ip fi nat
add action=dst-nat chain=dstnat disabled=no dst-port=2000-2099 protocol=tcp to-addresses=192.168.88.10 to-ports=777


chain=dst-nat action=dst-nat to-addresses=192.168.88.10 protocol=tcp
dst-address=внешний IP dst-port=2000-2099


1.Зачем Вам dst-address=внешний IP ??? Он лишний.
2. А to-ports= - отсутствует....!
3.При входящем пакете - dst-address= это по-ходу IP адрес WAN-интерфейса (если это прероутинг) или адрес машины в локальной сети.


Ответить