WireGuard

程序人生 160 2018-09-12 15:18

一、WireGuard 是什么?

她是一个构建快速、现代、安全 VPN Tunnel 的协议和工具套件

  • 使用最先进的加密技术,防范攻击(RSA, SHA 广被诟病都将被淘汰)
  • 性能远超 OpenVPN
  • 效率极高,WireGuard 协议作为 Linux 内核模块运行
  • 通用用途,支持嵌入式和非嵌入式设备
  • 跨平台,初期在 Linux 平台发布,现已支持所有平台
  • 易用,用过 OpenVPN 等工具集的人都明白这其中的痛苦
  • 工作在 3 层(链路层),支持漫游,地址变更对用户无感知,使用更简单,切换更平滑
  • 使用 UDP 传输数据,轻量、高效、节能、节省带宽(适用于 IOT 领域)
  • 基于 GPLv2 (Linux Kernel 基于 GPLv2)免费开源

我们为什么需要另一个 VPN 实现?

当前 VPN 领域,已经有了 IPSEC, PPTP, L2TP, OpenVPN,为什么我们还需要另一种?

更少的实现代码
相比OpenVPN 600,000 行代码来说,WireGuard 只有4,000 行,对于安全组件,代码量越少,可能遭受到的攻击越少,也更容易被世界各地的开发者 reivew。

更容易部署
作为比较,一个完全不熟悉 VPN 的技术人员,使用 OpenVPN 和 WireGuard 部署一套 VPN 所使用的时间大概是 48小时对 6 小时。

更强的加密算法

  • Curve25519 目前最高水平的秘钥交换算法(Diffie-Hellman 函数,Daniel J. Bernstein 设计)
  • ChaCha20 对称加解密算法,比 AES 更快更高效(Daniel J. Bernstein 设计)
  • Poly1305 是一种 MAC (Message Authentication Code) 标准,用于验证数据的完整性和消息的真实性
  • BLAKE2 一种更安全的 HASH 算法(类似的有 SHA1, SHA256, MD5)
  • SipHash24 另一种 HASH 算法
  • HKDF 一种秘钥衍生算法

更快的连接
在 OpenVPN,OpenSSL 的世界里,等待是习以为常的事情,因为协议的复杂性决定了连接的建立非常耗时,通常你需要主动告诉用户 VPN 正在建立连接中,否则用户会以为程序挂掉了,而当你第一次用上 WireGuard 客户端后,你发现他的速度才是你一直想要的速度,就是这种感觉,跟你在 shell 里打一个命令一样简单快速。

Linus Torvalds 如何评价?

在了解 WireGurad 是什么之前,让我们先看一段 Linus Tdrvalds 在邮件组中的一段话,世界上能入 Torvalds 法眼的东西太少了,从他的这段话中我们可以看出 WireGuard 的分量,当然这其中也有其前任 OpenVPN 和 IPSec 等的使用极其复杂,同时还频频爆出安全漏洞的原因。

Linus Torvalds, on the Linux Kernel Mailing List:
Can I just once again state my love for it and hope it gets merged soon? Maybe the code isn't perfect, but I've skimmed it, and compared to the horrors that are OpenVPN and IPSec, it's a work of art.

二、简单体验她的设计之美

所有的新技术都会吹嘘自己一番,只有用了之后才能知道她是否真的易用、快速,下面就以 Windows 平台来体验一下她的简单易用性。

Windows 平台

  • 访问 WireGuard Windows Client 实现 网站下载 Windows 版本客户端最新版安装并启动软件。
    WireGuard-JEESNS
WireGuard-JEESNS
  • 打开 File 菜单,选择 Generate Key Pair 然后创建公私密钥对,访问地址 https://tunsafe.com/vpn 将你的公钥拷贝到输入框,点击创建账户按钮,然后输入你的私钥,创建配置文件,然后将配置文件 tunsafe.conf 下载到本地。通过 File 菜单下的 Import File 导入刚刚下载的配置文件。弹出是否覆盖,选择覆盖就行,然后点击按钮 Connect 即可连接到 VPN ,实时访问一下 google.com 来测试一下。
WireGuard-JEESNS
WireGuard-JEESNS
WireGuard-JEESNS
WireGuard-JEESNS

安卓客户端

  • 访问 AzireVPN https://www.azirevpn.com/manager/auth/register,只需要填写用户名和密码即可,可以不填 Email,这才是注重隐私的 VPN 供应商. 如果注册需要邀请码 Referral code 可以填:wf63gFwSQw。

  • 下载配置文件:https://www.azirevpn.com/cfg/wireguard,在这个网址填写注册的用户名密码,点Download Configuration。目前提供了加拿大多伦多(azirevpn-ca1),西班牙马拉加(azirevpn-es1),瑞典斯德哥尔摩(azirevpn-se1),英国伦敦(azirevpn-uk1),美国迈阿密(azirevpn-us1)这5个节点

  • 安装WireGuard Android客户端,Play 下载地址:https://play.google.com/store/apps/details?id=com.wireguard.android

  • 导入配置文件:把之前下载的配置文件传到手机里,手机上打开 WireGuard 客户端,点右下角加号,选择第一个 Create from file or archive,点选传到手机里的配置文件。这时直接点选某个配置文件即可连接 VPN,建议选择 uk1 服务器。

  • WireGuard 客户端可以允许部分应用绕过 VPN,打开 WireGuard,点击一个节点配置,在右上角点击铅笔按钮,在中间有蓝色的 0 EXCLUDED APPLICATIONS,点击后进入 APP 排除设置,勾选某个 APP 就是让这个 APP 不走 VPN 通道。选择完成后点右下角蓝色 SET EXCLUSIONGS,然后点配置界面右上角的保存按钮即可。WireGuard Android客户端支持快捷设置面板功能。即在下拉通知栏中可以添加 WireGuard 快捷设置。

三、如何架设基于 WireGuard 的 VPN 服务端

待续

文章评论