段落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负责,棒!
对于有帐号密码的socks5怎么办呢
这个场景是4层的TCP,如果用户名密码相同的一组socks,可以如上配置,如果不同的,就没办法这样用了。这个只是实验性的玩法,想要用Haproxy的健康检测,自动过滤失效的代理的,实际用下来,效果不佳,本文仅供技术实践参考。
haproxy 做为中转 转发到s5代理后 访问的网站无法加载证书 要怎么处理呀
看你SSL/TLS 加载在哪里啊,在哪个步骤进行拆SSL到HTTP,或者一般到后面都是走的TCP
就是按照你的配置 然后在网上找了一个s5的代理
没有其他设置
不太懂网络这一块
可以留一个联系方式么 或者给我发邮件