У меня есть следующая цель: запуск softhether vpn и веб-приложений на порту 443. Я хочу, чтобы весь трафик приходил на haproxy, который отправляет vpn в один контейнер, а остальной - в другой контейнер (traefik), который, наконец, перераспределяется между соответствующими контейнерами на основе в веб-приложении. По-видимому, это возможно, но я не могу заставить его работать.
Установка: 2 виртуальных машины в XenServer (как на базе Debian, так и на запущенном докере)
VM1 адрес 10.0.0.244
VM2 адрес 10.0.0.245
ВМ1:
запуск контейнера haproxy с использованием сетевого режима "хост", прослушивающего порт 443 (т.е. 10.0.0.245:443)
запущен softhether vpn server контейнер, используя сетевой режим "host", прослушивающий порт 992 (т.е. 10.0.0.245:992)
ВМ2:
Важно отметить, что если DNS указывает webappX.domain.com на 10.0.0.245, то traefic выполняет свою работу, и все веб-приложения доступны через браузер. Кроме того, когда я пытаюсь подключиться к softhether vpn с моего Mac на порт 992, соединение устанавливается (оно также работало, когда я экспериментировал с более мягким прослушиванием порта 443 и отключением haproxy). Запись DNS для vpn.domain.com указывает на 10.0.0.244.
После добавления haproxy я переназначил записи DNS для webappX.domain.com на 10.0.0.244.
Вот моя конфигурация haproxy (я подозреваю, что где-то здесь кроется проблема):
defaults
timeout client 30s
timeout server 30s
timeout connect 5s
frontend ft_https
bind :443
mode tcp
tcp-request inspect-delay 5s
tcp-request content accept if { req.ssl_hello_type 1 }
default_backend bk_https
backend bk_https
mode tcp
acl vpn_app req_ssl_sni -i vpn.domain.com
use-server server-se if vpn_app
use-server server-traefik if !vpn_app
option ssl-hello-chk
server server-se localhost:992 check
server server-traefik 10.0.0.245:443 check
Одним из ключевых требований является то, что traefik должен получать полный URL (например, https://webappX.domain.com), чтобы он мог правильно выполнять обратное проксирование. Также прерывание SSL не должно происходить на haproxy.
Есть ли у вас какие-либо советы / предложения, что нужно изменить или попробовать, чтобы это работало?
Спасибо. Брэндон.
Что ж, у меня был частичный успех, так как он начал работать для веб-приложений, а vpn - нет. После проб и ошибок и большого количества поисковых запросов я нашел этот пост: https://discourse.haproxy.org/t/haproxy-not-switching-between-backends/1903/8
которые предполагают, что если я использую подстановочный сертификат (что я использую), то SNI не будет работать должным образом. Вот почему веб-приложения работают (потому что каждый запрос фактически идет на 1 адрес сервера, который является traefik, и он дополнительно разделяет трафик), но я никогда не могу добраться до сервера vpn.
Таким образом, решение состоит в том, чтобы использовать собственные сертификаты для каждого хоста (что я не хочу делать) или не иметь такой настройки. Если нет другого способа, например, альтернативы ha-proxy ... Есть предложения?
Ура, Брэндон.