OpenVPN не маршрутизирует порт 80

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

Я хочу, чтобы веб-служба (gitlab) была доступна только при подключении к VPN. Я добиваюсь этого, разрешая подключения только из сети 10.8.0.0/24 в nginx (внешний, не тот, что идет с gitlab).

ОДНАКО, если я пытаюсь запустить его на порту 80, nginx видит мой реальный IP-адрес клиента, даже при подключении к VPN. Если я запускаю его на любом другом порту, например, 8000, то он видит мой IP VPN при подключении, как и ожидалось.

Это создает много проблем, поскольку gitlab не был разработан для работы на другом порту, и многие ссылки внутри gitlab, включая “clone” и “push”, “забывают” о порте, требуя ручного исправления каждый раз…

Есть ли что-то, что я могу сделать, чтобы заставить его работать и на порту 80? Я использую этот скрипт OpenVPN: https://github.com/angristan/openvpn-install
Я также использую обычный Nginx и Gitlab Omnibus, хотя я не думаю, что они являются проблемой.

Изменить:
Конфигурация клиента:

client
proto udp
explicit-exit-notify
remote example.com 1194
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
verify-x509-name server_<identifier> name
auth SHA256
auth-nocache
cipher AES-128-GCM
tls-client
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
ignore-unknown-option block-outside-dns
setenv opt block-outside-dns # Предотвращение утечки DNS на Windows 10
verb 3

Конфигурация сервера:

port 1194
proto udp6
dev tun
user nobody
group nogroup
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 192.168.100.1"
push "redirect-gateway def1 bypass-dhcp"
server-ipv6 fd42:42:42:42::/112
tun-ipv6
push tun-ipv6
push "route-ipv6 2000::/3"
push "redirect-gateway ipv6"
dh none
ecdh-curve prime256v1
tls-crypt <tls-key>
crl-verify <crl-file>
ca <ca-cert>
cert <server-cert>
key <server-key>
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
client-config-dir /etc/openvpn/ccd
status /var/log/openvpn/status.log
verb 3

Ваш адрес git.domain.tld разрешается в ваш публичный IP. Поэтому машина клиента подключится к публичному IP-адресу, и если маршрут по умолчанию клиента не проходит через туннель VPN, то подключение произойдет с использованием публичного IP-адреса клиента.

Чтобы исправить это, нужно установить A-запись, чтобы она разрешалась в частный IP-адрес, используемый в туннеле.

.

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

Проблема, связанная с маршрутизацией порта 80 через OpenVPN, требует внимательного изучения настройки VPN и серверного окружения, особенно когда речь идет о доступе к веб-сервису, такому как GitLab, через VPN-туннель. Рассмотрим теоретическую основу, практические примеры и возможные решения для данной ситуации.

Теория

OpenVPN функционирует как гибкий и мощный инструмент для создания защищенных соединений через общий или небезопасный интернет. Он позволяет маршрутизировать интернет-трафик через защищенные туннели, обеспечивая безопасность данных пользователей. Один из основных принципов работы OpenVPN — это перенаправление трафика через назначенные интерфейсы VPN, такими как tun или tap, что позволяет клиентам демонстрировать локальный адрес сети VPN (например, 10.8.0.0/24) вместо публичных IP-адресов.

Возникновение проблемы с маршрутизацией порта 80 указывает на то, что в определённой конфигурации не происходит переброса трафика через туннель OpenVPN. Следовательно, IP-адрес клиента, который используют для определения доступа к веб-сервису, отображается неверно.

Пример

В вашем примере, вы описываете, что при подключении к VPN трафик через порт 80 позволяет увидеть реальный IP-адрес клиента, а использование других портов, таких как 8000, корректно передает IP VPN. Это может быть связано с несколькими факторами, включая поведение сетевых маршрутизаторов, брандмауэров или особенностей маршрутизации HTTP-трафика.

Применение

  1. Настройки DNS

    Один из обсуждаемых способов решения проблемы — это корректировка A-записи для домена, к которому применяется OpenVPN. В данном случае, адрес git.domain.tld должен разрешаться в частный IP-адрес внутри туннеля, например, в адрес из пула 10.8.0.0/24, что гарантирует, что соединения проходят через туннель, а не напрямую по публичному интернету.

  2. Настройка сервера OpenVPN

    Проверьте, что директивы, передающие маршруты и перенаправляющие шлюзы, корректно работоспособны и согласованы с вашей сетью. Ваша конфигурация сервера включает строки:

    push "redirect-gateway def1 bypass-dhcp"

    Эта команда перенаправляет весь трафик, в том числе HTTP(порты 80 и 443), через VPN. Убедитесь, что она правильно объединена с настройками сети и брандмауэра.

  3. Анализировать брандмауэр и правила NAT

    Убедитесь, что ваши сетевые настройки не конфликтуют с перенаправлением VPN-трафика. Некоторые маршрутизаторы могут иметь исключения для порт 80 из-за его популярности и прохода через открытый интернет.

  4. Настройка Nginx

    Дополнительно вы можете исследовать настройку Nginx, отвечающего за прием этих подключений. Параметры Nginx могут включать real_ip_header и set_real_ip_from, что позволяет корректно определять IP-адреса в определенных сценариях использования через прокси-сервера.

  5. Конфигурация клиента

    Проверьте, что клиентская конфигурация не включает параметры, отклоняющие маршрутизацию HTTP через туннель. Например, если на клиенте установлены VPN приложения с различными задаваемыми параметрами маршрутизации и фильтрации трафика, это может повлиять на функционал VPN.

Заключение

Ваша задача — обеспечить, чтобы все составляющие — сервер OpenVPN, маршрутизатор, DNS, Nginx и GitLab — работали совместно для достижения ожидаемого результата. Применение этих шагов должно помочь в разрешении конфликта маршрутизации порта 80 через туннель OpenVPN и улучшении общей конфигурации системы для обеспечения безопасности и функциональности.

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

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