使用 Haproxy 作为 Nginx (SSL)、OpenVPN 和 OpenSSH 的 TCP 前端。超时,无连接

使用 Haproxy 作为 Nginx (SSL)、OpenVPN 和 OpenSSH 的 TCP 前端。超时,无连接

我正在尝试配置 Haproxy 在公共端口 443 上运行并将 TCP 流量发送到正确的位置,如下所示:

  • 2 个 Nginx 实例,带 SSL 终端。流量路由器根据主机名进行路由。所有网络流量均通过 HTTPS 进行传输。
  • OpenVPN
  • OpenSSH

我认为我的配置非常接近,但不知何故我无法使其工作。我的网络请求只是超时。

我究竟做错了什么?

global
  log /dev/log  local0 debug # TURN OFF DEBUG!
  log /dev/log  local1 notice
  #log loghost   local0 info
  maxconn 1024

defaults
  log   global
  mode  http
  option   httplog
  option   dontlognull
  option   tcplog
  retries  3
  option redispatch
  maxconn  2000
  timeout connect  5000
  timeout client  50000
  timeout server  50000

listen HAProxy-Statistics
  bind *:1936
  mode http
  option httplog
  option httpclose
  stats enable
  stats uri /
  stats refresh 10s
  stats show-node
  stats show-legends
  stats show-desc Haproxy Frontend
  stats auth admin:admin

frontend ssl_relay
  bind 0.0.0.0:443 name frontend-ssl
  mode tcp
  option tcplog
  option socket-stats
  # option nolinger
  maxconn  300
  log /dev/log local0 debug # overkill! turn this off when not needed

  tcp-request inspect-delay 5s
  tcp-request content accept if { req_ssl_hello_type 1 }

  use_backend https_one if  { req_ssl_sni -i home.example.com }
  use_backend https_two if  { req_ssl_sni -i nc.example.com }
  use_backend openvpn   if !{ req.len 0 }
  use_backend openssh   if  { req.len 0 }
  default_backend https_one

backend https_one
  mode tcp
  server home-https-server 10.0.0.4:4443 send-proxy

backend https_two
  mode tcp
  server nc-https-server 10.0.0.4:4444 send-proxy

backend openvpn
    mode tcp
    server openvpn-server 10.0.0.4:1194

backend openssh
    mode tcp
    server openssh-server 10.0.0.5:22

答案1

说到 OpenVPN,我得出的结论是:把它抛在后面是适得其反的。

  1. 您将不会拥有永久会话,并且如果后端死亡并且您已连接到该后端,则您仍然需要重新连接。
  2. OpenVPN带有一个易于使用的负载平衡/故障转移选项(我不确定当一台服务器发生故障时它是否会自动重新连接):
remote server1.mydomain
remote server2.mydomain
remote server3.mydomain
remote-random
  1. HAProxy 强制您使用 TCP 而不是 UDP,这意味着您需要进行两次数据包握手:针对隧道,以及针对隧道中封装的包。

相关内容