小鸟VPN
小鸟VPN Logo
隐私与安全

一文详解VPN数据封装的完整工作过程与底层机制

很多企业运维和网络技术爱好者在配置站点到站点VPN或者远程访问VPN的时候,经常遇到隧道显示已建立,但是内网业务流量无法正常传输的问题,这类故障大部分都和VPN数据封装的流程异常有关。本文从实际企业分支组网的场景出发,完整拆解VPN数据封装的全工作过程和底层运行逻辑,结合可落地的设备检查步骤,帮使用者理清封装环节的各个关键节点,避开常见的配置误区。

VPN数据封装的触发前置场景

最常见的企业站点到站点VPN部署场景中,运维人员会先在总部和分支的两台VPN网关上配置感兴趣流规则,小鸟一般会指定两端需要互访的私网网段范围,比如总部的192.168.1.0/24办公网段和分支的192.168.2.0/24业务服务器网段,规则明确说明只有源目IP属于这两个网段互访的流量,才需要走VPN隧道封装,其余普通的公网上网流量直接通过网关转发到公网,不需要进入VPN处理队列。

当总部内网的办公用户打开浏览器访问分支的文件服务器时,终端生成的原始数据包源IP是自身的192.168.1.x私网地址,目的IP是文件服务器的192.168.2.x私网地址,数据包转发到内网网关之后,网关会匹配预先配置的感兴趣流规则,匹配成功的流量才会正式进入VPN数据封装流程,很多新手配置VPN的时候漏写双向的感兴趣流规则,会导致部分方向的流量没有被封装,最终出现VPN单通的故障现象。

VPN数据封装的逐层处理工作过程

VPN数据封装的第一步是保留完整的原始内网数据包,网关设备不会修改原始IP包头里的源目私网地址,也不会改动数据包里的业务数据内容,而是把整个原始数据包直接作为新数据包的载荷部分,这种封装模式就是绝大多数场景下使用的隧道模式,和只封装传输层内容的传输模式相比,隧道模式可以完整隐藏整个内网的地址结构,对公网中间设备完全屏蔽私网路由信息。

真实组网展示VPN数据封装工作过程

站点到站点VPN部署场景中,符合规则的私网互访流量将进入VPN封装队列

完成载荷打包之后,设备会给这个藏着原始内网包的载荷,追加全新的外层公网IP头,外层包头的源IP是总部VPN网关连接公网的物理接口地址,目的IP是对端分支VPN网关的公网接口地址,这两个地址都是公网路由可达的公网IP,公网里的所有路由器、交换机都可以正常识别和转发这层包头的路由信息。

外层IP头封装完成后,设备会调用两端VPN网关预先通过IKE协议协商好的加密算法,对载荷部分也就是整个原始内网数据包做加密处理,同时生成对应的完整性校验字段,接收端后续会用完全一致的密钥和算法校验数据包,确认内容在公网传输过程中没有被篡改,避免未加密的私网数据直接暴露在公网环境中。

最后设备还会根据使用的VPN协议类型追加对应的协议头字段,如果是常用的IPsec VPN ESP模式,会在加密内容尾部追加ESP尾和ESP认证头,如果是SSL VPN的封装,还会在外层再追加TCP或者UDP传输层头,使用443这类公网普遍放行的常用端口传输,避免中间链路的防火墙把VPN封装数据包当成未知流量拦截。

封装完成后的转发与解封装验证逻辑

所有封装步骤完成之后生成的最终数据包,从总部VPN网关的公网接口发出,从外观上看和普通的公网用户访问网站的IP数据包没有明显区别,公网沿途的所有网络设备只会根据外层的公网目的IP地址转发流量,完全感知不到这个数据包的载荷里还嵌套着一个完整的私网原始数据包。

当封装后的数据包到达分支的VPN网关之后,设备首先校验外层公网包头的目的地址是否属于自身的接口地址,再校验数据包的完整性校验字段是否合法,小鸟加速器确认数据包不是伪造的攻击包、传输过程中没有被篡改之后,就会逐层剥离外层的所有封装字段,还原出最开始的未做任何改动的原始内网IP数据包。

分支网关把还原后的原始数据包,按照普通内网流量的转发规则转发给对应的文件服务器,服务器返回的响应流量会触发完全反向的VPN封装流程,整个来回的业务流量都会通过加密隧道完成传输,两端的内网用户访问对端资源的时候,完全感知不到中间公网的VPN封装解封装过程。

封装环节的常见故障定位思路

运维遇到VPN隧道显示已建立但是内网业务无法互通的故障时,首先可以在VPN网关的公网接口上开启端口镜像抓包,查看封装完成后的数据包外层源目公网地址是否和两端网关的实际配置一致,如果外层目的IP不是对端网关的公网地址,大概率是感兴趣流规则配置错误,需要调整规则把需要走隧道的流量纳入封装范围。

其次可以检查两端VPN网关配置的加密套件、校验算法是否完全匹配,如果一端配置的加密算法对端设备不支持,封装出来的数据包校验结果会和对端的预期不一致,接收端收到之后会直接丢弃数据包,不会执行后续的解封装流程,这类问题在不同品牌的VPN设备做跨厂商对接的时候出现概率很高。

部分场景下公网中间的运营商防火墙会对超大长度的IP数据包做分片拦截,如果抓包发现封装后的大包全部被丢弃,可以尝试在VPN网关上调整封装后的TCP MSS值,避免封装后的数据包长度超过公网链路的MTU阈值,导致正常封装的流量无法顺利传输。

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

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

查看更多文章
配置入门

从一个连接问题开始

遇到OpenVPN升级后的选项变化相关问题,可从“由服务方更新配置并按文档验证”开始阅读。不宜为了兼容未知旧设置随意降低安全要求,需要结合具体环境判断。