ИТ-поддержка

Проброс портов на MikroTik

Ранее мы уже писали о том, как настроить роутер MikroTik. В нашей очередной инструкции мы постарались ответить на вопрос - как пробросить порты на роутере MikroTik.

Любую сеть можно схематично представить в таком виде:

Схема 1 - Схематичное отображение типовой сети


Посмотрим немного подробнее, на примере роутера MikroTik RB951-2nb - у него 5 портов, плюс модуль WiFi.

Подключаемся через web-интерфейс или Winbox'ом к роутеру(по умолчанию логин admin, без пароля), заходим в список интерфейсов, это второй пункт в меню, Interfaces.


Тут мы видим все интерфейсы, доступные нашему роутеру (интерфейс — это, грубо говоря, канал связи роутера с другим компьютером/компьютерами)


  • Первым идёт bridge-local — «локальный мост». В данном случае он служит для установки моста между локальной сетью и беспроводными подключениями по WiFi (В Микротике для соединения вместе нескольких интерфейсов можно или объединить их в свитч, или соединить мостом (бриджем).
  • Далее, ether1-gateway. Ether1 — это первый RJ45-разъем на лицевой панели роутера. По умолчанию считается, что в него воткнут кабель с интернетом от провайдера. Поэтому он называется Gateway — «Ворота» (в принципе, это не обязательно должен быть первый порт, при желании можно назначить gateway'ем любой другой порт, и даже несколько портов одновременно при наличии подключений от нескольких провайдеров).
  • Затем идут 4 порта локальной сети. Они объединены в свитч, начиная со второго RJ45-разъёма, он называется ether2-master-local, остальные 3 — называются slave-local. Тут логика простая: в параметрах портов 3, 4 и 5 прописано, что главным у них является порт №2 — соответственно, все четыре порта автоматически объединяются в виртуальный свитч. А этот виртуальный свитч внутренней сети объединен с беспроводной сетью посредством бриджа из первой строки.
  • Между внешним интернетом и внутренней сетью находится NAT — Network Address Translation, дословно «Трансляция сетевых адресов». Механизм, позволяющий компьютерам, находящимся в локальной сети, иметь внутренние адреса своей сети, и при этом нормально общаться со всеми другими компьютерами и серверами в интернете (при этом для внешнего сервера все компьютеры внутри сети представляются одним адресом — внешним адресом роутера). Вкратце, это работает таким образом: при обращении из внутренней сети куда-нибудь в интернет, роутер подменяет внутренний адрес компьютера своим адресом, принимает ответ от сервера в интернете, и переадресовывает на локальный адрес компьютера, сделавшего исходный запрос. Это называется Masquerade — «Маскарад»: данные от машины в локальной сети как-бы «надевают маску» и для внешнего сервера это выглядит так, будто они исходят от самого роутера.
  • Точно так же, при подключении из внешней сети, нам нужно где-то задать правило, какой именно компьютер в локальной сети должен отвечать на попытки подключиться к какому-то порту на роутере.

Пример - мы хотим, чтобы при подключении к нашей сети роутера на порты 110 и 51413 — подключение переадресовывалось на компьютер PC1, а при подключении к порту 3189 — на машину PC2. Для этого и нужен NAT.

Схема 2 - Пример распределения подключения к сети


В Микротике управление NAT'ом находится в разделе IP->Firewall->NAT:



Тут мы видим, что одно правило уже есть. Оно автоматически создаётся конфигурацией по-умолчанию — это тот самый «Маскарад», он необходим для того, чтобы компьютеры во внутренней сети могли нормально обращаться к серверам в интернете.

Нам же нужно ровно наоборот — добавить правило для подключения извне к одной из машин в локальной сети. Например, для эффективной работы торрент-клиента мы хотим сделать доступным порт 51413 на машине с именем nas.

Нажимаем синий плюсик


В появившемся окне нового правила нам нужно всего несколько опций


  • Первое — это Chain (Цепочка). Тут может быть всего два варианта — srcnat и dstnat. Цепочка — это, грубо говоря, направление потока данных. Srcnat — из внутренней сети во внешнюю, dstnat — соответственно, из внешней во внутреннюю. Как легко догадаться, в нашем случае требуется выбрать dstnat.
  • Далее идут Src. Address (исходный адрес) и Dst. Address (адрес назначения). Для подключения извне исходный адрес будет адресом одного из миллиардов компьютеров в интернете, а адрес назначения — всегда внешний адрес роутера. Эти пункты ставить смысла нет.
  • Потом пункт Protocol (протокол). Здесь значение надо выбрать обязательно, иначе мы не сможем указать номер порта. Для торрентов выбираем тут tcp.
  • Src. Port (исходящий порт) — это тот порт, из которого удалённая машина инициирует соединение с нашим роутером. Нам это абсолютно без разницы, тут ничего не ставим.
  • Dst. Port (порт назначения) — а это как раз тот порт, на который мы хотим принимать соединение. Например, порт 51413.
  • Затем идёт пункт Any. Port (любой порт) — это объединение двух предыдущих пунктов, тут можно указать значение, которое будет работать и как исходный порт, так и как порт назначения. В целом, нам это не требуется.
  • In. interface (входящий интерфейс) — это тот интерфейс, на котором «слушается» указанный порт. Если не указан этот параметр, то порт перестанет так же быть доступен из внутренней сети, даже несмотря на то, что цепочка у нас dstnat. Поэтому выбираем тут интерфейс, через который мы подключены к интернету, в нашем случае — ether1-gateway.
  • Out. interface (исходящий интерфейс) — интерфейс, к которому подключена та машина, на которую мы делаем переадресацию. Тут что-либо ставить не имеет смысла.

В итоге, получается вот такая картина:


Вкладки Advanced (Продвинутый) и Extra (Дополнительный) содержат различные параметры тонкой настройки, нам они без надобности, идём сразу в Action (Действие)


Тут из списка Action нужно выбрать конкретное действие, которое следует выполнить с подключением на указанный ранее порт.

  • accept — Просто принимает пакет;
  • add-dst-to-address-list — Добавляет адрес назначения в указанный список адресов;
  • add-src-to-address-list — Аналогично предыдущему, но для исходного адреса;
  • dst-nat — Переадресовывает данные, пришедшие из внешней сети, во внутреннюю;
  • jump — Позволяет применить для данных правила из другой цепочки. Например, для цепочки srcnat — применить правила цепочки dstnat;
  • log — Просто добавляет информацию о пакете в лог роутера;
  • masquerade — Тот самый «Маскарад»: подмена внутреннего адреса машины из локальной сети на адрес роутера;
  • netmap — Отображение одного адреса на другой. Фактически, развитие dst-nat;
  • passthrough — Пропуск текущего пункта правил и переход к следующему. Используется в основном для статистики;
  • redirect — Перенаправляет данные на другой порт в пределах роутера;
  • return — Возвращает управление обратно, если в эту цепочку выполнялся прыжок правилом jump;
  • same — применяется в очень редких случаях, когда нужно применять одни и те же правила для группы адресов;
  • src-nat — Обратная dst-nat операция: перенаправление данных из внутренней сети во внешнюю.

Для наших целей подходит dst-nat и netmap. Последнее является более новым и улучшенным вариантом первого, логично использовать его:


В поле To Addresses нужно указать адрес машины, на которую мы хотим переадресовать порт, в поле To Ports — соответственно, сам порт.


Нажимаем кнопку Apply, роутер сам находит адрес машины:


Напоследок имеет смысл нажать Comment и указать комментарий для правила, чтобы в дальнейшем не приходилось вспоминать, что это за правило и зачем:


Всё, нажимаем в окошке ввода комментария и ОК в окне ввода правила:


Правило создано, всё работает.

Обратите внимание — дополнительно «открывать» порт не требуется!

  • Чем принципиально отличается netmap РѕС‚ dst -nat, почему нельзя использовать dst-nat?
  • Netmap предназначен для работы с блоками IP-адресов и не умеет переадресовывать порт. Dst-nat оперирует только одним хостом, но имеет преимущество: может также изменять порт назначения.
Обратный звонок RedConnect