首先我们要搞清楚一个问题,Wireguard和OpenVPN的区别在哪里
- Wireguard基于UDP协议,继承于内核中,由于加密协议简单(但安全),开销较小,性能较高
-
OpenVPN基于TCP或UDP协议,由SSL/TLS实现身份加密,没有Wireguard效率高,但是支持多种管理方式
在实际使用上,TCP和UDP也有较大区别
- TCP:可以提供更可靠的连接,因为它具有确认和重传机制,能够处理丢包和错误。适用于对数据完整性和可靠性要求较高的场景。
UDP:UDP可以提供更快的速度和较低的延迟,适用于实时应用程序和视频流等对延迟敏感的情况。UDP模式还可以避免TCP拥塞控制的限制,适用于高带宽环境
UDP在实际使用上可能会被QOS限速,但是在长距离、高延迟的VPN环境中还是可以发挥不错的效果,不容易出现TCP经常断连的情况。
实现方案
在某个实际应用场景中,我需要将在B地不同地区访问位于A地的局域网,A地与B地物理相隔较远并且网络条件较差,但是对业务实时性没有太多要求,并且A地存在NAT
方案一
全部走OpenVPN,对A-B两地互联的机器使用UDP协议,确保可以通讯
B地对B地其他地区使用TCP协议,确保连接稳定性
方案一可以参考
Windows上使用OpenVPN实现于异地访问公司内网资源(Tunnel方式、公网服务器frp转发)
方案二
在A-B两地之间使用Wireguard
在B地服务器是用OpenVPN供B地其他地区使用
网络结构如下
A地内网<--->A地服务器<- Wireguard-UDP ->B地服务器<- OpenVPN TCP/UCP ->B地其他地区用户
两方案相比,方案一更加简单,但是没有方案二稳定,并且AB两地如果存在高带宽情况用OpenVPN可能会消耗大量资源,在技术难度上方案二要设置转发,需要对两个VPN进行分别配置
最终选择方案二进行