Как использовать один порт для двух приложений?
У меня был https на моем сайте очень хорошо до недавнего времени, что мое правительство решило заблокировать почти все протоколы VPN и только сейчас openconnect работает правильно.
Поэтому я установил и настроил openconnect на моем сервере, к сожалению, это не позволяет мне запустить службу как мой nginx использовал порт 443 (openconnect использует порт 443), поэтому я удалил конфигурацию https из моего nginx и беги openconnect оказание услуг.
Теперь я хочу настроить https на моем nginx также.
Я знаю, что один порт не может нормально использоваться двумя приложениями / службами. Но есть ли способ использовать порт 443 на nginx а также openconnect и то и другое haproxy или же traefik или же nginx сам контролировать их и заставить их понять, хочет ли VPN-клиент или браузер подключиться?
Изменить: я нашел этот URL, но мне интересно, если это моя проблема.
2 ответа
https://ocserv.gitlab.io/www/recipes-ocserv-multihost.html
Эта ссылка решила мою проблему, но потребовались некоторые изменения.
В /etc/haproxy/haproxy.cfg вы должны изменить две строки default раздел из
mode http
option httplog
в
mode tcp
option tcplog
Также в коде этого сайта есть строка, которая гласит:
use-server server-vpn if vpn-app
use-server server-web if web-app
use-server server-vpn if !vpn-app !web-app
Это не сработало для меня, и таким образом он направляет весь трафик на server-vpn, но после того, как я прокомментировал третью строку, я смог заставить его работать.
Лично, как указал @amin-vakil, я обнаружил, что использование обратного прокси-сервера (например, haproxy или nginx) перед ocserv работает хорошо, ЗА ИСКЛЮЧЕНИЕМ, есть одна загвоздка. Если вы хотите иметь возможность использовать DTLS и используете haproxy, haproxy по умолчанию не проксирует UDP (который используется DTLS), поэтому в итоге я использовал haproxy ТОЛЬКО для маршрутизации TCP-соединений и заставил ocserv прослушивать на основном интерфейсе для UDP, только на другом порту. Поскольку DTLS согласовывается после того, как установлено начальное соединение, ocserv ОБЪЯВЛЯЕТ порт, который будет использоваться для согласования, это не кажется проблемой.
Моя настройка сети выглядит примерно так:
VPS BOX
|---------------------------------------------------------------------------|
| others *< ----+ |
| | vpn.<domain>.com rev proxy pass-thru to |
| |------@HA Proxy -----------| 127.0.1.1:443 |
| | | (SSL handled by ocserv) |
| [TCP 80 & TCP 443] | |
inet --> public IP - > 10.10.0.5 |---> 127.0.1.1 |
| [udp 44443] [tcp 443] |
| \ | |
| \ @ |
| \-------------------------------------=@ocserv listening on |
| tcp 127.0.1.1:443 & udp 10.10.0.5:44443 |
|---------------------------------------------------------------------------|