WireGuard 服务端安装教程

WireGuard简单介绍
注意:WireGuard是通过UDP协议传输数据的!同时锐速、BBR这类TCP加速工具也不会对其起到加速作用。如果你当地运营商对海外UDP链接进行QOS限速,那么速度可能不如使用TCP链接的代理软件理想。

更少的代码
相比于 OpenVPN 、 IPSec 的几十万行代码,WireGuard 只有短短的四千行。

更容易部署
对于初次接触的人来说,相比于其他VPN协议,WireGuard更容易部署。

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

官方网站:https://www.wireguard.com/

因为其链接特性,所以WireGuard有很好的稳定性,无论你怎么切换网络或者网络波动导致断开后,往往可以很快恢复链接,所以如果拿来加速游戏的话,可能效果不错(当然前提是你的代理服务器也要网络不错)。

前提要求
系统要求:Debian8/9、Ubuntu14.04/16.04/18.04/18.10
服务器要求:OpenVZ虚拟化的服务器不支持安装该VPN,其他虚拟化均可。
如果担心出错,那么我推荐Debian9、Ubuntu16.04/18.04/18.10系统,这些较新的系统更不容易出错,相对来说Ubuntu系统安装更方便!

注意:如果你用的是 Vultr、DO,且你本地没有IPv6地址,那就不要勾选Enable IPv6 ,否则可能客户端链接时可能会出错。

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

Debian一键安装步骤

wget --no-check-certificate -qO- 'https://moeclub.org/attachment/LinuxShell/wireguard.sh'| bash

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

# 更新软件包源
apt update
# 安装和 linux-image 内核版本相对于的 linux-headers 内核
apt install linux-headers-$(uname -r) -y

安装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=unstable\nPin-Priority: 150' > /etc/apt/preferences.d/limit-unstable

# 更新一下软件包源
apt update

# 开始安装 WireGuard ,resolvconf 是用来指定DNS的,旧一些的系统可能没装。
apt install wireguard resolvconf -y

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

lsmod | grep wireguard
# 执行该代码后,提示大概如下示例内容(仅供参考),第一行是必须要有的,至于下面的两行不同系统似乎还不一样,但是不影响使用。

root@doubi:~# 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 就是主网卡名了。
# 写着你的服务器外网IP的(下面 X.X.X.X 处),就是你的主网卡,NAT的服务器则是显示内网IP。
# 如果你拿不准哪个网卡是主网卡,请留言询问。

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)
# 本机的内网IP地址,一般默认即可,除非和你服务器或客户端设备本地网段冲突
Address = 10.0.0.1/24
# 运行 WireGuard 时要执行的 iptables 防火墙规则,用于打开NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
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转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
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] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号,具体我稍后会写多用户教程。
[Peer]
# 该客户端账号的公匙,对应客户端配置中的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat cpublickey)
# 该客户端账号的内网IP地址
AllowedIPs = 10.0.0.2/32"|sed '/^#/d;/^\s*$/d' > wg0.conf

# 上面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!

生成客户端配置文件
接下来就开始生成客户端配置文件,井号开头的是注释说明,用该命令执行后会自动过滤注释文字。请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!

echo "[Interface]
# 服务器的私匙,对应客户端配置中的公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat sprivatekey)
# 本机的内网IP地址,一般默认即可,除非和你服务器或客户端设备本地网段冲突
Address = 10.0.0.1/24
# 运行 WireGuard 时要执行的 iptables 防火墙规则,用于打开NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
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转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
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] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号,具体我稍后会写多用户教程。
[Peer]
# 该客户端账号的公匙,对应客户端配置中的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat cpublickey)
# 该客户端账号的内网IP地址
AllowedIPs = 10.0.0.2/32"|sed '/^#/d;/^\s*$/d' > wg0.conf

接下来你就可以将这个客户端配置文件 [/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,且输入内容差不多,那么说明启动成功了!

开机启动

# 设置开机启动
systemctl enable wg-quick@wg0
# 取消开机启动
systemctl disable wg-quick@wg0


【上一篇】 【下一篇】

Posted in 教程 ,网络 ,软件 | Tags:

0 条评论

添加评论

[ Ctrl + Enter ]