如何使用 SSTP 和 HTTPS 配置 HAproxy

如何使用 SSTP 和 HTTPS 配置 HAproxy

我正在使用带有 SSTP 的 MikroTik 路由器,并且我有一个运行带有 HTTP 和 HTTPS 的 httpd 的 Fedora 服务器,但我只有来自我的 ISP 的一个 IPv4 地址。

我目前有 SSTP 在端口 444 上运行,但我需要将其移动到端口 443 以绕过防火长城(最近中国政府开始阻止 PPTP,所以我想完全隐藏在端口 443 上)。

我找到了关于 HAproxy 的 SNI 负载平衡的文档,但我还没有让它工作,例如 https://www.haproxy.com/blog/enhanced-ssl-load-balancing-with-server-name-indication-sni-tls-extension/

这是我的设置(编辑于 2018 年 7 月 5 日 22:20 CET)

frontend  main 192.168.0.3:443 ssl ca-cert /etc/pki/tls/certs/sstp.crt
    use_backend sstp if { ssl_fc_sni sstp.mydoamin.com }
    use_backend websites if { ssl_fc_sni www.mydomain.com }
    default_backend             websites

backend websites
    mode        tcp
    balance     roundrobin
    server      www 127.0.0.1:443 check
backend sstp
    mode        tcp
    balance     roundrobin
    server      router 192.168.0.1:444 ca-cert /etc/pki/tls/certs/sstp.crt

编辑后端以包含 ca-cert 后,当我将 default_backend 更改为 sstp 时,我可以获得 sstp 连接

haproxy -d 没有给我太多调试信息。我对使 SNI 工作的语法不够熟悉,但我正在取得进展...

刚刚尝试了示例中的确切语法,但还是不起作用

frontend  main 192.168.0.3:443 ssl ca-cert /etc/pki/tls/certs/sstp.crt
    use_backend sstp if { ssl_fc_sni sstp.example.com }
    acl application_1 req_ssl_sni -i sstp.example.com
    use_backend sstp if application_1
    default_backend             websites

答案1

终于破解了。这是解决方案:

frontend  main 192.168.0.3:443 ssl
    tcp-request inspect-delay 5s
    tcp-request content accept if { req.ssl_hello_type 1 }
    use_backend websites if { req_ssl_sni -m found }
    default_backend             sstp

这里唯一的问题是使用公共 IP 不起作用。

于 2018 年 7 月 6 日 13:00 CET 编辑,将 req_ssl_sni 从匹配我的域名更改为仅检查是否存在 SNI

逻辑(又名访问控制列表)的文档可在此处找到 https://www.haproxy.com/de/documentation/hapee/1-7r1/traffic-management/acls/

相关内容