Как настроить обратный прокси на роутере Mikrotik?

Добрый день! 

У меня есть следующая ситуация: 
- Используется MikroTik с внешним IP-адресом; 
- Настроен nginx-proxy, который работает вместе с двумя веб-серверами (всё это на одной машине). 

Работа внутренней сети выглядит следующим образом: nginx-proxy принимает HTTPS-запросы и направляет их на соответствующие веб-серверы, находящиеся на портах 8090 и 8080. Локально всё функционирует корректно: при обращении к сайт1.ру пользователь попадает на веб-сервер с портом 8080, а при обращении к сайт2.ру — на сервер с портом 8090.

Теперь, когда мы пытаемся настроить всё для работы через интернет, мы пробрасываем порт 443 на nginx-proxy на MikroTik и перенастраиваем DNS на внешний IP-адрес. Прокси корректно обрабатывает запросы, и сайты сайт1 и сайт2 открываются без проблем. 

Однако, в этом случае пользователи в локальной сети MikroTik не могут получить доступ к HTTPS-сайтам. 

Я выдвинул следующую гипотезу: 
- Клиент отправляет пакет на порт 443; 
- HTTPS-сайт отвечает на порт 443; 
- MikroTik перенаправляет трафик на nginx-proxy; 
- Прокси не понимает, откуда пришёл трафик и куда его перенаправить, так как домен не запрашивался.

Помогите, пожалуйста, понять, как можно настроить систему так, чтобы прокси и интернет работали корректно одновременно. :)

Я встречал информацию, что многие пользователи успешно реализовали подобные схемы, что вызывает у меня недоумение. Я проверял настройки на двух различных MikroTik, один из которых был с заводскими настройками.
  • 18 ноября 2024 г. 12:33
Ответы на вопрос 2
Добрый день!

Ваша ситуация вполне распространена, и проблема, с которой вы столкнулись, связана с маршрутизацией и тем, как работает NAT (Network Address Translation) на устройствах MikroTik. Когда пользователи в локальной сети пытаются получить доступ к внешнему IP-адресу, MikroTik не знает, как правильно вернуть трафик обратно во внутреннюю сеть. Ниже приведены шаги, которые могут помочь в решении этой проблемы.

### Решение 1: Настройка DNS для локальных пользователей

1. **Настройка DNS:** Если у вас есть возможность, настройте локальный DNS-сервер, который будет разрешать доменные имена `сайт1.ру` и `сайт2.ру` на локальные IP-адреса (внутренние адреса Nginx-прокси). Это позволяет локальным пользователям получать доступ к сайтам через их доменные имена, минуя NAT:
    - сайт1.ру -> локальный IP Nginx (например, 192.168.1.10)
    - сайт2.ру -> локальный IP Nginx (например, 192.168.1.10)

2. **Установка записи в hosts (если DNS недоступен):** Если настройки DNS не представляются возможными, вы можете временно внести изменения в файл hosts на каждом компьютере в локальной сети, добавив соответствующие записи для каждого домена.

### Решение 2: Настройка NAT на MikroTik

Если вы хотите, чтобы локальные пользователи могли использовать внешние IP-адреса, вам нужно настроить MikroTik на "hairpin NAT" (или "NAT loopback"). Вот пошаговое руководство:

1. **Настройка NAT правил для hairpinning:**
   - Перейдите в `IP` -> `Firewall` -> `NAT`.
   - Добавьте новое правило NAT для hairpinning.
   - Введите следующие значения:

     - **Chain**: `dstnat`
     - **Src. Address**: укажите адреса вашей локальной сети (например, 192.168.1.0/24)
     - **Dst. Address**: укажите ваш внешний IP-адрес
     - **Protocol**: `tcp`
     - **Dst. Port**: `443`
     - **Action**: `dst-nat`
     - **To Addresses**: укажите локальный IP Nginx-прокси (например, 192.168.1.10)
     - **To Ports**: `443`

2. **Примените аналогичные правила для HTTP (порт 80)**, если у вас есть такие запросы.

Пример команды для создания правила в терминале MikroTik (вводить по одной строке):
```shell
/ip firewall nat add chain=dstnat src-address=192.168.1.0/24 dst-address=<внешний_IP> protocol=tcp dst-port=443 action=dst-nat to-addresses=192.168.1.10 to-ports=443
```

### Решение 3: Используйте SSL с Let's Encrypt

Если вы используете Let's Encrypt для получения сертификатов SSL для ваших сайтов, убедитесь, что ваш Nginx настроен таким образом, чтобы он принимал запросы как на внешний, так и на внутренний IP.

### Проверка

После выполнения этих шагов обязательно проверьте, чтобы:
- На роутере MikroTik проверили, что прописаны необходимые NAT правила.
- Система имени (DNS) правильно разрешает доменные имена для локальной сети.

Теперь ваши пользователи в локальной сети должны иметь возможность получить доступ к сайтам через их доменные имена так же, как пользователи из Интернета.

Если у вас все еще есть проблемы, проверьте журналы MikroTik, чтобы убедиться, что запросы поступают корректно и обрабатываются в соответствии с вашими правилами.
Указать какой внешний ip слушаем (если hairpin nat) 
Иначе можно указать интерфес wan

В вашей ситуации вы ВЕСЬ трафик 443 порта заворачиваете из lan в lan
Похожие вопросы