Проброс портов в Микротик

Автор: | 14.04.2014

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

Посмотрим немного подробнее, на примере роутера Mikrotik RB951-2n. У него 5 портов, плюс модуль WiFi.
Подключаемся через web-интерфейс или Winbox’ом к роутеру(по умолчанию логин admin, без пароля), заходим в список интерфейсов, это второй пункт в меню, Interfaces.
probros_portov_mikrotik_2

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

Первым идёт 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 — «Маскарад»: данные от машины в локальной сети как-бы «надевают маску» и для внешнего сервера это выглядит так, будто они исходят от самого роутера. Точно так же, при подключении из внешней сети, нам нужно где-то задать правило, какой именно компьютер в локальной сети должен отвечать на попытки подключиться к какому-то порту на роутере. Поясню на примере:
probros_portov_mikrotik_4

Мы хотим, чтобы при подключении к нашей сети в лице роутера на порты 110 и 51413 — подключение переадресовывалось на компьютер PC1, а при подключении к порту 3189 — на машину PC2.
Для этого и нужен NAT.
В Микротике управление NAT’ом находится в разделе IP->Firewall->NAT:
probros_portov_mikrotik_5
probros_portov_mikrotik_6

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

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

Первое — это 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 (исходящий интерфейс) — интерфейс, к которому подключена та машина, на которую мы делаем переадресацию. Тут что-либо ставить не имеет смысла.
Далее идут узкоспециализированные параметры, я сейчас не буду на них останавливаться.
В итоге, получается вот такая картина:
probros_portov_mikrotik_9

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

Тут из списка 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. Последнее является более новым и улучшенным вариантом первого, логично использовать его:
probros_portov_mikrotik_11

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

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

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

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

Правило создано, всё работает.
Обратите внимание — дополнительно «открывать» порт не требуется!
Инструкция актуальна для версий прошивки 5 и 6. До версии 7 вряд-ли что-либо изменится.

Источник.