WireGuard搭建和使用折腾小记

WireGuard搭建和使用折腾小记

//cdn.jsdelivr.net/gh/WithdewHua/static@withdewhua-hugo/img/post/wireguard.png” data-loaded=”true” class=”” style=”max-width: 100%; margin: 0.5em auto; display: block; height: auto;”>

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


前言

最近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=unstablenPin-Priority: 150n' > /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://withdewhua.space/2018/11/10/wireguard/
本作品由 采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,转载请注明出处。