Wireguard作为新一代VPN的代表,可能很多同学都不太了解。和其它 VPN 技术一样,我们可以使用它在家庭网络和公司网络之间搭建一条安全的信道,由此可以访问「内网」的数据和应用。本期智汇华云,我们为大家带来《Wireguard VPN 介绍与使用》。
Wireguard是目前使用起来最方便的,入门最快(内核代码只有4000行),性能最强的l3 vpn,即使是在树莓派这种入门级嵌入式平台上也能跑到600Mb/s的速度,并且配置wireguard比其他vpn都要方便的多通过加速器上外网流量怎么算,,配置参数基本看上去就能理解,如果你以前配置过ipsec vpn,那一定会对一大堆参数感到莫名的头疼通过加速器上外网流量怎么算,常常会因为连不上而查看log并调整参数。
内核会创建出对应的wireguard接口,这里取名为wg0,接口上配置了双方通信的地址,这样当物理机上的程序使用10.66.66.1地址进行访问10.66.66.2地址时,内核就会进行数据包加密,并把加密之后的报文封包为udp报文,发送给对方,对方内核会进行报文解密,并把解密之后的数据包发送给用户,完成vpn隧道的功能。
私钥(Private key):每个节点自己的私钥,可以使用wg genkey生成。
公钥(Public key):每个节点自己的公钥,可以使用wg pubkey生成。
这里公钥使用的Curve25519的Diffie-Hellman函数,由Daniel J. Bernstein教授设计。在密码学中,它是最快的ECC曲线之一,并未被任何已知专利所涵盖。并且wireguard为了防止被以后的量子计算机破解,还可以额外使用wg genpsk产生与共享密钥来保证安全。考虑的真的是周到。
Wireguard 隧道创建流程非常简单,用一句话来说就是,通过curve25519进行ecdh密钥交换得到双方的对称密钥,之后所有报文通过该密钥进行加解密。
其实所有的vpn都是为了双方协商一个密钥进行通信,但是能做到如此简单的还只有wireguard,不像ipsec,协商个密钥线就有野蛮模式和主模式,之后又来了个ikev2版本,让人头晕,就看libreswan中光pluto目录下代码就有10万行。
如果内核大于5.6就不需要安装内核模块了,只要安装wireguard-tools工具就行。旧版本内核可以安装wireguard-dkms内核模块。
了解前面几个基本概念之后,就可以通过ip命令创建一个最简单的wireguard vpn可以免费进入外网的加速器。
这里可以看到wireguard vpn建立正常,已经可以ping通对方地址。
这里的wg0设备里面显示了NOARP,也就是说不支持2层mac地址查找,因此wireguard只能封装三层包。
上面演示的是纯手工创建wireguard隧道,还有另一种方式,可以事先把配置先写入f文件中,然后wg-quick up wg0启用起来就可以。
wg-quick-up命令除了会自动创建wg0设备并配置好wireguard的参数之外,还会处理路由表相关的东西,特别是当AllowedIPs设置为0.0.0.0/0时,就会通过ip rule添加额外的路由表,来让本机出去的流量都从wg0设备走,不然这些规则都要手动设置。
从上面的介绍可以看出,wireguard真的是简单,配置参数也少,但是就是这样一个vpn最纯正功能的软件,却直到最近才被开发出来,当然wireguard缺点也是有的,比如没办法加密两个节点之间本来的流量,wireguard只有在新接口上的流量才能被加密,而ipsec却可以做到^^。