写点什么

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

用户头像
华云数据
关注
发布于: 2021 年 07 月 29 日


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


1627436541428678.png


在 12.13.11.13 上执行如下命令:


1627436557705756.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 节点:


1627436601710205.png


12.13.11.13 节点:


1627436615404802.png


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


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

用户头像

华云数据

关注

还未添加个人签名 2020.11.02 加入

还未添加个人简介

评论

发布
暂无评论
智汇华云 | Wireguard VPN 介绍与使用