Создание домашней сети на базе устройств MikroTik: Часть 7 – Firewall правильное перенаправление портов в сети с двумя шлюзами

В прошлой части, мы с Вами, настроили фильтрацию трафика в (Firewall Filter).

Напомню, что у меня в сети присутствует роутер Asus RT-AC66U, работающий как точка доступа для Wi-Fi клиентов. Он подключен кабелем к роутеру hEX (RB750Gr3)
Конечно, мне необходимо иметь к нему удаленный доступ, также, как и к другим ресурсам локальной сети. Например чтобы перезагрузить, прошить и др. мало ли что.

Плюсом у меня к LG 3D Smart TV, подключена маленькая клиентская точка доступа cAP Lite. Т.к. на телеке решили сэкономить брали его без встроенного Wi-Fi модуля.(Серия оснащалась довольно дорогими фирменными USB2.0 Wi-Fi модулями, зачем переплачивать)
Это именно тот телевизор, на котором домашние любят смотреть фильмы с ПК по сети. Благо на него без проблем можно отправить видео из того же Проигрывателя Windows Media. Но все затевалось для использования через медиа сервер Plex. Будет отдельная статья по сборке и настройке этого сервера, а пока вернемся к нашей теме…

Для начала давайте вспомним(или узнаем), как происходит обычное перенаправление портов в MikroTik RouterOS

Пока я писал статьи, обновилась ветка прошивок Bugfix. Теперь у меня на девайсах стоит прошивка 6.40.6

1. Перенаправление портов в hAP ac (RB962UiGS-5HacT2HnT)
Давайте взглянем на простую схему перенаправления порта. Например у меня дома на виртуальной машине крутиться сервер Plex. Все его настройки я произвожу через консоль, подключаясь к нему по протоколу SSH(для тех кто не знает, что это Secure SHell)
Предположим, что данный сервер имеет внутрисетевой IP адрес: 192.168.88.9
Стандартный порт для доступа по SSH это TCP порт под номером 22. Если кто-то не знает что такое TCP или UDP порты, Вы можете погуглить, т.к. без этих знаний Вам будет не очень понятно ))
Мне нужно подключиться откуда-нибудь с ноутбука с интернетом. И тут мы вспоминаем про статический IP адрес.

Стандартное подключение в рамках локальной сети

Для примера подключаемся через Putty по стандартному 22 порту

А теперь подключимся… например, с дачи (сидим через 4G). Схема изменится.

В принципе тоже стандартная схема, но теперь наша цель находится за роутером, т.е. целью нам нужно выбирать сам роутер!

Отлично, тогда выбираем статический IP роутера. Он же доступен из интернета! Только вот как выбрать порт и куда попадет наш запрос на подключение?

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

Сделаем маленькое отступление, почему так происходит…

Это происходит потому, что у Вас дома своя маленькая “глобальная” сеть, и соответственно может быть очень много устройств. Только она называется локальная т.к. недоступна всем другим людям или устройствам в Глобальном интернете.
Представьте себе, что для каждого Вашего устройства провайдер бы выдавал Вам статический IP. Было бы здорово, но адреса бы закончились чрезвычайно быстро.
Они в принципе уже и так закончились.
Именно для этого был разработан IPv6. Но это уже совсем другая история.

В общем мы имеем то, что имеем. А именно, один единственный IP адрес доступный и видимый другим в интернете.
Кстати это касается не только статических адресов, но и динамических!!! Провайдеру нужно экономить и удобно управлять сетью.
В итоге нам выдается обычно один единственный сетевой адрес для выхода в интернет.

Роутер же, работает, как маленький компьютер, но выполняет для нас, совсем другие функции.

Как же всякие мобильники, нотбуки, планшеты и другие девайсы получают доступ в интернет через один единственный роутер?
Все тоже достаточно просто. Роутер выступает в роли маскировки для всех устройств подключенных к нему. Именно эту функцию выполняет правило в Firewall NAT.
Программисты очень креативные люди )))
К данному правилу применяется действие Masquerade или по другому – маскарадинг )) Т.е. все устройства “надевают маску” роутера и все сайты, которые мы пробуем открыть, видят IP адрес роутера(статический), либо IP адрес провайдера(динамический).

При открытии сайта, сайт думает что к нему обращается роутер

Если Вам интересны подробности этого взаимодействия можете почитать в интернете про TCP/IP стеки, IP адресацию, почему закончились IPv4 адреса и многое, многое другое.

Для обучения роутера этому колдовству =) открыть всеми нами любимый WinBox(или консоль), перейти в меню IP -> Firewall вкладка NAT
И добавить новое правило:

Добавляем новое правило

Указываем нужные данные во вкладке General

Указываем нужные данные во вкладке Action и жмем ОК

Консольно:

/ip firewall nat

add action=dst-nat chain=dstnat comment=”Open ports to Media Server” dst-por=10022 in interface=WAN protocol=tcp to-addresses=192.168.88.9 to-ports=22

А теперь разберем по порядку, что мы сделали:
Вкладка General
1. Chain – dstnat – выбираем цепочку
2. Protocol – TCP – выбираем протокол сетевого уровня
3. Dst. Port – 10022 – задаем TCP порт, к которому будем обращаться снаружи. Этот порт я выбрал сам. Вы же можете выбрать любой другой, по своему желанию.
4. In. Interface – WAN – Выбираем входящий интерфейс через который будут приходить запросы.
Вкладка Action
1. Action – dst-nat – выбираем действие перенаправления
2. To Addresses – 192.168.88.9 – задаем локальный IP адрес на который будут отправляться внешние запросы. Адресов может быть несколько.
3. To Ports – 22 – задаем TCP порт к которому нужно обратиться. Также может быть несколько.

Т.е. внешний TCP или UDP порт, к которому мы обращаемся не обязательно должен быть идентичен локальному, к которому мы хотим достучаться.
Это поможет также и с безопасностью. Боты будут атаковать стандартные порты, а у нас они закрыты и доступ к ним идет совсем не по стандартным портам, назначение которых, известно только нам самим!!!
Не забудьте открыть доступ к внешнему порту в Firewall Filter и поместить правило выше последнего запрещающего, иначе фильтрация соединений заблокирует все ваши попытки подключения.

Для того, чтобы получить удаленный доступ к самому роутеру, нужно просто открыть стандартный TCP порт 8291 для программы WinBox.
Либо также перенаправить любой другой порт на локальный адрес самого роутера 192.168.88.1 на порт 8291

В этой части мы узнали, как перенаправить запрос или соединение снаружи из интернета через роутер со статическим IP адресом, к локальному ресурсу уже в нашей локальной сети.
Будьте аккуратней с портом 80 т.к. это стандартный WEB порт. На нем может работать WEB интерфейс роутера. Также он подвержен атакам ботов.

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

Мне пришлось подумать прежде чем, я понял, почему не работает простое перенаправление… И правильно, что не работало.

  1. Перенаправление портов до hEX (RB750Gr3)
    А вот тут мы сталкиваемся с подводными камнями, которые по ходу разбора оказываются вполне логичными.

Давайте взглянем на схему:

Вот такая у нас схема на данный момент

Судя по данной схеме, удаленный доступ к роутеру hEX и всем, что находится за ним, мы будем осуществлять через роутер hAP ac, у которого есть статический IP.

Смотрим:

Пока всё хорошо

Пробуем достучаться до точки доступа Asus… Опа…

А вот и проблема!
Она кроется в том, что у клиентских устройств, DHCP сервером, назначаются различные шлюзы, а именно:
1. В hAP ac это шлюз 192.168.88.1
2. В hEX это шлюз 192.168.88.2
Все правильно, отсюда устройство получив запрос по локальной сети, с внешнего адреса, стремиться отправить ответ через шлюз.
В части Медиа сервера он отправляет запросы правильно, через роутер с локальным адресом 192.168.88.1, а точка доступа неправильно для удаленного доступа, но правильно для выхода в интернет, через роутер с локальным адресом 192.168.88.2.

Что же делать в этом случае, неужели нужно менять адреса шлюзов на тех устройствах за роутером, к которым мы хотим достучаться?
Нет, нет и еще раз нет.
Это создаст большие проблемы. Во первых нагрузит OpenVPN канал, во вторых если отвалится туннель, то устройства потеряют доступ к интернету.

Выход есть и он изящен =)

Вы ведь помните маскарадинг? Да да, когда наши соединения прикрываются роутером. А почему бы не сделать это в обратную сторону, но не для всего трафика, а только для конкретных запросов?
Сказано сделано.

Если мы работаем в рамках локальной сети т.е. пробуем подключиться с адреса 192.168.88.5 к адресу 192.168.88.30 все работает отлично. Этим и воспользуемся.
А когда мы работаем из интернета, к адресу 192.168.88.30 будет приходить запрос с адреса любого, который мы получили от провайдера в месте, где мы сидим, например 4G сеть.
Нужно заменить этот динамический IP в соединении, на IP роутера 192.168.88.1 и сделать это только для запросов идущих к IP адресу 192.168.88.30

Добавляем правило доступа к WEB интерфейсу точки доступа Asus

Выбираем себе TCP порт

WEB интерфейс висит на 80 порту

Теперь отловим это перенаправление и поменяем в нем IP

ВНИМАНИЕ!!! Нам нужно создать правило именно для уже перенаправленного соединения!

Нам нужна цепочка Srcnat

И действие также src-nat

Консольно:

/ip firewall nat
add action=dst-nat chain=dstnat comment=”Open ports to RT-AC66U” dst-port=14080 in-interface=WAN protocol=tcp to-addresses=192.168.88.30 to-ports=80
add action=src-nat chain=srcnat dst-address=192.168.88.30 dst-port=80 protocol=tcp to-addresses=192.168.88.1

Что же мы тут видим, посмотрим…
Сначала мы перенаправили порт для удаленного доступа к точке доступа Asus.
Через IP 98.76.54.32 и TCP порт 14080 к IP 192.168.88.30 и TCP порт 80
А потом отловили этот запрос и замаскировали в нем IP адрес источника с которого мы сидим на IP адрес самого роутера 192.168.88.1

Вкладка General
1. Chain – srcnat – цепочка srcnat
2. Dst. Address – 192.168.88.30 – мы же сами задавали перенаправление на этот адрес вот и ловим этот запрос
3. Dst. Port – 80 – ловим запрос на этот порт или порты (например если ловить потом еще и SSH, то пишем так 80,22)
Вкладка Action
1. Action – src-nat – выполняемое действие. Замена данных источника
2. To Addresses – 192.168.88.1 – на этот адрес меняем
3. To Ports – оставляем пустым т.к. порты мы указываем на вкладке General

Попробуем подключиться к роутеру откуда-нибудь из кафе или из гостей.
Для этого в браузере в адресной строке нужно набрать Наш внешний статический IP адрес и через двоеточие указать внешний TCP порт, через который мы делаем перенаправление.
Пример:
http://98.76.54.32:14080

Так выглядит доступ к роутеру из любого места, где есть интернет

Вот такая хитрая схема, которая позволяет не городить огород на удаленных узлах.
Все правила перенаправления добавляются и управляются исключительно на роутере со статическим IP.
Вкладка NAT в Firewall это очень мощный инструмент наравне с фильтрацией трафика.
Дополнительная информация: WIKI MikroTik Firewall NAT (Eng)

Такой набор правил в NAT, есть у меня:
Попадаем в меню
/ip firewall nat

1. Маскируeм локальные сети для выхода в интернет

add action=,asquerade chain=srcnat comment=”LAN to WAN” out-interface=WAN src-address=192.168.88.0/24

2. Доступ к Медиа Серверу и открытие порта для Торрента на нем же.

add action=dst-nat chain=dstnat comment=”Open ports to Media Server” dst-port=10022 in-interface=WAN protocol=tcp to-addresses=192.168.88.9 to-ports=22
add action=dst-nat chain=dstnat dst-port=10080 in-interface=WAN protocol=tcp to-addresses=192.168.88.9 to-ports=80
add action=dst-nat chain=dstnat dst-port=10005 in-interface=WAN protocol=tcp to-addresses=192.168.88.9 to-ports=10005

3. Доступ к WEB интерфейсу Cisco SPA112 (телефонный шлюз)

add action=dst-nat chain=dstnat comment=”Open port to Cisco SPA112″ dst-port=11080 in-interface=WAN protocol=tcp to-addresses=192.168.88.10 to-ports=80

Всё остальное это сторона роутера hEX, тут нужно применить SRCNAT

4. Доступ к роутеру hEX  по WinBox

add action=dst-nat chain=dstnat comment=”Open port to hEX” dst-port=12291 in-interface=WAN protocol=tcp to-addresses=192.168.88.2 to-ports=8291
add action=src-nat chain=srcnat dst-address=192.168.88.2 dst-port=8291 protocol=tcp to-addresses=192.168.88.1

5. Доступ к сетевомумосту cAP Lite

add action=dst-nat chain=dstnat comment=”Open port to cAP Lite” dst-port=13291 in-interface=WAN protocol=tcp to-addresses=192.168.88.39 to-ports=8291
add action=src-nat chain=srcnat dst-address=192.168.88.39 dst-port=8291 protocol=tcp to-addresses=192.168.88.1

6. Доступ к точке доступа Asus RT-AC66U (WEB и SSH)

add action=dst-nat chain=dstnat comment=”Open ports to RT-AC66U” dst-port=14080 in-interface=WAN protocol=tcp to-addresses=192.168.88.30 to-ports=80
add action=dst-nat chain=dstnat dst-port=14022 in-interface=WAN protocol=tcp to-addresses=192.168.88.30 to-ports=22
add action=src-nat chain=srcnat dst-address=192.168.88.30 dst-port=80,22 protocol=tcp to-addresses=192.168.88.1

Вид формирования правил в WinBox

Вы можете поменять внешние порты на свои, попробовать добавить что-то свое.

 

Источник оригинальной стать: https://gregory-gost.ru