蜜蜂加速器旧版本会员登录
蜜蜂加速器旧版本
一文搞懂OpenVPNTCP模式的底层连接原理
Wi-Fi 与路由器

一文搞懂OpenVPNTCP模式的底层连接原理

很多用户在使用OpenVPN时,碰到UDP模式下高频丢包、业务连接频繁中断的场景,会切换到TCP模式,但不少人改完配置之后要么连不上,要么出现奇怪的卡顿、假死问题,大多是没搞懂OpenVPN TCP模式的底层连接原理,没法对应定位故障点。本文从封装逻辑、配置前提到逐段排查步骤完整拆解OpenVPN TCP模式的连接原理,帮你理清每一步的运行规则和排障思路。

网络设备:OpenVPN TCP模式:连

直观呈现OpenVPN TCP模式下加密报文逐层封装后经TCP长连接传输的完整链路

OpenVPN TCP模式的核心封装逻辑

和默认的UDP传输模式不同,OpenVPN TCP模式从底层就完全依托操作系统原生的TCP协议栈完成隧道报文传输,不是把UDP报文套个TCP头的简易转换,整个传输链路的所有控制逻辑都复用TCP的标准机制。

完整的底层封装流程分为两步:第一步是OpenVPN用户态进程先完成原始业务报文的加密、包头校验、压缩处理,生成隧道传输报文;第二步是把处理好的隧道报文直接作为TCP协议的载荷,交给操作系统的TCP栈,通过预先建立的TCP长连接发送到对端,所有报文的顺序保证、丢包重传、流量控制全部由操作系统TCP栈自动完成,梯子软件不需要OpenVPN进程额外处理相关逻辑。

OpenVPN TCP模式的配置生效前提

不少用户以为只要把全局配置里的proto字段改成tcp就能切换模式,实际上两端的配置必须完全匹配才能正常触发TCP模式的连接逻辑,服务端需要配置proto tcp-server参数,主动监听指定端口的TCP连接请求,客户端需要配置proto tcp-client参数,主动向服务端的对应端口发起TCP连接,只要有一端配置成UDP模式,就会完全无法建立连接。

除了OpenVPN自身的配置,两端的网络边界设备也需要放行对应规则:服务端侧的防火墙、安全组需要放通指定端口的TCP入站流量,客户端侧的出口网关不能限制对应端口的TCP长连接存活时间,中间运营商网络也不能拦截对应端口的TCP报文,否则后续的连接流程根本无法推进。

TCP模式连接建立的逐段验证步骤

第一步先验证TCP传输层的三次握手是否正常完成,可以在服务端用报文抓包工具监听对应VPN端口,查看是否存在SYN、SYN+ACK、ACK的完整三次握手报文序列,如果只能看到客户端重复发送的SYN报文,没有后续的回应报文,说明中间的网络设备拦截了对应端口的TCP流量,可以尝试更换80、443这类常用的TCP端口重新测试。

第二步验证握手完成后的VPN隧道协商流程,三次握手成功之后,OpenVPN客户端会立刻发送加密的Hello协商报文,和服务端完成证书校验、加密算法确认、隧道IP分配的交互,如果这一步没有对应协商报文的来回,说明两端的证书、加密套件配置不匹配,故障点和底层TCP传输层完全无关。

第三步验证隧道建立后的封装转发流程,协商完成后客户端会自动生成指向tun/tap虚拟网卡的路由规则,所有需要走VPN隧道的业务流量会先送到虚拟网卡,再转发给OpenVPN进程做加密处理,最终塞进已经建立的TCP长连接里发送到服务端,服务端从TCP载荷里解密出原始业务报文之后,再转发到对应的后端内网地址。

TCP模式的常见故障根因定位

很多用户反馈OpenVPN TCP模式连接状态显示正常,但内网业务访问异常卡顿,这类问题大多是典型的TCP嵌套效应:VPN隧道本身已经是TCP协议,隧道内部传输的业务流量如果也是TCP协议,外层TCP触发丢包重传时,内层业务的TCP协议也会同步触发重传,两层重传机制叠加之后就会导致流量排队卡顿,这是TCP模式的固有特性,不属于配置错误。

还有不少用户碰到公网临时闪断几秒恢复之后,OpenVPN TCP模式很久才会自动重连,这是因为操作系统默认的TCP保活检测阈值很高,蜜蜂OpenVPN自带的用户态ping保活报文如果被中间设备拦截,就需要等待系统TCP栈的超时检测触发才能释放已经失效的死连接,这类问题可以通过配置OpenVPN自身的用户态保活参数优化检测速度,不要依赖系统原生的TCP keepalive机制。

最后要注意一个常见误区,很多人默认TCP模式比UDP模式更稳定,实际上只有在运营商公网UDP丢包率很高的场景下,TCP自带的重传机制才能体现出优势,普通网络场景下两种模式没有绝对的优劣,需要结合实际的链路使用场景选择,不要盲目切换TCP模式。

连接排障编辑组
连接排障编辑组
内容编辑

按设备、网络、客户端和服务端逐层检查,让故障定位更有条理。

查看更多文章
配置入门

从一个连接问题开始

遇到原网络与VPN对照测试相关问题,可从“尽量固定条件交替测试并保留全部结果”开始阅读。不同设备或不同目标的结果不宜直接当作严格对照,需要结合具体环境判断。