В этой статье поговорим про NAT в Mikrotik.
NAT (Network Address Translation) – это процедура изменения либо адреса источника (Source address), либо адреса назначения (Destination Address) в заголовке пакета.
Дело в том, что ipv4 имеет ограниченное количество ip-адресов, и это было понятно изначально при разработке протокола ipv4. Уже к 1994 году стало понятно, что необходимо как-то выпутываться из сложившейся ситуации (не было альтернативного протокола, который мог бы расширить количество ip-адресов). Присутствовал только старый IPv4, а количество устройств в сети Интернет росло, росло, росло и, собственно, продолжает расти до сих пор. Поэтому, для начала придумали RFC1918, который описывает использование не маршрутизируемых сетей в локальных сегментах – таких как: 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12 (так называемые «серые» адреса).
Если вы используете эти адреса и нужно попасть в глобальную сеть Интернет, Вам нужно провести автоматическое изменение либо адреса источника пакета, либо адреса назначения пакета – для этого и существует NAT.
Для чего используется NAT?
Самое частое использование — это доступ из локальной сети с серыми адресами куда-то в интернет.
Открыть доступ из внешней сети к ресурсам (напр., веб-сервер) находящимся во внутренней сети (так называемый «проброс портов»).
При «пробросе портов» для хоста с приватным IP-адресом, когда пакет проходит правила на маршрутизаторе, у пакета изменяется Source адрес пакета и до публичного адреса отправляется пакет с внешним адресом, который может прекрасно маршрутизироваться в глобальной сети Интернет. Такая ситуация называется Source Nat. В Mikrotik можно посмотреть, что есть дефолтное правило, которое реализует данную функцию.
Это правило находится в IP – Firewall — NAT (раздел NAT отвечает за преобразование адресов и портов, заголовках пакетов, сегментах, дейтаграммах и так далее).
В данном случае правило Source NAT — процедура изменения в заголовке пакета адреса (например, адреса локальной сети), где есть условие, что пакет, идущий в сторону Out interface List – WAN (в сторону интернета) и Action — masquerade.
Masquerade — это автоматическое выяснение внешнего ip-адреса, с которым будет идти через «внешний» Out interface и подставление его в заголовки пакета.
Если внешний ip-адрес статический, то более выгодно использовать процедуру Source NAT.
Можно посмотреть, что на внешнем интерфейсе ip-адрес 198.51.100.16 и использовать его в качестве правила Source Nat — это будет эффективнее по производительности, т.к. роутеру не понадобится выяснять внешний адрес на внешнем интерфейсе.
Или вторая процедура, которая описывается как DST-NAT и для ее работы используются цепочка DSTNAT — это процедура, например, для проброса портов с внешнего интерфейса во внутреннюю (локальную) сеть.
Или, например, внутри локальной сети есть какой-то веб-сервер, который слушает TCP 80 порт и нужно, чтобы он был доступен из интернета. Только вот, если сказать адрес сервера 192.168.88.2, никто не сможет получить доступ к веб-серверу.
Нужно сделать правило, которое будет решать вопрос доступа из внешней сети во внутреннюю сеть.
Для этого нужно создать правило — цепочка DSTNAT, протокол TCP, Destination Port – 80, In interface List – WAN (внешний). (можно использовать In interface, если наличие интернета только на одном интерфейсе), Action – dst-nat на IP-адрес 192.168.88.2
/ip firewall nat
add action=dst-nat chain=dstnat dst-port=80 in-interface-list=WAN protocol=tcp to-addresses=192.168.88.2 to-ports=80
Если служба запущена на 80 порту, то в Action — dst-nat, to Ports не нужно указывать 80 порт, т.к. это, по сути, будет повторение одного и того же действия. Роутер будет в заголовках сегмента 4 уровня менять TCP 80 на TCP 80, что немножко повлияет на производительность. Поэтому, в ситуации прямого проброса, нужно убрать поле to ports.
В другой ситуации, когда внешний 80 порт нужно пробросить на внутренний 8080, тогда поле to ports нужно заполнить.
Также можно пробросить несколько портов, например, 80, 443, 8080 и тд.
В данном случае не нужно указывать to ports, проброс будет осуществляться с порта на порт. То есть – с 80 на 80, с 443 на 443, с 8080 на 8080.
/ip firewall nat
add action=dst-nat chain=dstnat dst-port=80,443,8080 in-interface=WAN protocol=tcp to-addresses=192.168.88.2
Если нужно пробросить все эти порты на один порт, то нужно указать в to ports нужный порт.
Если необходимо разрешать это все дело в файрволле, например, для производительности или, если не используется в правиле «кроме DST Nat» в Drop Forward и на Interface list WAN (внешний), то необходимо писать правила, которые будут разрешать проброшенные порты с внешнего интерфейса и указать порты, которые открыты на веб-сервере (все те порты, на которые нужно пробросить с внешнего интерфейса).
Например, если пробрасывается внешний порт TCP 8080 на порт внутренний TCP 80, то в Forward нужно указать порт TCP 80.
/ip firewall nat
add action=dst-nat chain=forward dst-port=80 in-interface=WAN protocol=tcp to-addresses=192.168.88.2 to-ports=8080
На этом знакомство с NAT в Mikrotik завершено.
С вами скоро свяжутся