Centos7下Wireguard的安装和配置

wireguard 简介

安装wg之前,一定要理解wg的原理,wg是通过UDP协议在各个主机之间建立对等连接,所以理论上其实是没有服务器和客户端之说的,有时候我们很容易把中续器理解为服务器,把其中一个主机理解为客户端,这为给我们的配置带来误解。这也是为什么在wg的配置文件里面没有client而只有peer的原因。

在 WireGuard 里,客户端和服务端基本是平等的,差别只是谁主动连接谁而已。双方都会监听一个 UDP 端口,谁主动连接,谁就是客户端。

主动连接的客户端需要指定对端的公网地址和端口,被动连接的服务端不需要指定其他对等节点的地址和端口。如果客户端和服务端都位于 NAT 后面,需要加一个中继服务器,客户端和服务端都指定中继服务器作为对等节点,它们的通信流量会先进入中继服务器,然后再转发到对端。

安装

直接通过一键安装脚本进行安装,不过要注意的是wg使用的是UDP协议,如果你用的是阿里云的服务器,一定要在安全组上开放UDP协议的连接端口。

1
2
3
4
5
wget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.com/teddysun/across/master/wireguard.sh
chmod 755 /opt/wireguard.sh
cd /opt
export VPN_SERVER_WG_PORT=11660 #指定wg的监听端口,如果不指定将会生成一个随机端口
sh wireguard.sh -r

出现如下提示,说明安装成功

1
2
3
4
5
6
7
8
9
10
11
[Mon Oct  4 10:59:35 CST 2021] WireGuard VPN Server installation completed
[Mon Oct 4 10:59:35 CST 2021]
[Mon Oct 4 10:59:35 CST 2021] WireGuard VPN default client file is below:
[Mon Oct 4 10:59:35 CST 2021] /etc/wireguard/wg0_client
[Mon Oct 4 10:59:35 CST 2021]
[Mon Oct 4 10:59:35 CST 2021] WireGuard VPN default client QR Code is below:
[Mon Oct 4 10:59:35 CST 2021] /etc/wireguard/wg0_client.png
[Mon Oct 4 10:59:35 CST 2021]
[Mon Oct 4 10:59:35 CST 2021] Download and scan this QR Code with your device
[Mon Oct 4 10:59:35 CST 2021] Welcome to visit: https://teddysun.com/554.html
[Mon Oct 4 10:59:35 CST 2021] Enjoy it

脚本命令列表如下:

1
2
3
4
5
6
7
8
9
10
11
Usage  : wireguard.sh [Options]
Options:
-h, --help Print this help text and exit
-r, --repo Install WireGuard from repository
-s, --source Install WireGuard from source
-u, --update Upgrade WireGuard from source
-v, --version Print WireGuard version if installed
-a, --add Add a WireGuard client
-d, --del Delete a WireGuard client
-l, --list List all WireGuard client's IP
-n, --uninstall Uninstall WireGuard

安装后查看wg的状态

1
2
3
4
5
6
7
8
9
10
$ wg show
interface: wg0
public key: NuqTrBKdgO79f5oeGRrttKBpEy24eB*****
private key: (hidden)
listening port: 11660

peer: a0ruXecXSnY09Q8HCoJb9Xg55OK31uFCQ********
preshared key: (hidden)
allowed ips: 10.88.88.2/32
persistent keepalive: every 25 seconds

wg安装好了,这时候脚本自定给我们加个了peer,事实上这个peer是没有什么用的。但是这里wg0的public key要记住,因为别的主机要与这台主机连接时,需要这个key。

一些命令

1
2
3
4
5
6
7
8
9
systemctl enable wg-quick@wg0.service   # 开机自动启动wg
systemctl status wg-quick@wg0.service # wg 状态
systemctl start wg-quick@wg0.service # 启动wg
systemctl stop wg-quick@wg0.service # 关闭wg
systemctl restart wg-quick@wg0.service # 重启wg

# 还有一个快捷命令
wg-quick up wg0 # 启动
wg-quick down wg0 # 停止

配置文件

wg 配置文件为 /etc/wireguard/wg0.conf,示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# vim /etc/wireguard/wg0.conf

########### 服务端配置 ###########
[Interface]
PrivateKey = xxxxxxxxx # 服务器端私钥
Address = 10.0.0.1 # 为服务端的内网 IP,可以自行选择例如192.168.0.110.0.0.1,但是需注意请勿和服务器所在内网网段冲突,例如内网网段为 192.168.1.X,则不能使用 192.168.1.X 该网段。
ListenPort = 45678 # 为服务端口,需在防火墙开放此端口的UDP访问,或进行路由器端口映射。
DNS = 114.114.114.114 # 服务器自行选择。
MTU = 1420

# PostDown 为停止命令的 iptabls 配置,注意需要修改 ens192 为你的服务器网卡名
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE
# PostUp 为启动命令的 iptabls 配置,注意需要修改 ens192 为你的服务器网卡名。
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens192 -j MASQUERADE


########### 以下为各个客户端信息 ###########
# macOS
[Peer]
PublicKey = xxxxxxxxxxx # 客户端公钥
AllowedIPs = 10.0.0.2/32 # 该客户端指定 IP,注意不要和其他客户端冲突
PresharedKey = xxxxxxxxx # 预共享密钥,可选设置
Endpoint = 149.28.21.191 # 为服务端的 IP 和端口,也可以使用域名加端口,客户端需要配置这个选项,服务器端不需要配置
PersistentKeepalive = 25

# iPhone
[Peer]
PublicKey = xxxxxxxxxxx
AllowedIPs = 10.0.0.3/32
PresharedKey = xxxxxxxxx
PersistentKeepalive = 25

安装和使用问题

wireguard 搭建好 1-2 天后就连上没接收数据了

现象:

刚搭建好的时候, 一切正常工作。但是大概 1-2 天以后,可以连接上, 但是收不到数据了。

接收 0 B, 发送 1.59 KiB

服务端停掉 wg 服务, 然后更换端口,再启动马上又有接收数据。过一两天又挂了

解析:

端口被 gfw 拉黑了

  1. 推荐使用 udp2raw

  2. Handshake 特征明显,要是把 Handshake 套层 Socks5 好像就行。。
    https://www.reddit.com/r/WireGuard/comments/sob2xg/how_to_bypass_egypts_wireguard_ban/

Reference


Centos7下Wireguard的安装和配置
https://flepeng.github.io/工具-Centos7下Wireguard的安装和配置/
作者
Lepeng
发布于
2021年3月12日
许可协议