HAProxy端口转发优缺点
优点:工作在应用层,能用BBR,适合跨境和延迟高的网络。
缺点:仅支持TCP,无法转发UDP流量,高流量或复杂规则可能消耗较多CPU和内存,容易被DDoS攻击
安装默认版本
sudo apt-get update
sudo apt-get install haproxy -y
/etc/haproxy/haproxy.cfg
编辑配置文件:
sudo nano /etc/haproxy/haproxy.cfg
配置文件内容(简单设置,测试可用性):
global
log /dev/log local0
log /dev/log local1 notice
maxconn 10000 #最大并发连接数为10000
tune.bufsize 131072 #设置128KB缓存
tune.maxrewrite 2048 #每个缓冲区最大重写空间为2048字节
daemon
defaults
log global
option tcplog
timeout connect 3000ms #连接后端服务器的超时时间为 3 秒
timeout client 30000ms #客户端超时时间为 30 秒
timeout server 30000ms #服务器超时时间为 30 秒
frontend https_in
bind :543 transparent tfo # 支持透明代理获取真实IP,支持tfo快速连接
mode tcp
default_backend ocv_backend
backend ocv_backend
mode tcp
server ocv_local 127.0.0.1:443 check #目标服务器地址和端口
option splice-auto # 内核级零拷贝(Linux 4.5+)
加载配置文件,测试配置是否正确。
haproxy -c -f /etc/haproxy/haproxy.cfg
输出:Configuration file is valid
加载配置,启动服务:
sudo systemctl reload haproxy
systemctl status haproxy.service
重启以后会自动生效,同时内核只要开启了BBR,也会起作用。
高级设置 /etc/haproxy/haproxy.cfg:
global
log /dev/log local0
log /dev/log local1 notice # 日志输出到本地 syslog,local0/local1 为日志设施,notice 为日志级别
tune.bufsize 5376000 # 5.125M 全局缓冲区,计算公式BDP=带宽(Mbps)×RTT(s)/8
tune.rcvbuf.client 5376000 # 客户端接收缓冲区 5.125M(需内核支持)
tune.sndbuf.client 5376000 # 客户端发送缓冲区 5.125M(需内核支持)
tune.idle-pool.shared on # 启用共享空闲连接池(仅 HAProxy 2.4+ 有效,低版本需删除此行)
maxconn 10000 # 全局最大并发连接数(需配合 ulimit -n 调整)
tune.maxrewrite 2048 # 保留 2KB 缓冲区用于协议重写(默认值,无需修改)
ulimit-n 200000 # 设置 HAProxy 进程的文件描述符限制(需系统 systemd 配置支持)
stats socket /run/haproxy/admin.sock mode 660 level admin # 管理统计接口
defaults
mode tcp # 纯 TCP 服务
timeout connect 10s # 连接后端超时设为 10 秒(适应跨国高延迟)
timeout client 1h # 客户端空闲超时 1 小时(适合长连接)
timeout server 1h # 服务端空闲超时 1 小时(与客户端对称)
option tcplog # 记录 TCP 层日志(基础必需)
option tcpka # 启用 TCP Keep-Alive 保活(防中间设备断开)
option srvtcpka # 后端服务器也启用 Keep-Alive(必需与 tcpka 配合)
frontend oc_front
bind :543 transparent tfo # 透明代理+TFO(需配合 nftables TPROXY 和策略路由)
tcp-request content accept # 跳过内容检查,直接接受连接(适用于纯转发场景)
log /dev/log local2 # 独立日志标识符(方便过滤)
default_backend oc_back # 指向后端配置
backend oc_back
balance leastconn # 最少连接算法(适合 ocserv 长连接场景)
server oc1 127.0.0.1:443 check inter 3s fastinter 1s fall 2 rise 2 # 健康检查更敏感(快速剔除故障节点)
option splice-auto # 内核零拷贝(需 Linux 4.5+ 和 CONFIG_HAPROXY_SPLICE 编译支持)