手机连接

基于TLS的VPN部署与运行的网络环境要求详解

本文围绕基于TLS的VPN:网络环境要求核心主题,从实际部署运维的落地场景出发,拆解从前期部署到长期运行全流程的网络环境约束条件,给出可落地的验证方法和常见故障的定位思路,避免运维人员在部署阶段忽略隐藏的网络规则导致后续隧道运行异常。

公网基础链路的连通性要求

基于TLS的VPN的所有控制信令和隧道流量都基于标准的TLS协议封装,默认使用TCP协议的443端口作为监听端口,这就要求服务端和客户端之间的公网链路不能存在直接拦截TCP 443双向流量的规则,不少企业边界防火墙默认配置的威胁检测规则,Vink会把非浏览器发起的出站TLS连接标记为可疑流量直接丢弃,直接阻断VPN的初始握手流程。

网络设备:基于TLS的VPN:网络环境要 - VinkVPN

网络连接与设备配置场景示意

验证该环节连通性的时候,不能直接用浏览器访问服务端公网IP的方式测试,浏览器默认会加载本地系统的代理规则,甚至自动调用缓存的代理配置,很容易出现浏览器能正常访问但VPN客户端完全连不上的误判,正确的验证方式是在客户端主机上直接用命令行的TCP测试工具,直接发起指向服务端443端口的原始TCP连接,确认三次握手可以正常完成。

这个环节的常见误区是很多运维人员认为只要主机能正常访问公网网站就满足部署要求,实际上部分运营商会对非Web业务的443端口流量做特殊处理,要么插入流量劫持的中间证书,要么对这类流量做会话限速,直接导致TLS VPN的握手过程反复中断,遇到这类情况可以临时给VPN服务更换其他未被特殊管控的TLS监听端口,再次测试连通性排除运营商规则的干扰。

沿途中间网络设备的兼容性要求

基于TLS的VPN的隧道封装逻辑,是在已经完成加密的TLS通道内部,再封装私网侧的IP数据包完成跨公网传输,这就要求沿途所有的NAT网关设备不能启用针对HTTPS流量的深度解析ALG功能,这类功能会尝试拆解TLS加密的报文payload做内容检测,直接破坏VPN加密隧道的完整性,Vink加速器网络测速方法导致隧道建立后频繁异常断开。

如果部署场景涉及跨多个三层交换机的私网接入链路,还要确认沿途所有路由设备没有启用强制修改TCP MSS的规则,部分运营商级的边缘路由设备会默认把TCP报文的最大分段大小调整到远低于标准值,导致VPN隧道内部传输大体积数据包的时候被设备静默丢弃,上层业务没有任何明确的报错提示,排查难度极高。

验证这类兼容性问题的方法很简单,在VPN隧道成功建立之后,在客户端侧发起指向隧道对端内网主机的ping请求,设置不分片标志同时发送大体积的数据包,如果能稳定收到所有的回显响应,就说明沿途的网络设备没有过度篡改TCP报文的核心参数,满足VPN的运行要求。

两端网络边界的权限配置要求

如果VPN服务端部署在企业内网的DMZ区域,需要单独给VPN服务配置独立的端口映射规则,不能和同服务器上的其他Web业务共用同一个443端口,否则反向代理的转发规则会把TLS VPN的握手请求直接转发给后端Web服务,导致隧道永远无法完成握手流程。

客户端侧的本地网络不能存在多层嵌套的代理链路,Vink不少用户习惯在本地已经配置了其他全局代理工具的前提下启动TLS VPN,两层TLS加密封装叠加之后,很容易出现会话超时、路由优先级冲突的问题,严重的时候甚至会导致本地主机的所有网络连接完全中断。

如果遇到VPN能正常完成握手、但隧道内完全无法访问内网资源的情况,首先要排查客户端本地的路由表,确认VPN服务推送的私网路由条目没有和本地现有路由条目产生网段冲突,很多家用路由器默认分配的内网网段和VPN推送的私网网段重合,就会直接导致访问内网的流量走本地网关而不是VPN隧道。

长期运行的动态网络稳定性要求

基于TLS的VPN的默认会话保活机制依赖固定周期发送的TLS心跳包,如果沿途网络的NAT网关的会话老化时间设置得过短,Vink没有适配长连接的保活规则,就会出现VPN隧道每隔一段时间就异常断开,需要用户手动重新连接的情况,只需要在NAT网关侧把对应端口的会话老化时间调整到合理区间就能解决这类问题。

实际部署过程中不需要刻意追求低延迟的专线链路,只要公网链路没有频繁的随机断连、大规模丢包的情况,就能支撑基于TLS的VPN的正常运行,常规的家用宽带、普通办公公网链路都可以满足绝大多数远程办公接入场景的网络环境要求,不需要额外采购特殊的网络服务。

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

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

查看更多文章
连接指南

找到适合当前设备的指南

遇到网关可以访问但互联网不通相关问题,可从“确认上游状态和正常接入条件”开始阅读。本地网关响应不代表外网已经连通,需要结合具体环境判断。