云服务器内网穿透真香冷门技巧:BBR+FastOpen+tc三合一,榨干FRP每滴性能
痛点直击
用FRP做内网穿透,默认配置下延迟高、吞吐漂移大?你大概率忽略了三个内核级调优:TCP BBR 接管拥塞控制、 TCP Fast Open 砍掉三次握手、 tc qdisc 隔离队列防抖动。以下全部来自我连续跑了一个月的生产环境实测,不废话,直接上代码。
一、确认内核与系统
我用的环境是轻云互联的香港C区云服务器,Linux 5.10 LTS内核,仅需一条命令开启所有功能:
# 检查内核是否支持BBR(结果含 tcp_bbr 即OK)
modprobe tcp_bbr
lsmod | grep bbr
# 启用BBR + FQ队列
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
# 开启TCP Fast Open(服务端和客户端都需支持)
echo 3 > /proc/sys/net/ipv4/tcp_fastopen
echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf
sysctl -p
注意:FRP的frps和frpc必须都运行在支持Fast Open的4.9+内核上,且FRP版本 ≥ 0.39.0(其底层golang已内置支持)。
二、FRPS配置文件加点料
[common]
bind_port = 7000
kcp_bind_port = 7001
# 关键:强制使用TCP,不降级到KCP(KCP会破坏BBR和FastOpen)
# 若组网必须UDP,可单独开KCP端口,但主流量走TCP
transport.protocol = tcp
# 启用TLS(HTTPS证书自签即可,无性能损耗)
tls_enable = true
tls_cert_file = /etc/ssl/frps/fullchain.pem
tls_key_file = /etc/ssl/frps/privkey.key
在frpc端同样配置tls_enable = true和transport.protocol = tcp。此时连接已经走BBR+FastOpen,你可以在云服务器上用ss -ti查看TCP流的拥塞算法:
# 示例输出中“bbr”字样证明生效
ss -ti | grep -A 3 'bbr'
三、tc队列隔离:防止其他服务抢带宽
很多人的云服务器还跑着Web服务或数据库,FRP的突发流量会导致丢包。用tc划出一条独立带宽车道:
# 假设公网网卡eth0,最大带宽1Gbps,划给FRP 200Mbps,保证最低150Mbps
tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 200mbit ceil 300mbit prio 0
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 700mbit ceil 1000mbit prio 1
# 将FRP端口的流量标记到class 1:10(自定义标记命令)
iptables -t mangle -A OUTPUT -p tcp --sport 7000 -j MARK --set-mark 10
iptables -t mangle -A OUTPUT -p tcp --sport 7001 -j MARK --set-mark 10
# 将标记10的流量匹配class 1:10
tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 10 fw flowid 1:10
注意:如果FRP配置了多个代理端口(如80,443),需要逐一加入iptables规则。更优雅的方式是使用cgroup:将frps进程放入独立cgroup,然后用tc cgroup filter匹配。
四、验证与排雷
1. BBR是否生效 — 对端也启用BBR效果最佳,否则退化为拥塞窗口接管。观察ss -i的cwnd和rtt曲线,若rtt稳定且cwnd不抖动则正常。
2. FastOpen断连 — 某些老旧路由器会丢弃TFO的TFO cookie,在frpc的tls_enable基础上,可开启tcp_fastopen_client = 0(回退到正常握手),但一般无需担心。
3. tc限速过严 — 用tc -s qdisc show dev eth0查看丢包统计,若dropped增长过快,调高ceil值。
五、冷门收益
这套配置在我轻云互联的2核4G机器上,让内网穿透的HTTP首包延迟从380ms降到220ms,多线程下载吞吐从45MB/s提升到62MB/s。关键是不影响同一台机器上其他业务(如Nginx静态资源)的rtt稳定性。如果你还在用KCP或裸TCP,赶紧试试这三个核弹级优化吧。