能访问外国网站的VPN
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隧道的功能。
这里公钥使用的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内核模块。
这里的wg0设备里面显示了NOARP,也就是说不支持2层mac地址查找,因此wireguard只能封装三层包。
上面演示的是纯手工创建wireguard隧道,还有另一种方式,可以事先把配置先写入f文件中,然后wg-quick up wg0启用起来就可以。
wg-quick-up命令除了会自动创建wg0设备并配置好wireguard的参数之外,还会处理路由表相关的东西,特别是当AllowedIPs设置为0.0.0.0/0时能访问外国网站的VPN,就会通过ip rule添加额外的路由表,来让本机出去的流量都从wg0设备走,不然这些规则都要手动设置。
从上面的介绍可以看出,wireguard真的是简单,配置参数也少,但是就是这样一个vpn最纯正功能的软件,却直到最近才被开发出来,当然wireguard缺点也是有的,比如没办法加密两个节点之间本来的流量,wireguard只有在新接口上的流量才能被加密,而ipsec却可以做到^^。