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

智汇华云

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机器上执行如下命令:

智汇华云

在12.13.11.13上执行如下命令:

智汇华云

查看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节点:

智汇华云

12.13.11.13节点:

智汇华云

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

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

(免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。 )