使用haproxy搭建tls 转发中转隧道 2025-02-22 Website News 暂无评论 12 次阅读 告别收费面板,重量级软件,大型网站大负载都能用,用来转发那是搓搓有余,稳定无bug,搭建好以后可以几十年不回头维护(哈哈),带网页端监控,网页端也支持热拔插服务器(启动关闭本代码未添加此功能),支持健康度检测并故障转移,几乎是无缝连接。支持各种负载平衡,多线程2台500m加起来就是差不多1000m。支持负载平衡隧道,也同时支持落地鸡的负载平衡,同时支持ipv4和ipv6, 使用tcp模式时,如果协议支持并开启udp on(over)tcp ,那么也可以支持udp,比如trojan协议 ss協議 请举一反三。新版本也支持原生udp转发 ,但是跳端口我不会,单端口大流量大概率会被运营商qos,debian12 原生是2.16版本。 使用情景: 1台国内移动鸡 1台移动直连港机 国内移动鸡建立到香港鸡的tls 隧道。相似软件有 gost realm 很多。gost不够稳定,realm没有检测故障转移。 需要准备好证书。随便都可以,比如cloudfare的15年证书,我用的是免费域名 给的 也没有问题。 debian12 安装 haproxy : 在 Debian 12 上安装 HAProxy 可以通过以下步骤完成: 更新软件包列表: 首先,确保你的软件包列表是最新的。打开终端并运行以下命令: sudo apt update 安装 HAProxy: 使用以下命令安装 HAProxy: sudo apt install haproxy 启动 HAProxy 服务: sudo systemctl start haproxy 设置 HAProxy 开机自启: sudo systemctl enable haproxy 配置 HAProxy: HAProxy 的配置文件通常位于 /etc/haproxy/haproxy.cfg。你可以使用文本编辑器(如 nano 或 vim)打开并编辑该文件,也是可以finalshell 的文本编辑 粘贴复制: sudo nano /etc/haproxy/haproxy.cfg 根据你的需求修改配置文件。完成后,保存并退出编辑器。 重启 HAProxy 服务: sudo systemctl restart haproxy 检查 HAProxy 状态: sudo systemctl status haproxy 检测haproxy配置文件是否出错 haproxy -c -f /etc/haproxy/haproxy.cfg 注意事项。 1、如隧道或者落地机很多,haproxy启动时需要dns解析域名,时间很久。可以直接使用ip 或者在 /etc/hosts 和 /etc/cloud/templates/hosts.debian.tmpl 添加ip和域名 例:1.1.1.1 abc.xxoo.com ,ps:动态ip一定要添加dns模块,否则ip改变就连不上了。 2、隧道对端的港机(国内机不用) 在haproxy目录 建立证书文件夹 或其他地方, haproxy 使用 pem 进行 ssl 解密,pem 由 cat www.example.com.crt www.example.com.key > www.example.com.pem 获得 (ssh在该文件夹下运行上面的命令)我用的是通配符证书,一个证书搞定。 3、极光面板的haproxy是明文转发,不是隧道,而且每个端口建立一个配置文件,如果转发端口太多导致占用内存极大,这个占用内存相对较小,是很小。 4、使用tcp模式而不是http模式,是因为tcp是3层,http是7层。我更喜欢3层的 #国内机代码: ```csharp global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy # stats socket /run/haproxy/admin.sock mode 660 level admin stats socket /dev/shm/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user root group root daemon ssl-default-server-options ssl-min-ver TLSv1.3 defaults log global retries 1 option redispatch mode tcp option dontlognull timeout connect 5s timeout client 95s timeout server 95s # maxconn 20480 # 设置默认最大连接数 单个前后端的总和,不能应用到每个服务器,在global下 则是所有前后端总和 # default-server inter 10s # 设置默认健康检查间隔为 10 秒 # timeout check 10s # 心跳检查的超时时间 resolvers mydns # DNS解析 nameserver dns1 119.29.29.29:53 nameserver dns2 [2001:4860:4860::8888]:53 nameserver dns3 8.8.8.8:53 resolve_retries 3 timeout retry 10s hold other 60s # 指定在接收到其他类型的响应(例如,非可用的响应)后,HAProxy 会将该记录保持在缓存中的时间。默认值是 30 秒 hold refused 130s # 指定在收到拒绝响应(如 DNS 服务器返回 REFUSED)后,HAProxy 会将该记录保持在缓存中的时间。默认值是 30 秒 hold nx 130s # 指定在收到 NXDOMAIN 响应(即域名不存在)后,HAProxy 会将该记录保持在缓存中的时间。默认值是 30 秒。 hold timeout 60s # 指定在 DNS 查询超时后,HAProxy 会将该记录保持在缓存中的时间。默认值是 30 秒。 hold valid 1200s # 指定在成功解析后,HAProxy 会将该记录保持在缓存中的时间。默认值是 10 秒。 listen haproxy-monitoring bind 0.0.0.0:19520 # 监控网页 端口 http://ip:端口/msn mode http stats enable stats refresh 30s stats uri /msn #网页端后缀 stats realm Haproxy\ Statistics stats auth abc:123456 # 监控网页登录用户名和密码 # 日本 akile frontend 35731-in-jp-akile bind :::35731 #前端监听端口即转发端口 也可以和隧道对端港机机不同,我是为了方便设置搞成一样而已 mode tcp default_backend 35731-out-jp-akile backend 35731-out-jp-akile mode tcp option tcp-check balance roundrobin server hktboil hkhktv6.xx.linkpc.net:35731 ssl verify none sni req.hdr(host) alpn h2,http/1.1 check inter 10000 maxconn 20480 resolvers mydns weight 60 #每1秒健康检测 20480最大连接数 dns解析 负载均衡权重60 server hkbytevirt hkbyv6.xx.linkpc.net:35731 ssl verify none sni req.hdr(host) alpn h2,http/1.1 check inter 10000 maxconn 20480 resolvers mydns weight 10 #隧道负载均衡 权重6:1 server hkclaw hkcl47.xx.linkpc.net:35731 ssl verify none sni req.hdr(host) alpn h2,http/1.1 backup check inter 10000 maxconn 20480 resolvers mydns #备用线路,前2线路全挂时启动,线路恢复自动切回 # 日本 AperNet frontend 35732-in-gb-AperNet bind :::35732 mode tcp default_backend 35732-out-gb-AperNet backend 35732-out-gb-AperNet mode tcp option tcp-check balance roundrobin server hktboil hkhktv6.xx.linkpc.net:35732 ssl verify none sni req.hdr(host) alpn h2,http/1.1 check inter 10000 maxconn 20480 resolvers mydns weight 60 #国内鸡对接隧道对端如港机的ip和端口 server hkbytevirt hkbyv6.xx.linkpc.net:35732 ssl verify none sni req.hdr(host) alpn h2,http/1.1 check inter 10000 maxconn 20480 resolvers mydns weight 10 server hkclaw hkcl47.xx.linkpc.net:35732 ssl verify none sni req.hdr(host) alpn h2,http/1.1 backup check inter 10000 maxconn 20480 resolvers mydns ``` #隧道对端 港机配置文件代码 ```csharp global log /dev/log local0 alert log /dev/log local1 alert stats socket /dev/shm/admin.sock mode 660 level admin expose-fd listeners spread-checks 50 # 在haproxy后端有众多节点时,如同时进行健康检查,则会对haproxy造成较大性能影响;此选项将其检查时间间隔长度上增加或减少一定随机时间,官方建议2-5(20%-50%)之间 stats timeout 30s user root group root daemon # 指定安全套件并指定 ssl 版本最低 1.2 增加真实性 ssl-default-bind-ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256 ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 ssl-default-bind-options ssl-min-ver TLSv1.2 defaults log global retries 1 option redispatch mode tcp option dontlognull timeout connect 5s timeout client 95s timeout server 95s maxconn 20480 # 设置默认最大连接数 # option httpchk GET /health # 设置默认健康检查请求 resolvers mydns # DNS解析 nameserver dns1 8.8.8.8:53 nameserver dns2 119.29.29.29:53 resolve_retries 3 timeout retry 1s hold other 30s hold refused 30s hold nx 30s hold timeout 30s hold valid 10s listen haproxy-monitoring bind 0.0.0.0:19520 # 网页监控端端口 随便设 mode http stats enable stats refresh 30s stats uri /msn #网页后缀 随便设 stats realm Haproxy\ Statistics stats auth abcn:12345 #用户名和密码 # 日本 akile frontend 35731-in-jp-akile bind :::35731 ssl crt /etc/haproxy/cert/xx.linkpc.net.pem alpn h2,http/1.1 # 证书路径 haproxy 使用 pem 进行 ssl 解密,pem 由 cat www.example.com.crt www.example.com.key > www.example.com.pem 获得 default_backend 35731-out-jp-akile tcp-request inspect-delay 5s tcp-request content accept if HTTP use_backend web if HTTP backend 35731-out-jp-akile balance roundrobin server jpakile jpak.12345678.xyz:30700 check inter 10s weight 60 # 支持 abstract 格式: "abns@vless.sock" ;loopback 方式:127.0.0.1:6666 server jpakile2 jpak2.12345678.xyz:30700 check inter 10s weight 30 #落地机负载平衡 权重6:3 server jpapernet jpap.12345678.xyz:30700 backup check inter 10s #落地机备用 # 日本 AperNet frontend 35732-in-jp-AperNet bind :::35732 ssl crt /etc/haproxy/cert/xx.linkpc.net.pem alpn h2,http/1.1 default_backend 35732-out-jp-AperNet tcp-request inspect-delay 5s tcp-request content accept if HTTP use_backend web if HTTP backend 35732-out-jp-AperNet balance roundrobin server jpAperNet jpap.12345678.xyz:30700 check inter 10s #对接落地机的ip和端口 server jpakile jpak.12345678.xyz:30700 backup check inter 10s # 回落到网页 backend web # server web /dev/shm/h1h2c.sock mode http http-request deny deny_status 403 # 返回403错误 ``` 标签: TLS, haproxy, 中转 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭