使用TunSafe+WireGuard以安全访问互联网 (转)

2018/10/04

说明

此教程将快速指导如何配置 WireGuard 的服务端和 TunSafe 的客户端。
此教程基于 Debian 9(服务端), Windows 10 系统(客户端)编写。
此教程无版权,请随意使用。

快速入门

客户端

下载安装

目前(2018-10-02) Windows 的客户端只有一个第三方的 TunSafe开源,好用。
下载地址为:https://tunsafe.com/download
下载后安装,并启动,即可看到主界面:
post_10_ui

生成密钥对(Key Pair)

在开始前,我们需要先创建至少2个密钥对(公钥和私钥)。
在TunSafe软件的界面中,点击 File 菜单,再点击 Generate Key Pair ,即可出现公钥私钥生成界面。
post_10_gkp
通过点击 Randomize 按钮,软件会生成一对密钥,其中Private Key为私钥,Public Key为公钥,为了方便配置服务端和客户端,我们需要生成至少两对密钥。
新开一个记事本,将生成的公钥和私钥保存下来,建议参考下列格式记录清楚,稍后配置时需要使用。
post_10_keys
注意:出于安全考虑,不要照搬本教程的公钥和私钥。密钥对必须对应,不能将第一次生成的公钥第二次生成的私钥组合起来使用。
以上就完成了密钥对的生成,下面开始配置客户端的配置文件。

创建(编辑)客户端配置文件

通过点击 TunSafe 主界面右侧的 Edit Config 按钮,可以打开编辑文件进行编辑。
文件中有很多注释内容,本例将简单进行概述:
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
32
33
34
35
[Interface]
# [Interface] 以下为本机(客户端)的配置情况。
PrivateKey = +ERZhs7mDpIXjcnabVl+WytG80xjKCUEWlFsQrKtaUc=
# 此行为客户端私钥(Private Key),请在生成的密钥对中选取客户端的公钥并粘贴进来。
ListenPort = 9876
# 此行为指定监听的端口,也作为发送(源)端口,可自行修改,不要求和服务器一致。
DNS = 8.8.8.8
# 此行为设定连接后客户端所使用的DNS服务器。
Address = 10.0.2.1/24
# 此行为设定客户端连接后所使用的IP地址,可以维持默认,也可以自行指定,但是需要和服务端配置在同一网段(如都在 10.0.2.0/24网段),不然会被丢弃。
# BlockInternet = route, firewall
# 此行为TunSafe的专有选项,意思为是否要屏蔽所有不安全的互联网流量,建议维持默认关闭(注释, # )的状态。
[Peer]
# [Peer] 以下为连接服务器的配置。
PublicKey = R8m0mgZWEH1b+synpBYyqSTOuEsw1gU46u457IzsohA=
# 此行为服务器的公钥,请在生成的密钥对中选取服务端的公钥并粘贴进来。
# PresharedKey = SNz4BYc61amtDhzxNCxgYgdV9rPU+WiC8woX47Xf/2Y=
# 此行为预共享密钥,对于一般安全要求,无需指定。
AllowedIPs = 0.0.0.0/0
# 此行为指定允许数据包发送的IP范围,如果要允许发送至所有IP的数据包,设置为 0.0.0.0/0 即可。
Endpoint = 123.45.67.89:9876
# 此行为指定你的服务端的IP和端口,如果已知服务器的IP和端口,可以先填写进去。
PersistentKeepalive = 25
# 此行为定期发送“保持活动”的数据包,维持默认的 25 (秒)即可。
以上为客户端配置文件的设置,修改完毕后保存退出即可。

服务端:

下载与安装

请先确保已经更新到最新系统(含内核),建议使用 apt-get updateapt-get dist-upgrade 进行更新。
在服务端上获取 WireGuard 有两种方式,第一种可以修改 apt-get 所使用的 source.list ,增加 unstable 源分支,具体操作详见: https://www.wireguard.com/install/
另一种,可以从 Debian 源仓库直接下载到最新的内核组件工具包,下载后使用 dpkg -i 命令安装即可。
备注: WireGuard 服务端需要依赖动态内核模块支持框架(Dynamic Kernel Module Support Framework ,DKMS),请确保已经安装。

系统环境配置

安装结束后,使用我们需要允许IP转发,通过执行 sysctl -a |grep net.ipv4.ip_forward 命令,检查 net.ipv4.ip_forward 参数是否为1,如果不为1,则需要修改 /etc/sysctl.conf 文件,找到 net.ipv4.ip_forward 修改为1,或者新增一行 net.ipv4.ip_forward = 1 ,保存退出后使用 sysctl -p 命令使设置立刻生效。

创建服务端配置文件

下面,我们可以开始创建服务端的配置文件了,使用编辑器新建一个位于 /etc/wireguard/ 目录下的配置文件,本例中为 /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
[Interface]
# [Interface] 以下为本机(服务器)参数指定。
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 此行为定义启动该配置文件后,所执行的命令,该iptables命令用于创建一条转发规则。注意:如果服务器的网卡不叫 eth0 ,请注意修改,详见末尾疑难解答。
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 此行为定义停止该配置文件后,所执行的命令,该iptables命令用于删除所创建的转发规则。注意:如果服务器的网卡不叫 eth0 ,请注意修改,详见末尾疑难解答。
ListenPort = 9876
# 此行为定义服务端所监听的端口。
PrivateKey = +LAP1sZG1T6ljf6SQ/f2XOOiUyFzn5UrY8gd/tyJK2I=
# 此行为服务器的私钥,请在生成的密钥对中选取服务端的私钥并粘贴进来。
[Peer]
# [Peer] 以下为接入客户端的设定。
PublicKey = /09mvABMFRs3fONigHcMlyK9rbnAj87ELDTA7tLmzDI=
# 此行为客户端的公钥,请在生成的密钥对中选取客户端的公钥并粘贴进来。
AllowedIPs = 10.0.2.0/24
# 此行为允许客户端所使用的IP地址范围,需要和客户端所设置的IP地址位于同一网段,如客户端的IP为 10.0.2.1/24 ,那么这里可以设置为 10.0.2.0/24 ;如果客户端为 172.16.0.1/24 ,那么这里则需要设置为 172.16.0.0/24 。
完成设置后保存并退出,回到命令行后执行:wg-quick up wg0 即可基于我们刚写好的配置文件(wg0.conf)启动服务端。
备注:如果需要每次开机自动启动服务端的 WireGuared ,可执行:systemctl enable [email protected] 命令,其中 wg0 为配置文件的文件名(不含扩展名)。

开始连接

回到客户端,点击 TunSafe 软件的 Connect 按钮,如果没有任何错误,且提示 Connected ,则说明连接成功。
post_10_connected

疑难解答

※连接不上,始终在重试。

请检查客户端的服务器IP、端口,服务器和客户端的密钥对配置是否正确,有必要请重新配置一次服务器和客户端的密钥对,另外也可能是由服务端的网络防火墙屏蔽,请检查 iptablesufw 等策略是否正确。
如果配置无误,有一定可能性是由于线路不稳定(UDP丢包)或者你所在运营商(含客户端、服务端)的网络屏蔽了UDP协议。

※连接上了,但是无法上网。

请确保客户端配置文件中指定的IP地址(AllowedIPs)在服务端配置文件中指定的IP地址(AllowedIPs)范围内,如客户端 [Interface] 下的 Address 设置的是 10.0.2.1/24 ,那么服务端 [Peer] 下的 AllowedIPs 则需要设置为 10.0.2.0/24
如果确认IP范围无误,请使用 sysctl -a |grep net.ipv4.ip_forward 命令检查 net.ipv4.ip_forward 是否为 1 ,如果不是,请检查是否正确编辑了 /etc/sysctl.conf 文件,或者 sysctl 是否已经生效。
如果 net.ipv4.ip_forward 确认为1,请使用 ifconfigip addr 命令检查设置了公网IPv4或IPv6的网卡是否叫 eth0 ,如果不是 eth0 ,请重新编辑服务器端的配置文件,将 PostUpPostDown 参数中的 eth0 部分修改为你的网卡名,某些网卡可能叫 enoXXensXXenpXsXX ,请以你的系统为准。
如果你的服务器同时部署了自定义的防火墙策略,请确保 PostUp 所添加的 iptables 策略位于 FORWARD 链的顶部。

参考链接

Related Posts

Latest