Открытая маршрутизация VPN с nginx

Вопрос или проблема

У меня есть машина EC2 с публичным IP 123.123.123.123. На этой машине у меня установлен OpenVPN, и OpenVPN подключен к этой машине.

ifconfig utun6

utun6: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 inet 10.8.0.6 –> 10.8.0.5 netmask 0xfffffffc nd6 options=201<PERFORMNUD,DAD>

Также в файле клиента OpenVPN

route-nopull route 123.123.123.123 255.255.255.255

nginx имеет

allow 10.8.0.0/24; deny all;

Таким образом, когда я в браузере захожу на 123.123.123.123, я получаю таймаут соединения.

Моя задача – запретить доступ к хосту без VPN.

Ответ или решение

Для решения задачи маршрутизации OpenVPN с использованием nginx в вашей конфигурации необходимо рассмотреть несколько ключевых аспектов и применить их для достижения требуемого результата, а именно блокировки доступа к вашему серверу без использования VPN.

Теория:

Начнем с базовой теории. Вы используете OpenVPN в связке с nginx для ограничения доступа к вашему серверу EC2, имеющему публичный IP-адрес 123.123.123.123. Основная идея в том, чтобы позволить доступ только через VPN, в то время как все остальные попытки подключения должны быть заблокированы. Для этого конфигурация nginx настроена таким образом, чтобы разрешать доступ только с IP-адресов в диапазоне 10.8.0.0/24, который является диапазоном, типично используемым для клиентов OpenVPN.

OpenVPN устанавливает виртуальный сетевой интерфейс (utun6 в вашем случае), через который маршрутизируется трафик. Это позволяет клиентам подключаться к вашему серверу по внутренней IP-адресации, предоставляемой VPN. Параметр allow 10.8.0.0/24; deny all; в конфигурации nginx гарантирует, что только устройства, подключенные через VPN, смогут взаимодействовать с вашим сервером.

Пример:

На вашем сервере EC2 установлен OpenVPN, и, как видно из вывода команды ifconfig utun6, VPN-клиент получает внутренний IP (10.8.0.6 в вашем случае). Ваш клиентский файл OpenVPN содержит параметр route-nopull route 123.123.123.123 255.255.255.255, который предотвращает автоматическое применение маршрутов от VPN-сервера, за исключением маршрута к вашему публичному IP-адресу.

Проблема заключается в том, что при попытке доступа к серверу через браузер по публичному IP вы получаете timeout. Это связано с тем, что трафик не проходит корректно через VPN либо из-за неправильной настройки маршрутизации (возможно, маршрут по умолчанию не настроен), либо из-за того, что ваш nginx не обрабатывает соединения от VPN-клиентов должным образом.

Применение:

  1. Проверка OpenVPN:

    • Убедитесь, что ваш OpenVPN-сервер правильно настроен и функционирует. Важно, чтобы все клиенты получали IP-адреса из заданного вами диапазона (10.8.0.0/24) и могут передавать трафик через VPN.
    • Перепроверьте конфигурационный файл сервера OpenVPN чтобы убедиться, что диапазоны IP-адресов и другие параметры (например, push "route 123.123.123.123 255.255.255.255") настроены правильно.
  2. Конфигурация ngnix:

    • В вашем конфиге nginx проверьте строку allow 10.8.0.0/24; deny all;. Убедитесь, что она находится в правильном контексте (например, в блоке server{}), что обеспечивает фильтрацию на уровне сервера.
    • Проверьте, чтобы не было конфликтующих правил в других файлах конфигурации nginx и, что все изменения сохранены корректно.
  3. Маршрутизация и сеть:

    • На клиенте VPN убедитесь, что маршрут 123.123.123.123 действительно прописан. Используйте на клиенте команду route (на Windows) или ip route (на Linux) для проверки текущих маршрутов.
    • Проверьте настройки файрволла как на сервере, так и на клиенте. Убедитесь, что правила iptables или другие аналогичные не блокируют соединения с вашего клиента VPN на сервер.
  4. Тестирование:

    • Запустите tcpdump или wireshark на сервере для наблюдения за входящими соединениями на VPN-интерфейс и убедитесь, что пакеты действительно достигают сервера.
    • Проверьте, нет ли потерь пакетов или других проблем с сетевой связью между клиентом и сервером.

Настроив все необходимые конфигурации и проверив их выполнение, вы сможете добиться того, чтобы доступ к вашему серверу возможен был исключительно через VPN. Таким образом, все несанкционированные внешние попытки соединения будут блокироваться nginx.

Оцените материал
Добавить комментарий

Капча загружается...