返回列表 发帖

智汇华云|WireguardVPN介绍与使用

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

返回列表