小分段: 目标是把香港 VPS 做成稳定高吞吐的代理/转发节点,适用于 HTTP/HTTPS、Socks、TCP 转发等。环境假设:Debian/Ubuntu 或 CentOS,内核 >= 4.9(建议 4.14+),root 权限,可安装软件。
小分段: 先备份系统:cp -a /etc /root/etc-backup,然后更新系统:Ubuntu: apt update && apt -y upgrade;CentOS: yum -y update。
2.小分段: 编辑 /etc/sysctl.d/99-custom.conf,添加以下推荐配置并执行 sysctl -p: net.core.somaxconn=65535 net.core.netdev_max_backlog=250000 net.core.rmem_max=134217728 net.core.wmem_max=134217728 net.ipv4.tcp_rmem=4096 87380 134217728 net.ipv4.tcp_wmem=4096 87380 134217728 net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_fin_timeout=30 net.ipv4.tcp_max_syn_backlog=65536 net.ipv4.tcp_congestion_control=bbr
小分段: 启用 BBR(如内核支持):echo "net.core.default_qdisc=fq" >> /etc/sysctl.d/99-custom.conf;sysctl -p;验证:sysctl net.ipv4.tcp_congestion_control;ss -tuna | head。
3.小分段: 增加 ulimit 和 systemd 服务限制。编辑 /etc/security/limits.conf 添加: * soft nofile 200000 * hard nofile 200000
小分段: 对于 systemd 服务(如 haproxy 或自建代理),创建 /etc/systemd/system/haproxy.service.d/limit.conf: [Service] LimitNOFILE=200000 Restart=always 然后 systemctl daemon-reload && systemctl restart haproxy。
4.小分段: 查看网卡并启用多队列:安装 ethtool:apt install -y ethtool;查看队列数 ethtool -l eth0;设置合适队列数(N 为 CPU 核数或核数的倍数):ethtool -L eth0 combined 8。
小分段: 调整中断负载均衡:启用 irqbalance(apt install irqbalance && systemctl enable --now irqbalance),或手动绑定中断到 CPU(/proc/irq/*/smp_affinity)。针对高并发场景可根据 CPU 拆分队列。
5.小分段: 大文件大吞吐场景通常启用 TSO/GSO/GRO,提高吞吐;小包或大量短连接场景可关闭以降低延迟和重复包:检查当前状态 ethtool -k eth0。
小分段: 关闭命令示例(若需):ethtool -K eth0 tso off gso off gro off;启用命令示例:ethtool -K eth0 tso on gso on gro on。测试后决定。
6.小分段: 推荐使用 HAProxy(可多线程)或 Nginx stream + SO_REUSEPORT,针对 TCP 层转发优先选择 HAProxy。安装:apt install -y haproxy。编辑 /etc/haproxy/haproxy.cfg,使用 nbthread 和 nbproc:
小分段: 示例(tcp 端口转发): global maxconn 200000 nbthread 4 daemon defaults mode tcp timeout client 60s frontend ft_tcp bind *:443 default_backend bk_tcp backend bk_tcp server s1 127.0.0.1:10443 check maxconn 20000
7.小分段: 对于自研代理或支持 SO_REUSEPORT 的守护进程(如 modern nginx、xray),启用 reuseport 可以让多个进程同时 accept 同一端口,配合 cpu 亲和提升并发处理。例如 nginx 使用 worker_processes auto;listen ... reuseport。
小分段: Nginx stream 示例 bind:stream { server { listen 12345 reuseport; proxy_pass backend; } }
8.小分段: 使用 nftables 性能更好,但常见做法仍用 iptables;减少不必要的规则链,尽量使用 raw 表绕过 conntrack(对高并发有益)。示例:iptables -t raw -A PREROUTING -p tcp --dport 12345 -j NOTRACK。
小分段: 若需要 conntrack,增大 conntrack max:sysctl -w net.netfilter.nf_conntrack_max=1310720 并持久化到 sysctl 文件。
9.小分段: 通过 taskset 或 systemd 配置将关键进程绑定到特定 CPU 核,减少上下文切换。示例:taskset -c 0-3 haproxy -f /etc/haproxy/haproxy.cfg;systemd 可用 CPUAffinity=0-3。
小分段: 对网卡中断也做 cpu_affinity 配置,使接收中断与处理进程在同一 CPU 组,提高 cache 命中率。
10.小分段: 常用工具与命令:iperf3(吞吐)、wrk/hey(HTTP 并发)、ss -s / netstat -an(连接状态)、tcpdump(抓包)。安装示例:apt install -y iperf3 tcpdump iproute2.
小分段: iperf3 测试:一台本地机作为 client:iperf3 -c <香港VPS_IP> -P 50 -t 60;观察 VPS CPU、netstat、ifstat。逐步调整 nbthread、队列数并复测。
11.问题:开启 BBR、调高 net.core.netdev_max_backlog 后仍然丢包怎么办?
回答:先用 ss -s / dmesg 查看是否有网卡中断溢出,使用 ethtool -S eth0 检查 rx_dropped、tx_errors;如果是中断/队列不足,增加 ethtool -L eth0 combined 值并启用 irqbalance;对小包场景尝试关闭 GRO/GSO;同时检查并发连接是否超过 ulimit 或 haproxy 的 maxconn。
12.问题:如何长期监控并且在高峰自动扩容/降级转发策略?
回答:建议部署 Prometheus + node_exporter + haproxy_exporter,设置 key metrics(cpu、net_tx/rx、haproxy_queue、conntrack_count)。结合 alertmanager 和脚本,通过 systemd 启停不同配置组(如切换 nbthread 或启用/禁用 reuseport),复杂场景可用自动化工具(Ansible)批量调整。
13.问题:在香港 VPS 做代理,如何在成本可控下获得最佳吞吐与稳定性?
回答:优先从内核与网卡调优入手(sysctl、BBR、ethtool 多队列),使用支持多线程/多进程的转发软件(HAProxy 或 nginx reuseport),合理设置 ulimit 与 systemd 限制;用 iperf3 与抓包验证每一步调整。若单台 VPS 极限受限,考虑水平扩容多节点负载均衡来提升可用带宽。