一个简单、安全、高速的下一代VPN协议 —— WireGuard 服务端手动教程

by Toyo

逗比根据地 / 2018-11-09 21:33

本文最后更新于 2018年11月9日 20:29 可能会因为没有更新而失效。如已失效或需要修正,请留言!

从几个月前就有人跟我说过 WireGuard 这个下一代VPN协议,不过当时网上也没什么中文教程,官方又全是英文,零零散散的看不懂就给无视了。

最近一段时间,貌似 WireGuard 开始流行了,好多人都推荐给我,让我写教程。我搜索了下,找到了几个中文教程,虽然也是零零散散的,不过要重点感谢一下这个脚本,让我清楚了完整配置过程。

昨天下午和今天上午简单研究了下,差不多可以写教程啦~


客户端教程:WireGuard —— Windows/Android 客户端简单使用教程

WireGuard简单介绍

WireGuard 是一种非常简单、安全、高速的VPN,利用最先进的加密技术。它旨在比 IPSec 更快,更简单,更精简,更有用。它打算比 OpenVPN 更高效。WireGuard 最初是为Linux内核发布的,现在已经支持跨平台部署。它目前正在大力发展,但它已经被认为是业内最安全,最易于使用,最简单的VPN解决方案。

再多的我也编不出来了,大家凑活着看吧。

因为其链接特性,所以与很好的稳定性,网络波动导致断开后,往往可以很快恢复,所以如果拿来加速游戏的话,可能效果不错(当然你的代理服务器也要网络不错)。

另外:WireGuard 是使用 UDP 协议传输数据的(TCP握手,所以不能用来复活被墙IP),这意味着如果你当地运营商对海外 UDP 链接仅限 QOS 限速,那么速度可能不如使用 TCP链接的代理软件理想。

至于该 VPN 是否容易被GFW针对封锁,目前还不得而知,至少目前 WireGuard 连 1.0 正式版都不算。


前提要求

  • 系统要求:Debian 8 / 9、Ubuntu 14.04 / 16.04 / 18.04 / 18.10
  • 服务器要求:OpenVZ 虚拟化的服务器不支持安装该VPN,其他虚拟化均可。

如果担心出错,那么我推荐 Debian9、Ubuntu16.04 / 18.04 / 18.10 系统,这些较新的系统更不容易出错,相对来说 Ubuntu 系统安装更方便!

另外,请确保你的系统是纯净的,建议重装系统后直接开始本教程!


Debian安装步骤

点击展开 查看更多

安装内核

首先,Debian 无论是哪个系统,默认往往都没有 linux-headers 内核,而安装使用 WireGuard 必须要这货,所以我们需要先安装:

# 更新软件包源  apt update  # 安装和 linux-image 内核版本相对于的 linux-headers 内核  apt install linux-headers-$(uname -r) -y  
# 以下为示例内容(仅供参考)    # Debian8 安装前内核列表(空)  [email protected]:~# dpkg -l|grep linux-headers    # Debian8 安装后内核列表(注意这里的版本号 可能不一样)  [email protected]:~# dpkg -l|grep linux-headers  ii  linux-headers-3.16.0-6-amd64   3.16.57-2                          amd64        Header files for Linux 3.16.0-6-amd64  ii  linux-headers-3.16.0-6-common  3.16.57-2         # Debian9 安装前内核列表(空)    [email protected]:~# dpkg -l|grep linux-headers    # Debian9 安装后内核列表(注意这里的版本号 可能不一样)  [email protected]:~# dpkg -l|grep linux-headers  ii  linux-headers-4.9.0-7-amd64   4.9.110-3+deb9u2               amd64        Header files for Linux 4.9.0-7-amd64  ii  linux-headers-4.9.0-7-common  4.9.110-3+deb9u2               all          Common header files for Linux 4.9.0-7  

安装WireGuard

然后我们就可以开始安装 WireGuard 了。

# 添加 unstable 软件包源,以确保安装版本是最新的  echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list  echo -e 'Package: *nPin: release a=unstablenPin-Priority: 150' > /etc/apt/preferences.d/limit-unstable  # 更新一下软件包源  apt update  # 开始安装 WireGuard ,至于 resolvconf 我也不清楚这货具体是干嘛的,但是没有安装这个的系统会报错,但是具体会影响哪里使用我也不清楚,为了保险点不出错还是安装吧。一般 Debian9 都自带了。  apt install wireguard resolvconf -y  


Ubuntu安装步骤

点击展开 查看更多

配置PPA

首先如果你是 Ubuntu 14.04 系统,那么请先安装 PPA:

# 以下步骤仅限 Ubuntu 14.04 系统执行  apt update  apt install software-properties-common -y  

安装完成后,我们还需要通过 PPA 工具添加 WireGuard 源:

add-apt-repository ppa:wireguard/wireguard  # 执行后提示如下示例内容(仅供参考):    [email protected]:~# add-apt-repository ppa:wireguard/wireguard   WireGuard is a novel VPN that runs inside the Linux Kernel. This is the Ubuntu packaging for WireGuard. More info may be found at its website, listed below.    More info: https://www.wireguard.com/  Packages: wireguard wireguard-tools wireguard-dkms    Install with: $ apt install wireguard    For help, please contact    More info: https://launchpad.net/~wireguard/+archive/ubuntu/wireguard  Press [ENTER] to continue or ctrl-c to cancel adding it    # 这里会提示你是否继续,点击 回车键 继续,点击 Ctrl+C 键退出。  # 然后输出大概如下内容。    gpg: keyring `/tmp/tmp8bgitjjx/secring.gpg' created  gpg: keyring `/tmp/tmp8bgitjjx/pubring.gpg' created  gpg: requesting key 504A1A25 from hkp server keyserver.ubuntu.com  gpg: /tmp/tmp8bgitjjx/trustdb.gpg: trustdb created  gpg: key 504A1A25: public key "Launchpad PPA for wireguard-ppa" imported  gpg: Total number processed: 1  gpg:               imported: 1  (RSA: 1)  OK  

安装WireGuard

然后我们就可以开始安装 WireGuard 了。

# 更新一下软件包源  apt update  # 开始安装 WireGuard ,至于 resolvconf 我也不清楚这货具体是干嘛的,但是没有安装这个的系统会报错,但是具体会影响哪里使用我也不清楚,为了保险点不出错还是安装吧。一般 Ubuntu18.04 以上系统都自带了。  apt install wireguard resolvconf -y  


验证是否安装成功

点击展开 查看更多

当你通过上面的步骤安装完后,请用下面的代码验证一下是否安装成功。

modprobe wireguard && lsmod | grep wireguard  # 执行该代码后,提示大概如下示例内容(仅供参考),第一行是必须要有的,至于下面的两行不同系统似乎还不一样,但是不影响使用。    [email protected]:~# modprobe wireguard && lsmod | grep wireguard  wireguard             212992  0  ip6_udp_tunnel         16384  1 wireguard  udp_tunnel             16384  1 wireguard  

配置步骤

点击展开 查看更多

生成密匙对

当你确定安装成功后,就要开始配置服务端和客户端的配置文件了。放心,这很简单。

# 首先进入配置文件目录,如果该目录不存在请先手动创建:mkdir /etc/wireguard  cd /etc/wireguard    # 然后开始生成 密匙对(公匙+私匙)。  wg genkey | tee sprivatekey | wg pubkey > spublickey  wg genkey | tee cprivatekey | wg pubkey > cpublickey

查看主网卡名称

先查看一下你的主网卡名是什么:

ip addr  # 执行命令后,示例如下(仅供参考),lo 是本地环回 忽略,eth0 就是主网卡名了。  # 如果你拿不准那个网卡是主网卡,请留言询问。    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00      inet 127.0.0.1/8 scope host lo         valid_lft forever preferred_lft forever      inet6 ::1/128 scope host          valid_lft forever preferred_lft forever  2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000      link/ether 00:16:3c:cf:89:73 brd ff:ff:ff:ff:ff:ff      inet X.X.X.X/25 brd 255.255.255.255 scope global eth0         valid_lft forever preferred_lft forever  

生成服务端配置文件

接下来就开始生成服务端配置文件:

# 井号开头的是注释说明,加不加都不影响程序读取配置文件。  # 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!    echo "[Interface]  # 私匙,自动读取上面刚刚生成的密匙内容  PrivateKey = $(cat sprivatekey)  # VPN中本机的内网IP,一般默认即可,除非和你服务器或客户端设备本地网段冲突  Address = 10.0.0.1/24   # 运行 WireGuard 时要执行的 iptables 防火墙规则,用于打开NAT转发之类的。  PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  # 停止 WireGuard 时要执行的 iptables 防火墙规则,用于关闭NAT转发之类的。  PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE  # 服务端监听端口,可以自行修改  ListenPort = 443  # 服务端请求域名解析 DNS  DNS = 8.8.8.8  # 保持默认  MTU = 1420  [Peer]  # 公匙,自动读取上面刚刚生成的密匙内容  PublicKey = $(cat cpublickey)  # VPN内网IP范围,一般默认即可,除非和你服务器或客户端设备本地网段冲突  AllowedIPs = 10.0.0.2/32" > wg0.conf    # 上面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!  

生成客户端配置文件

接下来就开始生成客户端配置文件:

# 井号开头的是注释说明,加不加都不影响程序读取配置文件。  # 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!    echo "[Interface]  # 私匙,自动读取上面刚刚生成的密匙内容  PrivateKey = $(cat cprivatekey)  # VPN内网IP范围  Address = 10.0.0.2/24  # 拦截并强制所有DNS走VPN  BlockDNS = true  # 解析域名用的DNS  DNS = 8.8.8.8  # 保持默认  MTU = 1420  [Peer]  # 公匙,自动读取上面刚刚生成的密匙内容  PublicKey = $(cat spublickey)  # 服务器地址和端口,下面的 X.X.X.X 记得更换为你的服务器公网IP,端口根据服务端配置时的监听端口填写  Endpoint = X.X.X.X:443  # 转发流量的IP范围,下面这个代表所有流量都走VPN  AllowedIPs = 0.0.0.0/0, ::0/0  # 保持连接(具体我也不清楚)  PersistentKeepalive = 25" > client.conf    # 上面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!  

接下来你就可以将这个客户端配置文件 [/etc/wireguard/client.conf] 通过SFTP、HTTP等方式下载到本地了。

不过我更推荐,SSH中打开显示配置文件内容并复制出来后,本地设备新建一个文本文件 [xxx.conf] (名称随意,后缀名需要是 .conf) 并写入其中,提供给 WireGuard 客户端读取使用。

cat /etc/wireguard/client.conf  

其他剩余其他操作:

# 赋予配置文件夹权限  chmod 777 -R /etc/wireguard    # 打开防火墙转发功能  echo 1 > /proc/sys/net/ipv4/ip_forward  echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf  sysctl -p

启动WireGuard

点击展开 查看更多

wg-quick up wg0  # 执行命令后,输出示例如下(仅供参考)    [#] ip link add wg0 type wireguard  [#] wg setconf wg0 /dev/fd/63  [#] ip address add 10.0.0.1/24 dev wg0  [#] ip link set mtu 1420 dev wg0  [#] ip link set wg0 up  [#] resolvconf -a tun.wg0 -m 0 -x  [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE    # 如果此处没有报错:RTNETLINK answers: Operation not supported,且输入内容差不多,那么说明启动成功了!  

停止WireGuard

wg-quick down wg0  

查询WireGuard状态

wg  

开机启动

注意:Ubuntu 14.04 系统默认是没有 systemctl 的,所以无法配置开机启动。

# 设置开机启动  systemctl enable [email protected]  # 取消开机启动  systemctl disable [email protected]  


其他说明

我也是昨天(11/09)才开始研究 WireGuard ,所以很多地方我也不懂,如果有哪里写错了请记得提醒我,有什么需要补充的也请告诉我,谢谢~


参考脚本:https://github.com/yobabyshark/wireguard

参考教程:https://www.wireguard.com/install/

转载请超链接注明:逗比根据地 » 一个简单、安全、高速的下一代VPN协议 —— WireGuard 服务端手动教程
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!

Shared via Inoreader