WireGuard 简易上手

其实,你既然搜到这个文章,也说明你已经对WireGuard有所了解。
简简单单介绍一下,WireGuard 是一个简单部署+快速的VPN,它的目标是比 IPsec 更快、更简单、更精简和更有用,并比 OpenVPN 性能要高得多。 WireGuard 能适用于许多不同的环境。现在它是跨平台的(Windows、macOS、BSD、iOS、Android)VPN。

部署目标

既然是简易上手,当然部署一套内网是最容易说明的。
我们的目标是通过部署实现,让三台异地主机能在同一个内网中互相访问!

网络拓扑图

安装WireGuard

官方安装文档 WireGuard Install

1
2
3
4
5
6
7
8
9
10
11
# Ubuntu 安装方式
add-apt-repository ppa:wireguard/wireguard
apt-get update
apt-get install linux-headers-$(uname -r)
apt-get install wireguard

# Debian 安装方式
echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
apt-get update
apt-get install linux-headers-$(uname -r)
apt-get install wireguard

Windows 用户直接下载客户端安装;
macOS 用户可以登入非国区账号进行下载

配置Server端

Server 端建议在 Linux 部署,Windows 网络转发(内网通信)坑很大。

1. 启用IP转发(这样内网用户才能互相通信)

1
echo 1 > /proc/sys/net/ipv4/ip_forward

如果想永久保留配置,可以修改/etc/sysctl.conf文件

1
将 net.ipv4.ip_forward=0 改为 net.ipv4.ip_forward=1

2. 生成公私钥

1
wg genkey | tee privatekey | wg pubkey > publickey

操作之后,你的目录就会有两个文件。注意保护好私钥哦~

3. 配置文件

新建/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
[Interface]
# 服务器私钥
PrivateKey = server_private_key

# 绑定地址
Address = 100.64.0.1/24

# 是否保存配置, 可以在运行中通过命令行添加新客户端, 并保存到此配置
SaveConfig = true

# 自动脚本, 这里就要把 ens3 替换成之前记下的外网网卡名称 , wg0 是等下创建的虚拟网卡名称

# 配置防火墙规则 让客户端可以可以通过ens3网卡上网,如果不想client通过server上网可以注释掉
# %i 是 表示当前INTERFACE的配置名
# 一共可以设定 PreUp,PostUp,PreDown,PostDown 4个事件
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -A FORWARD -o %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 关闭动作, 操作同上
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -D FORWARD -o %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# 监听端口
ListenPort = 65535

# 客户端配置
[Peer]
# 客户端公钥
PublicKey = client1_public_key

# 允许客户端获取的地址
AllowedIPs = 100.64.0.2/32

4. 启动服务

1
wg-quick up wg0

运行之后,你就能看到 ListenPort 对应的UDP端口已经打开。
如果启动失败,出现RTNETLINK answers: Operation not supported 尝试重启主机或者升级系统。

配置客户端

按照服务端的方式生成客户端的共私钥

1
2
3
4
5
6
7
8
9
[Interface]
PrivateKey = client1_privete_key
Address = 100.64.0.2/32
DNS = 8.8.8.8
[Peer]
PublicKey = server_public_key
AllowedIPs = 100.64.0.0/24
Endpoint = server_ip:port
PersistentKeepalive = 25

Address 要和 服务端配置相同 /32 代表固定IP
DNS 会修改全局DNS配置。如果没有特殊要求可以不填。(8.8.8.8在国内还是慢的,详情见 为什么我的百度访问这么慢???
AllowedIPs 允许代理的网段,有几个配置可以自行使用

1
2
AllowedIPs = 100.64.0.0/24 # 仅内网访问
AllowedIPs = 0.0.0.0/24 # 全网访问 需要服务端开启网络转发

常用命令速查

启/停

1
2
wg-quick up wg0
wg-quick down wg0

自启动服务

1
systemctl enable wg-quick@wg0

增/删用户

直接在conf增加一个[peer]就可以,或者使用

1
2
3
4
wg set wg0 peer client_public_key allowed-ips 100.64.0.2/32
wg-quick save wg0
wg set wg0 peer client_public_key remove
wg-quick save wg0

参考

WireGuard配置

Debian10 Wireguard VPN

作者

Kur4ge

发布于

2022-02-11

更新于

2022-02-10

许可协议

评论