新加坡 HAProxy 中转美国 AnyTLS 出口搭建与测速
目的:为了解决直连美国 VPS 网络波动的问题,使用“新加坡 HAProxy TCP 透传 + 美国 VPS AnyTLS 出口”的代理中转方案。
1. 方案说明
这套方案的核心不是在新加坡重新部署一个 AnyTLS 节点,而是让新加坡服务器只负责 TCP 转发。
实际链路如下:
Mac / 国内网络
↓ 连接 13.228.**.**:***
新加坡 EC2:HAProxy TCP 透传
↓ 转发到 47.178.**.**:*****
美国 VPS:sing-box AnyTLS 服务端
↓
公网出口 / 目标网站对应关系:
| 角色 | IP | 服务 | 端口 | 作用 |
|---|---|---|---|---|
| 本地客户端 | Mac | AnyTLS 客户端 | 本地代理端口 | 发起代理连接 |
| 新加坡中转 | 13.228.**.** | HAProxy | *** | 只做 TCP 透传 |
| 美国出口 | 47.178.**.** | sing-box AnyTLS | ***** | 真正的代理服务端和出口 |
这里要区分两个概念:
HAProxy是新加坡服务器上的中转工具。AnyTLS是美国 VPS 上运行的代理协议。
新加坡 HAProxy 不解密 TLS,也不理解 AnyTLS 协议。它只把客户端发来的 TCP 数据原样转发到美国 VPS 的 AnyTLS 端口。
2. 为什么这样搭建
直连美国 VPS 时,国内到美国的线路可能存在波动、丢包、上传速度低的问题。
通过新加坡中转后,链路被拆成两段:
国内 → 新加坡
新加坡 → 美国如果国内到新加坡的线路更稳定,新加坡到美国的国际线路也更稳定,那么最终体验可能比国内直连美国更好。
需要注意的是,中转不是一定提升所有方向的速度。它主要解决的是直连美国链路质量差、上传不稳定、丢包高的问题。
3. 当前服务器环境
3.1 新加坡服务器
新加坡使用 AWS EC2,系统为 Ubuntu 24.04。
查看服务器IP: curl -4 https://api.ipify.org
输出:13.228.**.**
系统版本: cat /etc/os-release
输出: PRETTY_NAME="Ubuntu 24.04.4 LTS"安装 HAProxy:
sudo apt update
sudo apt install -y haproxy3.2 美国 VPS
安装教程:sing-box链接
美国 VPS 已经部署 sing-box,并且 AnyTLS 节点已经存在。
查看服务器IP: curl -4 https://api.ipify.org
公网 IP: 47.178.**.***
sing-box 版本:sing-box version
输出:sing-box version 1.13.7
查看当前sing-box 服务当前运行状态:systemctl status sing-box --no-pager
--no-pager不要进入翻页模式,直接把结果打印出来。适合复制输出给别人看
表示指定配置文件路径: -D /opt/sing-box/data查询入站协议
确认配置文件路径后,可以使用 `jq` 查看入站配置
先检查服务器是否安装了 `jq`: command -v jq
如果有输出,例如:/usr/bin/jq
说明已经安装。
如果没有安装,可以执行:
sudo apt update
sudo apt install -y jq
查看所有入站协议、端口和 TLS 配置:
jq '.inbounds | map({
type,
tag,
listen,
listen_port,
tls_enabled: (.tls.enabled // false),
server_name: (.tls.server_name // null),
certificate_path: (.tls.certificate_path // null),
key_path: (.tls.key_path // null)
})' /opt/sing-box/config.jsonAnyTLS 入站信息:
类型:anytls
端口:29672
证书:/opt/sing-box/cert/fullchain.pem
私钥:/opt/sing-box/cert/key.pem4. 搭建前先测速
搭建中转前,先分别测试三段链路:
Mac → 新加坡
新加坡 → 美国
Mac → 美国这样后面才能判断中转有没有实际价值。
4.1 Mac 到新加坡测速
在新加坡服务器启动 iperf3:
iperf3 -s -4 -p 5201在 Mac 测试正向:
iperf3 -c 13.228.**.** -p 5201 -t 30 -P 4实测结果:
Mac → 新加坡
receiver:50.1 Mbits/sec
Retr:8549在 Mac 测试反向:
iperf3 -c 13.228.**.** -p 5201 -t 30 -P 4 -R实测结果:
新加坡 → Mac
receiver:355 Mbits/sec
Retr:32104.2 Mac 到美国测速
在美国 VPS 启动 iperf3:
iperf3 -s -4 -p 5201在 Mac 测试正向:
iperf3 -c 47.178.**.** -p 5201 -t 30 -P 4实测结果:
Mac → 美国
receiver:610 Kbits/sec
Retr:392在 Mac 测试反向:
iperf3 -c 47.178.**.*** -p 5201 -t 30 -P 4 -R实测结果:
美国 → Mac
receiver:82.6 Mbits/sec
Retr:151794.3 新加坡到美国测速
在美国 VPS 启动 iperf3:
iperf3 -s -4 -p 5201在新加坡服务器测试正向:
iperf3 -c 47.178.**.*** -p 5201 -t 30 -P 4实测结果:
新加坡 → 美国
receiver:47.1 Mbits/sec
Retr:1323在新加坡服务器测试反向:
iperf3 -c 47.178.**.*** -p 5201 -t 30 -P 4 -R实测结果:
美国 → 新加坡
receiver:93.4 Mbits/sec
Retr:197425. 使用 HAProxy 临时转发 iperf3 做完整链路测速
前面已经分别测试了三段链路。接下来为了测试完整路径,可以临时用 HAProxy 转发 iperf3。
这里测试的是网络链路本身,不是 AnyTLS 客户端代理速度。
临时测试链路:
Mac → 新加坡 HAProxy:*** → 美国 iperf3:*****新加坡 HAProxy 临时配置:
listen iperf3_relay
bind 0.0.0.0:***
mode tcp
option tcplog
timeout connect 10s
timeout client 1h
timeout server 1h
server us_iperf3 47.178.**.**:*****美国 VPS 启动 iperf3:
iperf3 -s -4 -p ***** -DMac 测试正向:
iperf3 -c 13.228.**.** -p *** -t 30 -P 4实测结果:
Mac → 新加坡 → 美国
sender:16.4 Mbits/sec
receiver:14.8 Mbits/sec
Retr:0Mac 测试反向:
iperf3 -c 13.228.**.** -p *** -t 30 -P 4 -R实测结果:
美国 → 新加坡 → Mac
sender:69.7 Mbits/sec
receiver:60.9 Mbits/sec
Retr:2415测试完成后删除 iperf3_relay 配置,并停止美国 VPS 上的 iperf3:
pkill -x iperf3确认端口已经关闭:
ss -lntp 'sport = :*****'6. 正式配置 HAProxy 转发 AnyTLS
新加坡服务器不需要安装 sing-box,也不需要配置 AnyTLS。
只需要并配置 HAProxy,把新加坡的 *** 端口转发到美国 VPS 的 ***** 端口。
编辑配置文件:
sudo nano /etc/haproxy/haproxy.cfg在文件末尾添加:
listen anytls_relay
bind 0.0.0.0:***
mode tcp
option tcplog
timeout connect 10s
timeout client 1h
timeout server 1h
server us_anytls 47.178.**.**:*****这段配置的含义:
| 配置 | 含义 |
|---|---|
listen anytls_relay | 定义一个名为 anytls_relay 的监听规则 |
bind 0.0.0.0:*** | 新加坡服务器监听 TCP *** 端口 |
mode tcp | 使用四层 TCP 转发,不解析 HTTP |
option tcplog | 开启 TCP 日志 |
timeout connect 10s | 连接美国 VPS 的超时时间 |
timeout client 1h | 客户端连接最长空闲时间 |
timeout server 1h | 后端服务器连接最长空闲时间 |
server us_anytls 47.178.**.**:***** | 把流量转发到美国 AnyTLS 端口 |
验证配置:
sudo haproxy -c -f /etc/haproxy/haproxy.cfg正确输出:
Configuration file is valid启动并设置开机自启:
sudo systemctl enable haproxy
sudo systemctl restart haproxy
sudo systemctl status haproxy --no-pager检查新加坡是否监听 ***:
sudo ss -lntp 'sport = :***'正确结果应包含:
0.0.0.0:***
users:(("haproxy",...))从新加坡检查美国 AnyTLS 端口是否可达:
nc -vz -w 5 47.178.**.** *****正确结果:
Connection to 47.178.**.** ***** port [tcp/*] succeeded!7. 安全组和防火墙
新加坡 AWS 安全组需要放行:
TCP ***
来源:0.0.0.0/0如果只给自己使用,更安全的做法是只允许自己的公网 IP:
TCP ***
来源:你的公网 IP/32美国 VPS 需要允许新加坡访问 AnyTLS 端口:
TCP *****
来源:13.228.**.**/32如果美国 AnyTLS 端口还要给其他客户端直连使用,就不要贸然限制来源 IP。
测速用的 *** / ***** 端口只是临时端口,测试完成后可以关闭安全组规则。
8. Mac 客户端配置
Mac 客户端不需要重新生成一个全新的 AnyTLS 配置,最简单的方法是复制原来可以直连美国的 AnyTLS 节点。
只改两个字段:
服务器地址:13.228.**.**
端口:***其他字段保持原来美国 AnyTLS 节点一致:
协议:AnyTLS
密码:保持原值
TLS:保持原值
SNI / server_name:保持原值
证书校验 / insecure:保持原值
uTLS / fingerprint:保持原值原因是新加坡 HAProxy 只是透传 TCP 流量,真正处理 AnyTLS 和 TLS 握手的仍然是美国 VPS。
如果美国 AnyTLS 使用证书域名,客户端虽然连接的是新加坡 IP,但 SNI 仍然应该保持美国 AnyTLS 原来的域名或配置值。
9. 验证代理是否成功
在 Mac 上选择新的节点,例如:
美国-新加坡中转-AnyTLS然后打开代理或 TUN 模式。
访问:
https://api.ipify.org预期结果:
47.178.**.**如果看到的是美国 VPS 的 IP,说明链路已经成立:
Mac → 新加坡 HAProxy → 美国 AnyTLS → Internet如果看到的是新加坡 IP,说明美国 AnyTLS 出口没有生效。
如果看到的是本地宽带 IP,说明 Mac 客户端没有走代理。
10. 测速结果对比
| 测试方向 | 直连速度 | 中转后速度 | 说明 |
|---|---|---|---|
| Mac → 美国 | 610 Kbits/sec | 14.8 Mbits/sec | 上传明显改善 |
| 美国 → Mac | 82.6 Mbits/sec | 60.9 Mbits/sec | 下载略低于直连 |
| Mac → 新加坡 | 50.1 Mbits/sec | - | 国内到新加坡可用 |
| 新加坡 → 美国 | 47.1 Mbits/sec | - | 新加坡到美国可用 |
从结果看,这次中转最大的价值是改善 Mac → 美国 的上传方向。
直连美国时上传只有 610 Kbits/sec,经过新加坡 HAProxy 中转后,完整链路正向达到 14.8 Mbits/sec。
下载方向直连美国是 82.6 Mbits/sec,经过中转后是 60.9 Mbits/sec,速度有所下降,但仍然可用。
11. 常见问题
11.1 Mac 需要关闭原来的代理吗
测速时需要关闭原来的代理,或者至少把新加坡 IP 和美国 IP 设置为直连。
检查命令:
route -n get 13.228.**.**如果输出里是:
interface: utun6说明仍然走了 TUN/VPN,测速结果不代表真实直连线路。
如果输出里是:
interface: en0通常表示走本地 Wi-Fi 或有线网络。
11.2 为什么访问新加坡会到美国
因为 HAProxy 配置了后端服务器:
server us_anytls 47.178.**.**:*****Mac 连接的是新加坡:
13.228.**.**:***但 HAProxy 收到连接后,会立即建立到美国 VPS 的连接:
47.178.**.**:*****所以从客户端看入口是新加坡,从代理出口看最终是美国。
11.3 HAProxy 需要证书吗
这套方案里不需要。
因为 HAProxy 不终止 TLS,不解密流量,也不做 HTTPS 代理。它只是 TCP 透传。
证书仍然在美国 sing-box AnyTLS 服务端上使用。
11.4 可以不用域名,只用公网 IP 吗
可以,但要看客户端 TLS 配置。
如果证书绑定的是域名,客户端连接新加坡 IP 时,仍然要保留原来的 SNI / server_name。否则可能出现证书校验失败。
如果客户端设置了允许不安全证书,或者证书本身支持 IP,也可以直接使用公网 IP。
11.5 control socket has closed unexpectedly 是什么
这个错误通常表示 iperf3 控制连接中断。
常见原因:
- 美国 iperf3 服务端没有启动。
- HAProxy 后端端口不通。
- 上一次 iperf3 进程异常残留。
- 网络中途断开。
处理方式:
pkill -x iperf3
iperf3 -s -4 -p ***** -D
ss -lntp 'sport = :*****'然后重新测试。
12. 总结
最终结构是:
Mac / 国内网络 → 新加坡 HAProxy → 美国 sing-box AnyTLS → Internet新加坡只做 TCP 转发,美国才是真正的 AnyTLS 服务端和代理出口。
从本次测速看,中转后上传方向改善明显,适合用于直连美国 VPS 上传差、线路波动明显的场景。
版权所有
版权归属:念宇
