远程办公

一文详解OpenVPNUDP模式的连接底层实现原理

一文详解OpenVPNUDP模式的连接底层实现原理

本文围绕OpenVPN UDP模式:连接原理展开,从底层运行逻辑、握手流程、封装机制到实际场景的验证排障做完整拆解,覆盖普通运维人员和个人用户配置过程中会遇到的实际问题,不需要依赖特殊测试工具就能完成全流程的状态校验,帮使用者理清UDP模式和TCP模式的本质差异,避免配置时的常见错误。

OpenVPN UDP模式的核心运行前提

UDP协议本身是传输层的无连接协议,没有内置的握手、重传和流量控制机制,OpenVPN UDP模式并没有试图修改内核原生的UDP协议栈,而是在用户态自建了一整套适配VPN场景的控制逻辑,从根源上规避了TCP over TCP场景下的双重重传冲突问题,这也是很多跨运营商网络、高波动公网场景下用户优先选择UDP模式的核心原因。

网络设备:OpenVPN UDP模式:连

OpenVPN UDP模式下客户端与服务端的数据包传输交互场景

要正常启用OpenVPN UDP模式,最基础的配置前提是客户端和服务端的配置文件中都明确声明传输协议为UDP,不能出现两端协议不匹配的情况,同时服务端的防火墙、云服务商安全组规则都需要对应放通指定UDP端口的双向流量,小美加速器官网很多新手用户配置时只放通了同端口的TCP流量,最终会出现客户端反复发握手包但完全收不到服务端回应的问题。

UDP模式下的隐式用户态握手实现逻辑

和TCP模式下由操作系统内核协议栈完成的三次握手不同,OpenVPN UDP模式的握手流程完全在用户态完成,小美内核层面不会生成任何对应的连接状态记录,整个过程分为三步:首先客户端向服务端发送携带HARD_RESET_CLIENT标记的初始报文,附带本地随机生成的客户端专属会话ID,服务端收到合法报文后返回携带HARD_RESET_SERVER标记的回应报文,附带服务端生成的会话ID和后续加密需要的临时协商参数,最后客户端再发送一次会话确认报文,两端就完成了会话关系的绑定。

在普通家用宽带的使用场景下,很多运营商配发的路由器默认会对UDP会话做超时回收,如果两端长时间没有任何数据交互,路由器的会话表项被清空后,后续从公网侧返回的OpenVPN UDP报文就会被直接丢弃,OpenVPN内置的保活探测机制就是为了适配这类场景,定期发送小尺寸探测包维持中间网络设备的会话表项有效。

用户态数据封装的完整传输流程

完成握手协商出对称加密密钥之后,两端的业务数据传输就进入正式流程:内网侧的原始IP报文先流入OpenVPN程序绑定的TUN/TAP虚拟网卡,操作系统内核会把路由指向虚拟网卡的报文直接转发到OpenVPN的用户态进程,进程首先会对报文做完整性校验,再用之前协商好的加密算法完成对称加密,之后给加密后的载荷加上OpenVPN自定义的报文头,小美标记当前所属的会话ID和报文专属序列号,最后调用系统原生的UDP套接字接口把报文发送到公网对端。

服务端收到公网侧的UDP报文之后,会先提取报文头里的序列号做乱序和重复包校验,过滤掉重复到达的无效报文,校验通过之后再解密还原出原始的三层或者二层报文,最终转发到服务端的物理网卡完成内网路由转发,整个流程没有内核TCP协议栈的介入,所有的重传、乱序排序逻辑都由OpenVPN自身的用户态代码实现,运维人员可以根据实际的网络场景灵活调整相关参数。

连接有效性验证与常见误区排查

验证OpenVPN UDP模式是否正常运行的第一步,不要直接查看虚拟网卡的获取IP状态,优先在客户端本地用tcpdump或者wireshark抓对应出站UDP端口的报文,确认客户端是否在持续向外发送握手请求包,如果本地完全没有对应的报文发出,大概率是客户端本地的系统防火墙拦截了UDP协议的出站流量。

第二步需要登录服务端,在公网物理网卡上抓取对应监听UDP端口的所有报文,如果能正常收到客户端发来的握手报文但完全看不到服务端的回应报文,首先核对服务端的本地防火墙规则是否放通了UDP流量,再检查OpenVPN服务端配置里的监听地址是否正确,有没有误绑定到127.0.0.1本地回环地址导致公网请求无法得到回应。

很多新手用户对OpenVPN UDP模式存在认知误区,误以为UDP模式完全不需要任何可靠性保障机制,实际上OpenVPN默认开启了自适应重传逻辑,如果在高波动的公网场景下随意关闭重传机制,小美加速器官网反而会出现大量业务报文丢失导致连接卡顿的问题,同时也不建议在UDP模式的外层再叠加TCP协议的代理服务,这样会完全抵消UDP模式本身的架构优势。

网络加速编辑组
网络加速编辑组
内容编辑

从延迟、抖动和丢包入手,分析不同网络环境下的连接体验。

查看更多文章
配置入门

从一个连接问题开始

遇到无线中继回程不足相关问题,可从“靠近主路由或采用有线回程做对照”开始阅读。只查看终端信号格不能评估整段无线链路,需要结合具体环境判断。