智汇华云 | Wireguard VPN 介绍与使用

互联网科技 时间:2021-07-28 发表评论


Wireguard作为新一代VPN的代表,可能很多同学都不太了解。和其它 VPN 技术一样,我们可以使用它在家庭网络和公司网络之间搭建一条安全的信道,由此可以访问「内网」的数据和应用。本期智汇华云,我们为大家带来《Wireguard VPN 介绍与使用》。


Wireguard是目前使用起来最方便的,入门最快(内核代码只有4000行),性能最强的l3 vpn,即使是在树莓派这种入门级嵌入式平台上也能跑到600Mb/s的速度,并且配置wireguard比其他vpn都要方便的多,配置参数基本看上去就能理解,如果你以前配置过ipsec vpn,那一定会对一大堆参数感到莫名的头疼,常常会因为连不上而查看log并调整参数。


Wireguard工作原理

内核会创建出对应的wireguard接口,这里取名为wg0,接口上配置了双方通信的地址,这样当物理机上的程序使用10.66.66.1地址进行访问10.66.66.2地址时,内核就会进行数据包加密,并把加密之后的报文封包为udp报文,发送给对方,对方内核会进行报文解密,并把解密之后的数据包发送给用户,完成vpn隧道的功能。


Wireguard概念介绍

Wireguard vpn中涉及到几个基本概念:

Peer:wireguard中的节点。

私钥(Private key):每个节点自己的私钥,可以使用wg genkey生成。

公钥(Public key):每个节点自己的公钥,可以使用wg pubkey生成。

allowed-ips:定义每个节点允许通过的ip地址段。

这里公钥使用的Curve25519的Diffie-Hellman函数,由Daniel J. Bernstein教授设计。在密码学中,它是最快的ECC曲线之一,并未被任何已知专利所涵盖。并且wireguard为了防止被以后的量子计算机破解,还可以额外使用wg genpsk产生与共享密钥来保证安全。考虑的真的是周到。


Wireguard 隧道创建流程非常简单,用一句话来说就是,通过curve25519进行ecdh密钥交换得到双方的对称密钥,之后所有报文通过该密钥进行加解密。

其实所有的vpn都是为了双方协商一个密钥进行通信,但是能做到如此简单的还只有wireguard,不像ipsec,协商个密钥真的是复杂,ikev1就有野蛮模式和主模式,之后又来了个ikev2版本,让人头晕,就看libreswan中光pluto目录下代码就有10万行。


Wireguard使用

安装wireguard:

如果内核大于5.6就不需要安装内核模块了,只要安装wireguard-tools工具就行。旧版本内核可以安装wireguard-dkms内核模块。

# apt install wireguard-tools wireguard-dkms


了解前面几个基本概念之后,就可以通过ip命令创建一个最简单的wireguard vpn。

在12.13.11.10机器上执行如下命令:

71.png

在12.13.11.13上执行如下命令:

72.png


查看wireguard连接状态:

这里可以看到wireguard vpn建立正常,已经可以ping通对方地址。

这里的wg0设备里面显示了NOARP,也就是说不支持2层mac地址查找,因此wireguard只能封装三层包。


要停止手工创建的wireguard隧道也很简单,直接删除就行了:

# ip link del dev wg0


上面演示的是纯手工创建wireguard隧道,还有另一种方式,可以事先把配置先写入/etc/wireguard/wg0.conf文件中,然后wg-quick up wg0启用起来就可以。

12.13.11.10节点:

73.png

12.13.11.13节点:

74.png

wg-quick-up命令除了会自动创建wg0设备并配置好wireguard的参数之外,还会处理路由表相关的东西,特别是当AllowedIPs设置为0.0.0.0/0时,就会通过ip rule添加额外的路由表,来让本机出去的流量都从wg0设备走,不然这些规则都要手动设置。



从上面的介绍可以看出,wireguard真的是简单,配置参数也少,但是就是这样一个vpn最纯正功能的软件,却直到最近才被开发出来,当然wireguard缺点也是有的,比如没办法加密两个节点之间本来的流量,wireguard只有在新接口上的流量才能被加密,而ipsec却可以做到^^。


 
反对 0举报 0 收藏 0 打赏 0评论 0
 
网站首页 关于我们 联系方式 使用协议 网站留言RSS订阅违规举报 友情链接