赞
踩
正文共:1376 字 7 图,预估阅读时间:4 分钟
从上篇文章的配置过程来看(使用8条命令即可完成的VPN配置!CentOS快速配置WireGuard全互联组网),不难看出,WireGuard其实也是一种IPsec VPN。那它和传统的VPN有什么区别呢?我们通过抓包来分析一下。
报文转包一共抓到了6个报文,协议写的是WireGuard,WireGuard都是一种协议了吗?
第一个报文是PCB发送给PCA的,报文类型是发起握手,目的端口号可以对应的上,是UDP端口40846。同时我们注意到一个非常像密钥的字符串,但是通过对比发现,这个字符串既不是PCB本地的私钥,也不是公钥。结合前面的ephemeral这个单词,意为短暂的,而且下面还备注没有私钥。
其实这里所有的字段都是计算出来的,reserved固定为0,sender是在发送此消息时随机生成的,和IPsec的SPI字段等效。ephemeral这里是由一个DH算法得到的;static和timestamp都是使用RFC7539定义的加密算法得到的;就连看起来最固定的mac也是做了好几次运算才得到的,公式长下面这样:
固定的公钥也只是作为其中的一个参数而已。所以这个mac跟MAC地址一点关系都没有,他叫Cookie MAC,所以他是Cookie而不是MAC。
第二个报文类型是握手响应,同样也是复杂的公式计算出来的。
然后后面的4个报文就没有什么什么能看的了。
正常来讲,按照WireGuard的介绍,双方用于发送和接受传输数据消息的密钥就是在后面的报文中交互的。加密算法大概长下面这样:
同时,按照官方资料的介绍,对等体双方正常是一个RTT的握手报文交互之后就开始数据转发了。
这就让我想起了测试过程,我是重启了设备之后重新配置进行测试的。WireGuard的配置在重启设备之后会丢失,所以应该写成配置脚本然后在开机的时候自动运行。
其次,配置完成之后,VPN隧道不会自动建立,需要手工触发才行,报文中的6个包,分别是两个握手报文加上4个加密了的ICMP报文,这就对上了。
虽然VPN不能自己保存和建立,但是WireGuard有被动保活机制,被动保活报文仅在对等体没有要发送的内容时发送,并且仅在另一个对等体正在向其发送经过身份验证的传输数据消息时发送。这意味着当双方都没有交换传输数据消息时,网络链接将保持沉默。
所以,综合来看,WireGuard确实相比传统的IPsec有了较大的改进,WireGuard认为传统的IPsec在转发层和接口层是分离的,而WireGuard则直接新建了一个虚拟接口来进行转发。
同样的,WireGuard认为OpenVPN的性能很差,因为必须在内核空间和用户空间之间多次复制数据包,需要一个长寿命的守护进程。并且支持全部过多的TLS功能,增加了相当多的代码,提高了漏洞暴露的风险。
同时,WireGuard声称密钥分发机制是从OpenSSH中汲取的灵感,像前面那样,两个对等体之间通过某种未指定的机制交换它们的公钥,然后它们就能够通信了。
加密算法上,WireGuard声称故意缺乏密码和协议敏捷性,但采用了几种新颖的密码学和系统解决方案来实现其目标,具有针对拒绝服务攻击的内置保护,如果在底层原语中发现漏洞,则所有端点都需要更新。
WireGuard官方声称其代码不足4000行,那我感觉这其中应该绝大部分都是加密算法吧。这也说明了其可以拥有简单实施、极其高性能、利用最先进的加密技术并且易于管理的安全网络隧道。简单性使其能够非常容易地在各种平台上进行独立验证和重新实现;所使用的加密结构和原语确保了从数据中心服务器到手机的各种设备的高速运行,以及未来可靠的安全特性;易于部署还将消除目前在许多 IPsec 部署中常见的许多灾难性陷阱。
长按二维码
关注我们吧
使用8条命令即可完成的VPN配置!CentOS快速配置WireGuard全互联组网
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。