Top Menu

Wireguard 比OpenVPN更加先进的点对点VPN

Wireguard是一个比OpenVPN更加先进的点对点VPN系统,作用是将分布在不同数据中心的VPS通过内网连接起来,这样就可以让多台VPS在一个更加安全和方便的局域网之内进行通信。例如VPS-1需要访问VPS-2的数据库,那么无需在VPS-2上开放3306端口,VPS-1直接就可以通过内网访问VPS-2的数据库。

在Debian 9上安装Wireguard

环境

  • Linode
  • Debian 9

注意

要在Linode上安装Wireguard必须要使用自定义内核,否则直接跟着官网的教程步骤,在运行 wg-quick up wg0 命令的时候会出现以下错误

如果出现以上错误,那么就需要更换内核

更新系统内核(Linode必须)

更新源列表

打开/etc/apt/sources.list

在最下方添加源地址(Debian 9,Debian 8把stretch改为jessie)

保存并退出

更新源

安装新版内核

Debian 9,Debian 8把stretch改为jessie

查看所有已安装内核

删除多余内核(可选)

一个内核大约200MB,如果不嫌占空间可以跳过此步骤

旧内核的名称用上面查看已安装内核命令中显示的内核名称填入即可

安装Linux-header

Debian 9,Debian 8把stretch改为jessie

应用设置并重启生效

更新引导

如果上面这条命令没有任何返回内容,那么需要安装grub2,否则重启后无法引导系统

清空缓存并重启

Linode用户记得在重启前按照这个教程把Boot Settings改为GRUB 2引导,然后再重启

验证

重启后可以通过以下命令来验证是否成功更换内核

系统当前内核版本

如果显示的是之前安装的内核版本,那么说明内核更新成功了

安装Wireguard

更新源地址

安装Wireguard软件包

验证

输入命令

如果输出显示如下,说明组件已经安装成功

否则有两种情况,一种是Linux-header没有安装,一种是先安装的wireguard,再安装的Linux-header,导致wireguard安装的时候配置失败。后一种情况可以通过以下命令重新安装wireguard来解决。

配置Wireguard

Wireguard的核心是点对点,所以对于任何一台加入这个系统的VPS来说,自身永远是服务器,其他VPS对它而言永远是节点,所以要想在两台VPS之间建立连接,必须在两台VPS同时互为设置为节点才行,多台VPS的系统以此类推。

或者换个方式来说,VPS-1要和VPS-2建立连接,需要如下步骤

VPS-1

  1. 设置密钥、自身IP及配置信息,启用Wireguard服务
  2. 添加VPS-2为节点

VPS-2

  1. 设置密钥、自身IP及配置信息,启用Wireguard服务
  2. 添加VPS-1为节点

VPS-1&VPS-2

  1. ping对方内网ip,返回成功信息
  2. 连接建立

具体的设置方法如下

设置自身密钥

设置自身IP及配置信息

进入/etc/wireguard/

打开文件

写入如下内容

其中<Private Key>可以通过 cat privatekey 获取并填入,Address是每个VPS唯一的识别标志,可以自己更改,但要保持在同一网段,/24和/64可以不写系统会自动补齐,IPV6地址是可选的可以不写,ListenPort是唯一需要在本机防火墙(UFW)上打开的端口,可以更改,需要填写到其他VPS的连接配置中。PostUp/PostDown是运行和停止时执行的iptables规则,用于打开和关闭转发和NAT。SaveConfig用于自动更新配置文件,之后添加节点只需要在命令行执行命令即可,无需再次编辑conf文件。

启用Wireguard服务

创建UFW规则,端口为之前conf文件中设定的本机监听端口

开启服务

如运行出错,详文章顶部错误解决方法

停止服务

查询服务状态

立即保存配置到配置文件

设置重启后自动运行

验证

检查ufw规则

检查连接状态

添加节点

建议不要手动在conf文件中写节点,可以使用命令行动态添加节点

其中<Client Public Key>就是节点的公钥,可以在节点VPS中运行 wg 查看或者使用 cat publickey 获取。endpoint就是节点的公网IP地址和端口,可以通过在节点VPS中运行wg查看。allowed-ips是节点的内网IP地址,即[Interface]的Address地址,IPV6地址是可选的,不建议初级用户填写,建议不要使用IP/64格式,直接使用IP,否则在添加第三个peer时会冲突。

检查是否成功添加节点信息

如果出现peer内容,则说明添加成功

添加成功后,保存当前状态至配置文件

Ping对方内网ip

在VPS-2(192.168.2.2)通过Ping命令测试连接VPS-1(192.168.2.1)

返回Ping数据,连接成功。

这时通过wg命令,可以查看节点的连接和传输状态。

至此,Wireguard就安装并配置完成了。之后这两台VPS的互相访问只需要通过内网IP就可以了。

配置内网UFW规则

虽然VPS-1和VPS-2已经组成内网,也能够互相Ping,但是还是无法访问被UFW限制的端口,接着还需要在UFW里设置对我们的内网网关放行

UFW命令

设置完成后,验证

输出,如果出现下方mark条目,说明设置成功

总结

在多台VPS的情景下,很多时候有跨VPS读写数据库或者文件的需求,但是为此专门去打开公网防火墙的各种端口总是觉得既不安全又划不来,有了wireguard,一切都变得简单了,只需打开一个端口,就可以让两台VPS互相无障碍访问,也不用时刻提心吊胆的怕开了各种敏感端口而被入侵。

参考

https://www.linode.com/docs/networking/vpn/set-up-wireguard-vpn-on-ubuntu/

https://www.wireguard.com/quickstart/

https://wiki.archlinux.org/index.php/WireGuard

8 comments

  • Hello, guest
  • 膜拜大神 请问大神的工作是什么??到这种程度要学习什么知识,看了你很多篇文章!!
  • Warning: `/etc/wireguard/wg0.conf' is world accessible [#] ip link add wg0 type wireguard RTNETLINK answers: Operation not supported Unable to access interface: Protocol not supported [#] ip link delete dev wg0 Cannot find device "wg0" debian8 遇到这样的错误,请问该如何解决。Linux f174-forward 4.16.0-041600-generic #201804012230 SMP Sun Apr 1 22:31:39 UTC 2018 x86_64 GNU/Linux
    • author
      有可能是内核不兼容,可以试试删除所有内核,重新安装默认内核,然后重新安装Wireguard
  • 你好,我是SSRPanel作者胖虎,如果方便的话,请到github上提一个issues留下你的tg号,想邀请你进群交流

Powered by WordPress. Designed by WooThemes