Mikrotik NAT Hairpin - доступ из своей локальной сети
Дата обновления: 31.08.2021Теги: Mikrotik
Настроив проброс порта с внешнего интерфейса микротика в локальную сеть (например, веб-сервер пробросили), все здорово, если обращаться к опубликованному ресурсу снаружи сети. Но если попробовать открыть этот же ресурс из той же локальной сети, то сайт не откротся. Как так? Вы же даже не где-то, вы с веб-сервером в одной локальной сети! Почему не работает?
Схема:
<INTERNET> - 1.2.3.4 [MIKROTIK] 192.168.88.1 - LAN (вы - пусть 192.168.88.115, веб-сервер: 192.168.88.100).
Правило DST-nat для доступа к веб-серверу снаружи:
/ip firewall nat
add action=dst-nat chain=dstnat dst-address=1.2.3.4 dst-port=443 \
protocol=tcp to-addresses=192.168.88.100 to-ports=443
Все ок, схема работает снаружи сети.
Но если, находясь в одной локальной сети с веб-сервером (192.168.88.0/24), вы попробуете открыть сайт, то ничего не выйдет. Счетчики пакетов даже будут немного увеличиваться. Но страницу сайта вы не увидите. Почему?
Схема прохождения пакетов:
а) клиент из интернет (условно, адрес удаленного клиента 5.5.5.5):
- клиент с IP 5.5.5.5 обращается на микротик (1.2.3.4) на порт 443.
- Микротик подменяет адрес назначения с 1.2.3.4 на 192.168.88.100 и отправляет пакет дальше.
- Веб-сервер получает пакет с адреса 5.5.5.5 и отправляет ответ также на адрес 5.5.5.5.
- Микротик благополучно отправляет ответ сервера клиенту.
- Клиент видит сайт.
б) клиент из этой же локальной сети (условно, адрес клиента 192.168.88.115):
- клиент с IP 192.168.88.115 обращается на микротик (1.2.3.4) на порт 443.
- Микротик подменяет адрес назначения с 1.2.3.4 на 192.168.88.100 и отправляет пакет дальше.
- Веб-сервер получает пакет с адреса 192.168.88.115 и отправляет ответ также на адрес 192.168.88.115!
- Пакет идет напрямую вам (на 192.168.88.115)! Но ваш компьютер не ждет ничего от 192.168.88.100! Пакет отбрасывается!
- Клиент не видит сайт.
Решение:
/ip firewall nat
add action=dst-nat chain=dstnat dst-address=1.2.3.4 dst-port=443 \
protocol=tcp to-addresses=192.168.88.100 to-ports=443
add action=masquerade chain=srcnat dst-address=192.168.88.100 \
protocol=tcp dst-port=443 src-address=192.168.88.0/24
При этом (если клиент из этой же локальной сети, тот же 192.168.88.115):
- клиент с IP 192.168.88.115 обращается на микротик (1.2.3.4) на порт 443.
- (DST-NAT) Микротик подменяет адрес назначения с 1.2.3.4 на 192.168.88.100
- (SRC-NAT) Микротик подменяет адрес источника (src) c 192.168.88.115 на свой: 192.168.88.1 и отправляет пакет веб-серверу.
- Веб-сервер получает запрос с адреса 192.168.88.1 и отвечает ему же.
- Микротик получает ответ от веб-сервера, делает обратные преобразования адреса, и отправляет ответ клиенту (192.168.88.115) от имени ответа с 1.2.3.4.
- Клиент видит сайт.
При этом правило srcnat работает только для тех клиентов, которые находятся в той же локальной сети.
Схема работы NAT:
Профит. Мы "починили" проброс портов. Теперь и из локалки и из внешнего мира все работает так, как надо.
Авторизуйтесь для добавления комментариев!