1. 概述与总体架构
1) 目标:在台湾VPS(多个实例或多个弹性IP)上部署代理/拨号节点,集中管理并实现自动化切换与健康检测。
2) 架构要点:每台VPS部署一个轻量代理(3proxy 或 dante),中央控制器通过 HAProxy/NGINX 或本地 SOCKS 代理链路做轮换与熔断,健康检测脚本周期性探测并自动屏蔽不健康节点。
3) 前提:能创建多台台湾VPS或能在VPS上申请多个IP,且有API权限以便自动化创建/销毁实例(可选)。
2. 环境准备(示例:Ubuntu 22.04)
1) 更新系统:sudo apt update && sudo apt -y upgrade。
2) 安装基础工具:sudo apt -y install curl wget git jq vim iproute2 net-tools unzip build-essential。
3) 准备防火墙:允许代理端口(如1080、3128)与控制端口(如8001)通过 ufw 或 iptables。示例:sudo ufw allow 1080/tcp。
4) 建议准备至少 3 台台湾节点以实现冗余与健康切换。
3. 在每台VPS上安装并配置3proxy(轻量 SOCKS/HTTP 代理)
1) 安装依赖并编译:git clone https://github.com/z3APA3A/3proxy.git && cd 3proxy/scripts && ./configure && make -s && sudo make install。
2) 创建配置文件 /usr/local/etc/3proxy/3proxy.cfg,示例最小配置:
# auth none
socks -p1080
flush
3) 启动与开机自启:创建 systemd 服务 /etc/systemd/system/3proxy.service 内容参考官方示例,sudo systemctl enable --now 3proxy。
4) 测试:curl --socks5-hostname 127.0.0.1:1080 http://ifconfig.me 查看外网IP。
4. 中央控制器:用 HAProxy/Nginx 负载与轮换(集中出口)
1) 在控制节点安装 haproxy:sudo apt -y install haproxy。
2) 配置 /etc/haproxy/haproxy.cfg(stream 模式)示例:
frontend socks_front
bind *:1080
mode tcp
default_backend socks_back
backend socks_back
mode tcp
balance roundrobin
server node1 10.0.0.1:1080 check inter 5000 fall 3 rise 2
server node2 10.0.0.2:1080 check inter 5000 fall 3 rise 2
3) reload haproxy:sudo systemctl restart haproxy。
4) HAProxy 会基于 TCP 健康检查自动剔除不通的节点,适合代理轮换场景。
5. 健康检测脚本:应用级(HTTP)探测与自动下线
1) 创建脚本 /usr/local/bin/proxy_health_check.sh(bash),逻辑:遍历代理列表,用 curl 通过每个代理请求一个稳定的测试URL(如 http://example.com/health 或 http://ifconfig.me ),判断响应与延迟。
2) 若检测失败(超时或响应码非200),用 API 或 SSH 修改 HAProxy 后端状态(可以通过 haproxy 的 socket 命令 disable server),示例命令:echo "disable server socks_back/node1" | socat stdio /run/haproxy/admin.sock。
3) 脚本例子要包含重试与记录日志(/var/log/proxy_health.log)。
6. 健康检测脚本示例(核心片段)
1) 核心检查命令:curl --socks5-hostname $IP:1080 -m 10 -sS -o /dev/null -w "%{http_code} %{time_total}" http://example.com。
2) 判定:如果 http_code != 200 或 time_total > 5s,则视为失败并触发下线动作。
3) 恢复机制:当探测连续 N 次成功后,通过 haproxy socket 重新 enable 对应 server。脚本应有并发控制(flock)以避免竞态。
7. 自动化替换与扩缩容(可选:使用云API)
1) 如果VPS提供商支持API(如 Vultr、Linode、AWS),可写 controller 脚本在节点不可修复时自动销毁并重建实例:使用 provider 的 CLI 或 REST API。
2) 新建实例后,使用 cloud-init 或 SSH 执行 bootstrap 脚本,安装 3proxy 并注册到 HAProxy 后端(或把新 IP 写入控制节点配置并 reload)。
3) 注意密钥管理与镜像模板准备,尽量通过镜像 + cloud-init 减少首次配置时间。
8. 日志、监控与报警
1) 日志:集中收集每台节点的 3proxy 日志与控制器的健康检测日志,建议使用 rsyslog 或 filebeat 发送到 ELK/Prometheus。
2) 监控:用 Prometheus + Grafana 抓取每个节点的可用性、响应时间与流量。
3) 报警:当节点数低于阈值或连续失败时通过邮件/Slack/钉钉报警并触发自动替换流程。
9. 安全与性能优化
1) 限制访问:对代理端口仅放行控制IP或做简单认证(3proxy 支持用户名密码)。
2) 流量控制:使用 iptables 或 tc 做带宽限制防止滥用。
3) 缓存与并发:针对HTTP代理可使用反向代理缓存;针对大量并发连接调整内核参数(net.core.somaxconn、fs.file-max 等)。
10. 故障排查常见命令
1) 网络连通:ping / traceroute / ss -tunap 查看端口监听。
2) 代理测试:curl --socks5-hostname 代理IP:端口 http://ifconfig.me 查看出口IP。
3) HAProxy 状态:echo "show stat" | socat stdio /run/haproxy/admin.sock,或查看 /var/log/haproxy.log。
11. 部署示例流程(从零到可用的最短路径)
1) 准备3台
台湾VPS(Ubuntu),在每台上执行编译/安装3proxy的脚本并开启1080端口。
2) 在控制节点安装HAProxy并把3台节点配置为后端,启动并确认能通过控制节点访问外网。
3) 部署健康检测脚本到控制节点并加入 cron 每 60 秒运行一次,确保不健康节点被立即 disable。
4) 加入监控与日志,逐步优化重试与替换策略。
12. Q1:如果某个台湾VPS突然全部请求超时,我如何第一时间隔离并恢复流量?
1) 回答:健康检测脚本会检测到连续超时并通过 haproxy socket 执行 disable server 命令,将其从负载池移除;同时触发报警并启动自动替换(若配置了云API),或者发送 SSH 命令尝试重启 3proxy 服务。
13. Q2:如何保证切换不会影响正在进行的会话?
1) 回答:TCP 层的切换会影响已有连接。可用策略:短连接优先、在应用层做重试;或使用持久会话粘性(但会降低切换效果)。建议把代理用于无状态请求或在应用端实现重试/断点续传。
14. Q3:是否可以只用单台VPS实现“拨号”效果以切换IP?
1) 回答:云厂商一般不会允许你在单台VPS上像家庭宽带那样频繁“拨号”换IP。更稳妥的方案是使用多台VPS或申请多个弹性IP并通过策略路由/iptables 做SNAT切换;若必须频繁换IP,考虑使用支持动态拨号的移动网卡或运营商设备,但那不适用于纯云环境。
来源:台湾vps拨号云空间实现自动化切换与健康检测的方案