MENU

WireGuard 搭建和使用折腾小记

November 10, 2018 • Read: 1305 • 方法•教程

本文若有失效或者错误内容请留言或者通过其他方式联系我,尽可能及时更新。

欢迎关注不怎么更新的 TG 频道


前言

最近WireGuard好像挺火,被许多人盛赞,本着折腾不息的精神,花了许久总算给弄出来了,本文是个人折腾记录。

由于 WireGuard 是 UDP 传输,部分地区运营商对 UDP 有干扰,可能导致断流等问题,暂不推荐作为日常 FQ 手段使用,但是在 TCP 被阻断的 VPS 上不失为一种解决办法。

参考教程:

以下内容是我在GCPDebain 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

安装成功后,显示如下:
wireguard-installing.png

注意:除了DebainUbuntu其他操作系统的安装命令可以在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

启动后,如果没有错误的话,显示应该与下图类似:
wg-quick-up.png

导出配置文件

我们需要导出客户端的配置供客户端使用,客户端可以自己手动填,但是密钥什么的输入比较麻烦,以下提供两种方法供使用:

  • 方法一:使用配置文件,使用cat /etc/wireguard/client.conf指令查看配置文件信息并复制,然后自己本地编辑一个.conf文件(名字可以自定义)将复制内容粘贴并保存,发送到手机上;或者使用 FTP 等方式把配置文件下载到本地;
  • 方法二:使用二维码

    apt install qrencode -y
    qrencode -t ansiutf8 < /etc/wireguard/client.conf

客户端使用方法

客户端界面都很简单,操作基本没什么难度。

下载地址

iOS

iOS-WireGuard.png

Android

Android-WireGuard.png

配置多用户

一个客户端文件只能同时有一个设备连接,所以如果需要同时使用的话,可以建立多个客户端文件。

再添加一个客户端的操作方法:

# 停止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 随便改改;

本文链接:https://10101.io/2018/11/10/wireguard
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,转载请注明出处。

Last Modified: October 30, 2019
Archives QR Code Tip
QR Code for this page
Tipping QR Code
Leave a Comment

Comment Lists
  1. lhj lhj

    发现新问题,在一段时间没有使用之后,再次连接,发现连接成功但是无法上网,日志一直显示:[NET] peer(HaFq…tPh4) - Handshake did not complete after 5 seconds, retrying (try 2)

    这时候输入wg,显示的wireGuard是在正常使用中的

    解决方案:需要进入到vps,重新关闭wireGuard,然后在启动我wireGuard才正常使用。
    请问您有遇到吗,有啥解决方案可以分享一下吗,感谢

  2. lhj lhj

    添加用户后生成的二维码,再另外的手机上无法上网,但是在我的手机上没有问题,请问下如何解决呢?
    都是iPhone手机,app的版本也是一的

  3. Anonymous Anonymous

    完美运行 速度真的很快 android客户端里面有个应用管理好用 可以选择哪些应用不代理

  4. Anonymous Anonymous

    配置完成wireguard后,IDM用不了,楼主有同样问题??

    1. @Anonymous没在用了,不好意思

    2. Anonymous Anonymous

      @WithdewHua请问现在你用的是什么呢?

  5. SenLief SenLief

    博主,我用全局代理有用,但是分应用代理就没用了,无法连接是什么情况的。

    1. @SenLief里面的分应用应该是把不需要代理的软件勾选吧,看下有没有选错。这个我都没在用了,有些问题我也解答不了,不好意思。

  6. Ken Ken

    搬瓦工安装后TunSafe扫码连接一次成功,后续再使用就无论如何都不成功了,也试过TestFlight的WireGuard客户端,一样。Windows客户端也是一样。显示连接成功,就是不能上网,求解答,谢谢!

    1. Anonymous Anonymous

      @Ken6月27日一样的问题,IOS wireguard一次成功但是后面再重开始也是不行

    2. Anonymous Anonymous

      @KenIOS的wireguard更新后不稳定,导致不可用,使用android版本可以正常,后面IOS使用tunsafe VPN全部正常,应该是客户端的匹配不良;

  7. Anonymous Anonymous

    ISO 版本客户端导入配置出现an error occureed when importing the tunnel configuration怎么解决

  8. 你猜 你猜

    tunsafe出现这个提示,是怎么回事?

    Error parsing [Interface]. PrivateKey = 2GmW+t98IazYUWIrU3TP4VDtL7qku+JOUaxhU6nn0nA=
    1. Anonymous Anonymous

      @你猜使用tunsafe的跟着tunsafe软件里面的配置范本填一下,这里导出来的client.conf不符合tunsafe的语法

  9. Anonymous Anonymous

    楼主忽略了要升级系统内核的步骤,我用的centos7

  10. Anonymous Anonymous

    chmod 0777是什么鬼,不是三位数吗?

  11. 丢丢丢手绢 丢丢丢手绢

    谢谢博主,我已经安装使用上了。

    1. 丢丢丢手绢 丢丢丢手绢

      @丢丢丢手绢搬瓦工,KVM,Debian 9 x64,和V2Ray同时运行。
      IOS下安装了TestFlight,但没有内测邀请码,所以安装了TunSafe VPN,但它只能全局代理。
      Android下安装了wireguard,可以分应用代理,默认所有程序都代理,不代理的程序打上勾。

    2. @丢丢丢手绢iOS上安装了testflight之后再点击公开内测邀请链接 https://testflight.apple.com/join/63I19SDT 就好了,iOS上暂时都没有分应用。

    3. Anonymous Anonymous

      @丢丢丢手绢你好,我在 Android 上安装了 wireguard,但是没有看到在哪里设置分应用,你是用的哪个客户端啊

    4. @Anonymous文中有指明如何分应用代理
      https://withdewhua.space/2018/11/10/wireguard/#android

  12. 马汀03 马汀03

    hi,亲,为什么我在debian9上装完服务端,没有步骤报错,启动也成功,在安卓客户端导入配置后,能连接,但就是不能上网呢??求解答,谢谢~

    1. @马汀03有防火墙规则么,是不是选用的端口未开放,要不试试443这样的端口

    2. 马汀03 马汀03

      @WithdewHua我用的linode,只在服务器端设置防火墙规则,测试了若干端口,443也试过了,还是不行,很奇怪,也用过centos,一直没成功翻过墙。

    3. @马汀03你可以尝试用下一键脚本吧,已经有大佬写了一键脚本了,例如 https://github.com/hongwenjun/vps_setup

    4. Anonymous Anonymous

      @马汀03我也是一样,用的一键脚本,yum也更新了,安卓能连就是上不了网。

    5. Anonymous Anonymous

      @马汀03我也是这样,能连上但不能上网

  13. Anonymous Anonymous

    之前在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”

    1. @AnonymousRTNETLINK answers: Operation not supported这个错误可能是你linux-headers没装好,你可以重新安装试试

  14. Anonymous Anonymous

    请问这个和SSR可以安装到同一个服务器 互不干扰吗..

    1. @Anonymous用不同的端口应该是可以的,你可以尝试下

    2. 老羊 老羊

      @Anonymous当然可以。

  15. 老羊 老羊

    请问下,openoVZ的vps能用吗?谢谢

    1. @老羊不行,对内核有要求,ovz的太低了

    2. 老羊 老羊

      @WithdewHuasad。
      谢谢。