Страница 1 из 1
проброска портов работает, но не для внутренних машин
Добавлено: 27 фев 2012, 23:39
ruz
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
Не понятно в чем проблема. Есть идеи?
Re: проброска портов работает, но не для внутренних машин
Добавлено: 28 фев 2012, 01:12
iSupport
была подробная тема, необходимо Торчем и ип-файрволл-коннекшенс
понять как именно у Вас ходит трафик
Re: проброска портов работает, но не для внутренних машин
Добавлено: 28 фев 2012, 02:35
ruz
Вроде разобрался. Покурил 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
Вот так. Вроде должно работать для любых пробросов портов.
Есть замечания?
Re: проброска портов работает, но не для внутренних машин
Добавлено: 28 фев 2012, 20:36
olhovik
ruz писал(а):Есть замечания?
Эээ, фактически одно
chain=dstnat action=netmap to-addresses=10.17.12.252 to-ports=9999 protocol=tcp in-interface=ether5 dst-port=9999
Re: проброска портов работает, но не для внутренних машин
Добавлено: 29 фев 2012, 13:23
ruz
Подробнее можно про netmap? Внятного объяснения отличий от действия dst-map я не нашел.
Re: проброска портов работает, но не для внутренних машин
Добавлено: 29 фев 2012, 18:45
olhovik
ruz писал(а):Подробнее можно про netmap? Внятного объяснения отличий от действия dst-map я не нашел.
Неа
Я и не искал объяснений, искал механизм проброса портов. Вот нашёл и пользуюсь несколько лет. Рекомендую.
Это правило из конфига моего роутера, проброс порта для utorrentа работающего на порту 9999, на пк с адресом 10.17.12.252.
Правило нужно только одно для каждого порта.
P.S. Кстати вспомнилось, рекомендую попробовать поискать способы сделать то или иное на МТ при помощи вот такого поискового запроса: Greg Sowell
Шутка, но как и в каждой шутке... Применение netmap увидел у него.
Re: проброска портов работает, но не для внутренних машин
Добавлено: 29 фев 2012, 22:45
ruz
Вы плохо прочитали оригинальный вопрос. Вы хоть раз пробывали с IP 10.17.12.252 обратиться на порт 9999 внешнего IP, где у вас стоит проброс?
Я немного подумал и понял чем отличается dst-nat от netmap. Видимо netmap работает в обестороны и делает src-map на обратном пути. Так как тут мапинг 1:1, то это дешевле маскарадинга. Хотя это домыслы.
Re: проброска портов работает, но не для внутренних машин
Добавлено: 02 мар 2012, 11:40
EDX
Re: проброска портов работает, но не для внутренних машин
Добавлено: 06 мар 2012, 17:08
ruz
EDX, посмотрел. Я тоже так сделал вначале, только потом переделал. В моем решении есть плюс - для проброски дополнительных портов на эту или другие машины не нужно больше добавлять дополнительных src-nat правил. Достаточно правила dst-nat.
Работает это просто. Любой пакет, который идет из локальной сети на внешний адрес помечаем меткой. Если есть dstnat действие, то пакет перепишется и пойдет далее в цепочки, где попадет на srcnat действие, которое перепишет исходник, но только если у пакета есть метка. Если dstnat действия нет, то пакет дропнется.
Возможно кому-нибудь будет полезно.
Re: проброска портов работает, но не для внутренних машин
Добавлено: 29 мар 2012, 19:55
sontrava
Хм...
Ну и намудрили же....
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-интерфейса (если это прероутинг) или адрес машины в локальной сети.