改进 VPN 用户体验

本页面为网络运营商提供了一些准则,以确保消费者和企业虚拟专用网 (VPN) 应用在他们的网络中提供良好的最终用户体验。Android 为开发者提供了 VpnManager 类来创建 VPN 解决方案,供消费者和企业用于加密其通信或将其路由到不同的网络。

我们建议网络运营商遵循以下准则:

  • 支持您网络中的 IPv6 封装安全载荷 (ESP) 协议(Next Header 为 50)数据包,确保此流量的性能与用户数据报协议 (UDP) 或传输控制协议 (TCP) 连接相当。ESP 会话应设置为允许入站到设备,或设置为非常高的超时,并以线路速率转发。
  • 设置网络地址转换 (NAT) 和有状态防火墙超时(端口 4500 上的 UDP 连接至少为 600 秒时间),确保 VPN 解决方案可以保持可靠的连接,且不会产生过多的电源费用。

支持 IPv6 ESP 协议(Next Header 为 50)数据包

封装安全载荷 (ESP) 是在互联网协议安全 (IPSec) 协议集中定义的数据包格式,用于对 VPN 解决方案中的数据包进行加密和身份验证。Android OS 在其内置 VPN 解决方案中实现了此标准安全协议。

在支持 IPv6 的网络上,ESP 数据包会直接传送到“Next Header”字段为 50 的 IPv6 数据包中。如果网络不能正确支持这些类型的数据包,就可能导致旨在使用此协议而不会进一步封装数据包的 VPN 解决方案无法连接。网络可能会因防火墙配置而丢弃这些数据包。或者,ESP 数据包可能会在网络上遇到缓慢路径,吞吐量性能与 TCP 或 UDP 连接相比大大降低。

互联网工程任务组 (IETF) 建议允许消费者互联网访问服务使用的防火墙使用 IPsec。例如,请参阅 RFC 6092 第 3.2.4 节。ESP 数据包可以安全地允许从两个方向通过防火墙,因为如果设备收到的 ESP 数据包不属于现有安全关联,则设备会丢弃该数据包。因此,设备无需发送 keepalive 数据包即可维护 VPN 连接,从而节省电池电量。我们建议网络始终允许将 ESP 数据包发送到设备,或者仅在长期处于不活动状态(例如 30 分钟)后将 ESP 会话超时。

我们建议网络运营商在其网络上支持 ESP 协议数据包(Next Header 为 50 的 IPv6 数据包),并在硬件中将这些数据包以线路速率转发。这样可确保 VPN 解决方案不会遇到连接问题,并且可以提供与 UDP 或 TCP 连接相当的性能。

设置足够的 NAT 和有状态防火墙超时时间

为了保持连接可靠性,VPN 解决方案需要与 VPN 服务器建立长期有效的连接,以便提供出站和入站连接(例如,接收传入的推送通知、聊天消息和音频/视频通话)。大多数 IPsec VPN 应用都使用封装在目标端口为 4500 的 IPv4 UDP 数据包中的 ESP,如 RFC 3948 中所述。

为了保持这种连接,设备需要定期向服务器发送数据包。这些数据包的发送频率必须高于网络运营商规定的 NAT 和防火墙超时频率。频繁的 keepalive 在客户端非常耗电,对电池续航时间有重大影响。它们还会在网络上产生大量信号流量,即使设备原本就处于空闲状态也是如此。

我们建议运营商将 NAT 和有状态防火墙超时设置得足够高,避免对电池造成影响。IPsec UDP 封装(端口 4500)的建议超时时间为 600 秒或更长。

在移动网络中,UDP NAT 超时通常保持很低,因为 IPv4 地址不足会导致端口重用率较高。不过,建立 VPN 后,设备网络无需支持长期有效的 TCP 连接,例如用于传送入站通知的 TCP 连接。因此,与 VPN 未运行相比,当 VPN 正在运行时,网络需要支持的长期连接数相同或更少。