Работа с NAT на маршрутизаторах Mikrotik
Общие моменты
Пример стандартной настройки
Частные случаи и ошибки
Netmap и с чем его едят
Hairpin NAT что за зверь?
Обсуждая NAT в контексте Цисок мы уже поднимали связанную с этим теорию, и поэтому знаем, что есть IP-адреса белые, читай, публичные, а есть серые - приватные, к которым относятся следующие диапазоны:
При этом один и тот же серый айпишник может оказаться у вашего ноутбука, и у принтера дядюшки Сэма где-то в Калифорнии. Конечно, живи они свободно в глобальной паутине, это неминуемо привело бы к конфликту IP-адресов. Поэтому и существует NAT, преобразующий приватные адреса в публичные, а также, например, обеспечивающий видимость хостов за маршрутизаторами.
И всё это NAT - Network Address Translation, трансляция сетевых адресов.
Вспомним L3-уровень модели OSI. На сетевом уровне в заголовке IP-пакета содержится следующая информация:
Соответственно, в маршрутизаторе предусмотрено два направления (в терминологии - Chain, "цепочки") трансляции адресов:
В рамках обработки пакета маршрутизатором он сначала попадает в цепочку dst-nat, а затем пройдя фильтр пакетов и отправившись по пути в соответствии с таблицей маршрутизации оказывается в цепочке src-nat.
Ниже приведена таблица, графически отражающая весь путь пакета. По ней видно, что процесс Destination NAT входит в глобальную цепочку Prerouting, а финальная цепочка называется Postrouting, в которую входит Source NAT, и которая следует за основными этапами обработки пакета.
Что мы из всего этого можем вынести?
Во-первых, адрес и порт назначения пакета изменятся в цепочке dst-nat, до того как будут подвергнуты обработке цепочками input и forward. И тут кроется нюанс. В правилах Firewall нужно писать фильтры с учетом уже изменившегося адреса назначения пакета, иначе магия не произойдет (то есть имея в своей сети сервак с айпишником 192.168.0.15 и открытым портом 3389, в правилах файрволла нужно указывать именно эти данные, не обращая внимания, что снаружи он представлен иначе).
Во-вторых, один и тот же пакет может быть подвергнут обработке сначала в цепочке dst-nat, а затем и в src-nat.
И да, правилами NAT обрабатывается только первый пакет в сессии, а далее всем рулит уже Connection Tracker. Учитывайте это!
Вся настройка производится здесь:
Пакет выбирается по тем же принципам, что и при настройке фильтров там же поблизости, так что в этой статье не будем заострять здесь внимание, а перейдем сразу к действиям, то есть вкладке Action. Стоп-стоп, всё так, да не всё, есть небольшие исключения:
Так, теперь переходим к вкладке Action и действиям, которые в ней предлагаются.
Accept - обработка пакета не производится, адреса назначения/источника останутся неизменными. Это важный момент, например, при работе с IPSec.
Add dst to address list - адрес назначения добавляется в именованный список адресов с именем Adress List на определенное время (отвечает за него поле timeout).
Dst-nat - заменит адрес назначения (dst address) значением, которое прописано в to addresses, а также порт, если в плашке to ports что-то указано. По понятным причинам данное действие работает только в рамках цепочки dstnat и её производных.
Jump - переводит на собственную цепочку, chain, обработки пакетов. В качестве опции указываем имя цепочки.
Log - пакет заносится в Log-файл маршрутизатора и уходит на обработку следующим в списке правилом. Удобная фича при дебаге.
Masquerade - это производная от действия src-nat, в данном случае адрес источника будет заменен на первый адрес out-interface используется исключительно в рамках цепочки srcnat.
Netmap - данное действие используется при так называемом NAT 1:1, это когда пакеты в сеть 1.1.1.0/24 должны быть приведены к адресации 2.2.2.0/24. Данное действие может существовать как в dstnat, так и в srcant.
Passthrough - отсутствие каких-либо действий. Просто передаем пакет на следующее правило. Но счетчик при этом исправно тикая, показывая пакеты прошедшие через это правило. Полезная штука для сбора статистической информации.
Redirect - это производная от dst-nat, в качестве адреса назначения пакета подставляется сам маршрутизатор.
Return - прерывает обработку пакета в цепочке и возвращает его на следующее правило за правилом Action=Jump, которое и передало пакет в эту цепочку.
Same - а это уже частный случай src-nat. Используется он при наличии нескольких адресов для преобразования. Например, в случае наличия нескольких публичных IP.
Src-nat - это действие заменяет source address тем, что выставлено в поле to addresses, а также порт, если что-то вписано в поле to ports. Живет это действие в цепочках srcnat и логически ему близких.
Общие моменты
Пример стандартной настройки
Частные случаи и ошибки
Netmap и с чем его едят
Hairpin NAT что за зверь?
Пример стандартной настройки
Частные случаи и ошибки
Netmap и с чем его едят
Hairpin NAT что за зверь?
Обсуждая NAT в контексте Цисок мы уже поднимали связанную с этим теорию, и поэтому знаем, что есть IP-адреса белые, читай, публичные, а есть серые - приватные, к которым относятся следующие диапазоны:
- 10.0.0.0/8
- 172.16-31.0.0/16
- 192.168.0-255.0/24
При этом один и тот же серый айпишник может оказаться у вашего ноутбука, и у принтера дядюшки Сэма где-то в Калифорнии. Конечно, живи они свободно в глобальной паутине, это неминуемо привело бы к конфликту IP-адресов. Поэтому и существует NAT, преобразующий приватные адреса в публичные, а также, например, обеспечивающий видимость хостов за маршрутизаторами.
И всё это NAT - Network Address Translation, трансляция сетевых адресов.
Вспомним L3-уровень модели OSI. На сетевом уровне в заголовке IP-пакета содержится следующая информация:
- Адрес и порт источника (source address / source port);
- Адрес и порт назначения (destination address / destination port).
Соответственно, в маршрутизаторе предусмотрено два направления (в терминологии - Chain, "цепочки") трансляции адресов:
- src-nat (замена адреса и опционально порта источника);
- dst-nat (замена адреса и опционально порта назначения).
В рамках обработки пакета маршрутизатором он сначала попадает в цепочку dst-nat, а затем пройдя фильтр пакетов и отправившись по пути в соответствии с таблицей маршрутизации оказывается в цепочке src-nat.
Ниже приведена таблица, графически отражающая весь путь пакета. По ней видно, что процесс Destination NAT входит в глобальную цепочку Prerouting, а финальная цепочка называется Postrouting, в которую входит Source NAT, и которая следует за основными этапами обработки пакета.
Что мы из всего этого можем вынести?
Во-первых, адрес и порт назначения пакета изменятся в цепочке dst-nat, до того как будут подвергнуты обработке цепочками input и forward. И тут кроется нюанс. В правилах Firewall нужно писать фильтры с учетом уже изменившегося адреса назначения пакета, иначе магия не произойдет (то есть имея в своей сети сервак с айпишником 192.168.0.15 и открытым портом 3389, в правилах файрволла нужно указывать именно эти данные, не обращая внимания, что снаружи он представлен иначе).
Во-вторых, один и тот же пакет может быть подвергнут обработке сначала в цепочке dst-nat, а затем и в src-nat.
И да, правилами NAT обрабатывается только первый пакет в сессии, а далее всем рулит уже Connection Tracker. Учитывайте это!
Вся настройка производится здесь:
/ip firewall nat
Пакет выбирается по тем же принципам, что и при настройке фильтров там же поблизости, так что в этой статье не будем заострять здесь внимание, а перейдем сразу к действиям, то есть вкладке Action. Стоп-стоп, всё так, да не всё, есть небольшие исключения:
- В рамках dst-nat нам недоступен выбор Out-interface, ведь данная цепочка производит обработку пакета до решения о его маршрутизации, и роутер попросту не знает, куда там этот пакет следует отправить;
- По тем же причинам в цепочке src-nat недоступен выбор In-interface;
- Правила связанные с количеством пакетов и вообще объемом трафика у нас не взлетят, ведь обрабатывается только первый пакет в соединении.
Так, теперь переходим к вкладке Action и действиям, которые в ней предлагаются.
Accept - обработка пакета не производится, адреса назначения/источника останутся неизменными. Это важный момент, например, при работе с IPSec.
Add dst to address list - адрес назначения добавляется в именованный список адресов с именем Adress List на определенное время (отвечает за него поле timeout).
Dst-nat - заменит адрес назначения (dst address) значением, которое прописано в to addresses, а также порт, если в плашке to ports что-то указано. По понятным причинам данное действие работает только в рамках цепочки dstnat и её производных.
Jump - переводит на собственную цепочку, chain, обработки пакетов. В качестве опции указываем имя цепочки.
Log - пакет заносится в Log-файл маршрутизатора и уходит на обработку следующим в списке правилом. Удобная фича при дебаге.
Masquerade - это производная от действия src-nat, в данном случае адрес источника будет заменен на первый адрес out-interface используется исключительно в рамках цепочки srcnat.
Netmap - данное действие используется при так называемом NAT 1:1, это когда пакеты в сеть 1.1.1.0/24 должны быть приведены к адресации 2.2.2.0/24. Данное действие может существовать как в dstnat, так и в srcant.
Passthrough - отсутствие каких-либо действий. Просто передаем пакет на следующее правило. Но счетчик при этом исправно тикая, показывая пакеты прошедшие через это правило. Полезная штука для сбора статистической информации.
Redirect - это производная от dst-nat, в качестве адреса назначения пакета подставляется сам маршрутизатор.
Return - прерывает обработку пакета в цепочке и возвращает его на следующее правило за правилом Action=Jump, которое и передало пакет в эту цепочку.
Same - а это уже частный случай src-nat. Используется он при наличии нескольких адресов для преобразования. Например, в случае наличия нескольких публичных IP.
Src-nat - это действие заменяет source address тем, что выставлено в поле to addresses, а также порт, если что-то вписано в поле to ports. Живет это действие в цепочках srcnat и логически ему близких.
Общие моменты
Пример стандартной настройки
Частные случаи и ошибки
Netmap и с чем его едят
Hairpin NAT что за зверь?