@Kamikaze

Как совместить с помощью nginx sstp vpn + https бэкенды?

Есть nginx с конфигурацией stream примерно такой:
stream {
    map $ssl_preread_server_name $name {
        vpn.example.com vpn;
        default https;
    }

    upstream https {
        server 127.0.0.1:443;
    }

    upstream vpn {
        server 192.168.23.4:443;
    }

    server {
        listen 192.168.23.101:443;
        proxy_pass $name;
        ssl_preread on;
        # proxy_protocol on;
    }
}


server {
    listen 127.0.0.1:443 ssl;
    server_name site.example.com;
    ssl_certificate     /root/.acme.sh/*.example.com/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/*.example.com/*.example.com.key;

    location / {
        proxy_pass http://site.local:8080;
    }
}


В таком виде работает как https, так и sstp vpn, но теряется source ip и все коннекты идут от 127.0.0.1. А хотелось бы фильтровать по адресам, например на какие-то сайты пускать только с адресов, выдаваемых пользователям VPN.
Как одно из решений https://docs.nginx.com/nginx/admin-guide/load-bala..., в stream вставляем proxy_protocol on(в моем примере он закомментирован), в бэкендах в listen добавляем proxy_protocol, всё отлично, исходные адреса теперь есть, фильтровать можно, но VPN не работает, вываливая ошибки вида:
[error] 11270#11270: *384329 recv() failed (104: Connection reset by peer) while proxying and reading from upstream, client: 1.2.3.4, server: 192.168.23.
101:443, upstream: "192.168.23.4:443", bytes from/to client:0/0, bytes from/to upstream:0/225


Тут в общем-то два вопроса возникает:
1. Можно ли при помощи proxy_protocol пробросить протокол SSTP, или это в принципе не получится и я делаю глупость?
2. Если отключать всё же proxy_protocol, где погибает source ip клиента и как его можно восстановить, для возможности ограничения доступа при помощи ngx_http_access_module?
  • Вопрос задан
  • 906 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы