Сервер в кармане, или просто о сложном!

главная - Статьи - Mikrotik



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):

  1. клиент с IP 5.5.5.5 обращается на микротик (1.2.3.4) на порт 443.
  2. Микротик подменяет адрес назначения с 1.2.3.4 на 192.168.88.100 и отправляет пакет дальше.
  3. Веб-сервер получает пакет с адреса 5.5.5.5 и отправляет ответ также на адрес 5.5.5.5.
  4. Микротик благополучно отправляет ответ сервера клиенту.
  5. Клиент видит сайт.

б) клиент из этой же локальной сети (условно, адрес клиента 192.168.88.115):

  1. клиент с IP 192.168.88.115 обращается на микротик (1.2.3.4) на порт 443.
  2. Микротик подменяет адрес назначения с 1.2.3.4 на 192.168.88.100 и отправляет пакет дальше.
  3. Веб-сервер получает пакет с адреса 192.168.88.115 и отправляет ответ также на адрес 192.168.88.115!
  4. Пакет идет напрямую вам (на 192.168.88.115)! Но ваш компьютер не ждет ничего от 192.168.88.100! Пакет отбрасывается!
  5. Клиент не видит сайт.

Решение:

/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):

  1. клиент с IP 192.168.88.115 обращается на микротик (1.2.3.4) на порт 443.
  2. (DST-NAT) Микротик подменяет адрес назначения с 1.2.3.4 на 192.168.88.100
  3. (SRC-NAT) Микротик подменяет адрес источника (src) c 192.168.88.115 на свой: 192.168.88.1 и отправляет пакет веб-серверу.
  4. Веб-сервер получает запрос с адреса 192.168.88.1 и отвечает ему же.
  5. Микротик получает ответ от веб-сервера, делает обратные преобразования адреса, и отправляет ответ клиенту (192.168.88.115) от имени ответа с 1.2.3.4.
  6. Клиент видит сайт.

При этом правило srcnat работает только для тех клиентов, которые находятся в той же локальной сети.

Схема работы NAT:

Mikrotik: NAT

Профит. Мы "починили" проброс портов. Теперь и из локалки и из внешнего мира все работает так, как надо.



Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?