配置haproxy负载均衡,落地到多socks4/socks5场景的配置 2022-3-16

段落1、需求描述

从网络上采集到很多个socks4/socks5透明代理,需要设置一个负载均衡,让流量走他们自动负载。

段落2、负载均衡haproxy是一个优秀的选项,本次就用它了

段落3、实施部署

服务器Backend1 开启一个socks5,命令如下
screen -dmS tmpS5 /root/gost-linux-amd64-2.11.1 -L=socks5://socks自定义用户名:socks自定义密码@0.0.0.0:16803

公网可用 socks5://socks自定义用户名:socks自定义密码@服务器Back1st的IP地址:16803
服务器Backend2 开启一个socks5,命令如下
screen -dmS tmpS5 /root/gost-linux-amd64-2.11.1 -L=socks5://socks自定义用户名:socks自定义密码@0.0.0.0:6403

公网可用 socks5://socks自定义用户名:socks自定义密码@服务器Back2ed的IP地址:6403

段落4、Ubuntu 20.04系统环境,安装部署haproxy

apt-get update
apt-get install haproxy

版本信息 haproxy -v
HA-Proxy version 2.0.13-2ubuntu0.5 2022/03/02

配置文件 /etc/haproxy/haproxy.cfg
服务名称 haproxy.service
检查配置文件语法 haproxy -c -f /etc/haproxy/haproxy.cfg
重启服务 systemctl restart haproxy
参数
* global 全局参数设置
* defaults 默认参数设置
* log 日志
* mode 工作模式,可选http tcp
* option 可选参数,如httplog forwardfor-记录客户端真实的IP httpclose-完成后主动关闭此TCP连接 dontlognull
* timeout connect 连接超时选项,成功连接到一台服务器的最长等待时间,默认单位是毫秒
* timeout client 连接超时选项,连接客户端发送数据时最长等待时间,默认单位是毫秒
* timeout server 连接超时选项,服务器端回应客户端数据发送的最长等待时间,默认单位是毫秒
* timeout check 连接超时选项,设置对后端服务器的检测超时时间,默认单位是毫秒
* frontend 入口
* backend 出口
* maxconn 可接受的最大并发连接数
* nbproc 在server服务端的haproxy进程数,建议根据小于等于CPU核心数设置
* daemon 后台模式,运行后会后台常驻
* user/group 启动的工作态的用户和组
* pidfile 进程pid位置
* balance 支持的负载均衡算法
roundrobin 基于权重进行轮叫调度的算法
static-rr 基于权重进行轮叫调度的算法,不过此算法为静态算法
source 基于请求源IP的算法。此算法先对请求的源IP进行HASH运算,然后将结果与后端服务器的权重总数相除后转发至某台匹配的后端服务器。这种方式可以使同一个客户端IP的请求始终转发到某特定的后端服务器
leastconn 此算法会将新的连接请求转发到具有最少连接数目的后端服务器。在会话时间较长的场景中推荐使用此算法
uri 此算法会对部分或整个URI进行HASH运算,再经过与服务器的总权重相除,最后转发到某台匹配的后端服务器上
uri_param 此算法会根据URL路径中的参数进行转发,这样可保证在后端真实服务器数据不变时,同一个用户的请求始终分发到同一台机器上
hdr 此算法根据HTTP头进行转发,如果指定的HTTP头名称不存在,则使用roundrobin算法 进行策略转发

后端的param参数
常用的参数:
check 表示启用对此后端服务器执行健康状态检查
inter 设置健康状态检查的时间间隔,单位是毫秒
rise 检查多少次认为服务器可用
fall 检查多少次认为服务器不可用
weight 设置服务器的权重,默认为1, 最大为256。 设置为0表示不参与负载均衡
backup 设置备份服务器,用于所有后端服务器全部不可用时
cookie 为指定的后端服务器设置cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的后端服务器将在后续的请求中一直被选中,其目的在于实现持久连接的功能
参考的一个配置
defaults
        log global
        mode    tcp
        option  tcplog
        timeout connect  60000
        timeout client  120000
        timeout server  120000


frontend roubin_socks5_listen
        mode    tcp
        bind    *:31111
        default_backend roubin_socks5_outbound

backend roubin_socks5_outbound
        mode    tcp
        balance roundrobin
        server server1 服务器Back1st的IP地址:16803 check inter 8000 rise 2 fall 3 maxconn 512
        server server2 服务器Back2ed的IP地址:6403 check inter 8000 rise 2 fall 3 maxconn 512

段落5、验证可用

proxychains4 curl http://ip.sb

附录1、可选,增加统计页面

listen stats
        mode http
        bind 0.0.0.0:8888
        stats refresh 30s
        stats enable
        stats uri     /stats 
        stats auth    haproxy:2fCb2a0Ea3d15E9a


可以通过 http://你服务器的IP地址:8888/stats访问

— 2022-3-23 更新

用代码从数据库中提取可用的socks4/socks5节点,添加到haproxy配置文件中

多socks4/socks5的场景

统计页面的显示

这样,自己只需要连接 haproxy生成的 roubin_inbound入口端口即可,后端差错控制由haproxy负责,棒!

配置haproxy负载均衡,落地到多socks4/socks5场景的配置 2022-3-16》有5个想法

    1. xdasmz 文章作者

      这个场景是4层的TCP,如果用户名密码相同的一组socks,可以如上配置,如果不同的,就没办法这样用了。这个只是实验性的玩法,想要用Haproxy的健康检测,自动过滤失效的代理的,实际用下来,效果不佳,本文仅供技术实践参考。

      回复
      1. anana

        就是按照你的配置 然后在网上找了一个s5的代理
        没有其他设置
        不太懂网络这一块
        可以留一个联系方式么 或者给我发邮件

        回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注