前言
最近 WireGuard 好像挺火,被许多人盛赞,本着折腾不息的精神,花了许久总算给弄出来了,本文是个人折腾记录。
由于 WireGuard 是 UDP 传输,部分地区运营商对 UDP 有干扰,可能导致断流等问题,暂不推荐作为日常 FQ 手段使用,但是在 TCP 被阻断的 VPS 上不失为一种解决办法。
参考教程:
以下内容是我在 GCP 的Debain 9
以及Ubuntu 16.04 LTS
上搭建 WireGuard 的过程,其他系统应该也类似,可以自己多尝试下。
配置过程
安装 WireGuard
Debain 系统:
# 先安装linux-headers
apt update
apt install linux-headers-$(uname -r) -y
# 安装WireGuard
echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' > /etc/apt/preferences.d/limit-unstable
apt update
apt install wireguard-dkms wireguard-tools resolvconf -y
Ubuntu 系统:
add-apt-repository ppa:wireguard/wireguard apt-get update apt-get install wireguard-dkms wireguard-tools resolvconf -y
安装成功后,显示如下:
注意:除了Debain
、Ubuntu
其他操作系统的安装命令可以在 WireGuard Installstion 查看。
除了以上部分内容不同系统不一样,接下来的操作都是一样的。
# 开启ipv4流量转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
# 创建并进入WireGuard文件夹
mkdir -p /etc/wireguard && chmod 0777 /etc/wireguard
cd /etc/wireguard
umask 077
# 生成服务器和客户端密钥对
wg genkey | tee server_privatekey | wg pubkey > server_publickey
wg genkey | tee client_privatekey | wg pubkey > client_publickey
服务端配置文件
-
创建并进入了 WireGuard 后,开始配置服务端文件,输入
ifconfig
查看主网卡名称,可能结果如下:ifconfig.png 记住以上标记处名字,若不是eth0
,可以将其复制了待会需要用到。 -
生成服务器配置文件
/etc/wireguard/wg0.conf
:# 重要!如果名字不是eth0, 以下PostUp和PostDown处里面的eth0替换成自己服务器显示的名字 # ListenPort为端口号,可以自己设置想使用的数字 # 以下内容一次性粘贴执行,不要分行执行 echo " [Interface] PrivateKey = $(cat server_privatekey) Address = 10.0.0.1/24 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 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 = 50814 DNS = 8.8.8.8 MTU = 1420 [Peer] PublicKey = $(cat client_publickey) AllowedIPs = 10.0.0.2/32 " > wg0.conf
-
设置开机自启:
systemctl enable wg-quick@wg0
客户端配置文件
生成客户端配置文件/etc/wireguard/client.conf
:
# Endpoint是自己服务器ip和服务端配置文件中设置的端口号,自己在本地编辑好再粘贴到SSH里
# 以下内容一次性粘贴执行,不要分行执行
echo "
[Interface]
PrivateKey = $(cat client_privatekey)
Address = 10.0.0.2/24
DNS = 8.8.8.8
MTU = 1420
[Peer]
PublicKey = $(cat server_publickey)
Endpoint = 1.2.3.4:50814
AllowedIPs = 0.0.0.0/0, ::0/0
PersistentKeepalive = 25 " > client.conf
至此,基本上就已经搞定了,可以启动 WireGuard 了:
# 启动WireGuard
wg-quick up wg0
# 停止WireGuard
wg-quick down wg0
# 查看WireGuard运行状态
wg
启动后,如果没有错误的话,显示应该与下图类似:
导出配置文件
我们需要导出客户端的配置供客户端使用,客户端可以自己手动填,但是密钥什么的输入比较麻烦,以下提供两种方法供使用:
-
方法一:使用配置文件,使用
cat /etc/wireguard/client.conf
指令查看配置文件信息并复制,然后自己本地编辑一个.conf
文件(名字可以自定义)将复制内容粘贴并保存,发送到手机上;或者使用 FTP 等方式把配置文件下载到本地; -
方法二:使用二维码
apt install qrencode -y qrencode -t ansiutf8 < /etc/wireguard/client.conf
客户端使用方法
客户端界面都很简单,操作基本没什么难度。
下载地址
- iOS: WireGuard TestFlight | App Store
- Android: WireGuard Google Play
- Windows: Coming Soon
iOS
Android
配置多用户
一个客户端文件只能同时有一个设备连接,所以如果需要同时使用的话,可以建立多个客户端文件。
再添加一个客户端的操作方法:
# 停止WireGuard
wg-quick down wg0
# 生成新的客户端密钥对
wg genkey | tee client0_privatekey | wg pubkey > client0_publickey
# 在服务端配置文件中加入新的客户端公钥
# AllowedIPs重新定义一段
# 一次性复制粘贴,不要分行执行
echo "
[Peer]
PublicKey = $(cat client0_publickey)
AllowedIPs = 10.0.0.3/32" >> wg0.conf
# 新建一个客户端文件,使用新客户端密钥的私钥
# Address与上面的AllowedIPs保持一致
# Endpoint和之前的一样,为服务器ip和设置好的ListenPort
# 一次性复制粘贴,不要分行执行
echo "
[Interface]
PrivateKey = $(cat client0_privatekey)
Address = 10.0.0.3/24
DNS = 8.8.8.8
MTU = 1420
[Peer]
PublicKey = $(cat server_publickey)
Endpoint = 1.2.3.4:50814
AllowedIPs = 0.0.0.0/0, ::0/0
PersistentKeepalive = 25 " > client0.conf
# 已经成功创建后,启动WireGuard
wg-quick up wg0
# 导出客户端配置文件方式依旧可以采用上面介绍的两种方法,例如此客户端文件生成二维码就应该为
qrencode -t ansiutf8 < /etc/wireguard/client0.conf
如果还需要添加Peer
,同样方法再次操作即可。
注意
- 不支持 OVZ,建议使用 KVM 架构的 VPS,且推荐高版本系统;
更新日志
- 2018-11-16 随便改改;
44 条评论
连接后可以在client ping 到bing.com。但是浏览器里无法上网是什么原因
与vps服务器连接成功后无法上网是什么原因
与vps服务器连接成功后无法上网是什么原因
[TUN] [client] peer(O6xz…WAj8) - Handshake did not complete after 5 seconds, retrying (try 2)
一直显示这个而且连接成功∠( ᐛ 」∠)_
发现新问题,在一段时间没有使用之后,再次连接,发现连接成功但是无法上网,日志一直显示:[NET] peer(HaFq…tPh4) - Handshake did not complete after 5 seconds, retrying (try 2)
这时候输入wg,显示的wireGuard是在正常使用中的
解决方案:需要进入到vps,重新关闭wireGuard,然后在启动我wireGuard才正常使用。
请问您有遇到吗,有啥解决方案可以分享一下吗,感谢
我也有遇到同样的问题,连接成功,但是不能上网。不能上网的时候我输入wg 查看last handshake 显示上一次连接十几个小时之前了。请问你是在哪看的日志,还有之前的这个问题解决了么?求分享🧐
这个解决方案我好像没有用
添加用户后生成的二维码,再另外的手机上无法上网,但是在我的手机上没有问题,请问下如何解决呢?
都是iPhone手机,app的版本也是一的
完美运行 速度真的很快 android客户端里面有个应用管理好用 可以选择哪些应用不代理
配置完成wireguard后,IDM用不了,楼主有同样问题??
没在用了,不好意思
请问现在你用的是什么呢?
博主,我用全局代理有用,但是分应用代理就没用了,无法连接是什么情况的。
里面的分应用应该是把不需要代理的软件勾选吧,看下有没有选错。这个我都没在用了,有些问题我也解答不了,不好意思。
搬瓦工安装后TunSafe扫码连接一次成功,后续再使用就无论如何都不成功了,也试过TestFlight的WireGuard客户端,一样。Windows客户端也是一样。显示连接成功,就是不能上网,求解答,谢谢!
IOS的wireguard更新后不稳定,导致不可用,使用android版本可以正常,后面IOS使用tunsafe VPN全部正常,应该是客户端的匹配不良;
6月27日一样的问题,IOS wireguard一次成功但是后面再重开始也是不行
ISO 版本客户端导入配置出现an error occureed when importing the tunnel configuration怎么解决
tunsafe出现这个提示,是怎么回事?
Error parsing [Interface]. PrivateKey = 2GmW+t98IazYUWIrU3TP4VDtL7qku+JOUaxhU6nn0nA=
使用tunsafe的跟着tunsafe软件里面的配置范本填一下,这里导出来的client.conf不符合tunsafe的语法
楼主忽略了要升级系统内核的步骤,我用的centos7
chmod 0777是什么鬼,不是三位数吗?
谢谢博主,我已经安装使用上了。
你好,我在 Android 上安装了 wireguard,但是没有看到在哪里设置分应用,你是用的哪个客户端啊
文中有指明如何分应用代理
https://withdewhua.space/2018/11/10/wireguard/#android
搬瓦工,KVM,Debian 9 x64,和V2Ray同时运行。
IOS下安装了TestFlight,但没有内测邀请码,所以安装了TunSafe VPN,但它只能全局代理。
Android下安装了wireguard,可以分应用代理,默认所有程序都代理,不代理的程序打上勾。
iOS上安装了testflight之后再点击公开内测邀请链接 https://testflight.apple.com/join/63I19SDT 就好了,iOS上暂时都没有分应用。
hi,亲,为什么我在debian9上装完服务端,没有步骤报错,启动也成功,在安卓客户端导入配置后,能连接,但就是不能上网呢??求解答,谢谢~
我也是这样,能连上但不能上网
我也是一样,用的一键脚本,yum也更新了,安卓能连就是上不了网。
有防火墙规则么,是不是选用的端口未开放,要不试试443这样的端口
我用的linode,只在服务器端设置防火墙规则,测试了若干端口,443也试过了,还是不行,很奇怪,也用过centos,一直没成功翻过墙。
你可以尝试用下一键脚本吧,已经有大佬写了一键脚本了,例如 https://github.com/hongwenjun/vps_setup
之前在linux-header哪儿报错
但后面执行完之后 无法启动
root@instance-1:/etc/wireguard# wg-quick up wg0
[#] ip link add wg0 type wireguard
RTNETLINK answers: Operation not supported
Unable to access interface: Protocol not supported
[#] ip link delete dev wg0
Cannot find device “wg0”
RTNETLINK answers: Operation not supported
这个错误可能是你linux-headers
没装好,你可以重新安装试试请问这个和SSR可以安装到同一个服务器 互不干扰吗..
当然可以。
用不同的端口应该是可以的,你可以尝试下
请问下,openoVZ的vps能用吗?谢谢
不行,对内核有要求,ovz的太低了
sad。
谢谢。