zoukankan      html  css  js  c++  java
  • wireguard

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

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

    参考教程:

    WireGuard 官方文档
    一个简单、安全、高速的下一代 VPN 协议 —— WireGuard 服务端手动教程
    WireGuard 配置文件讲解
    以下内容是我在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: * Pin: release a=unstable Pin-Priority: 150 ' > /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
    wireguard-installing.png

    注意:除了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
    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
    wg-quick-up.png

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

    方法一:使用配置文件,使用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
    iOS-WireGuard.png
    iOS-WireGuard.png

    Android
    Android-WireGuard.png
    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,同样方法再次操作即可。

  • 相关阅读:
    convert.c:7:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by
    80 多个 Linux 系统管理员必备的监控工具
    控件风格19种,必须倒背如流——其实就是控件所拥有的能力,即有条件使用VCL框架所提供的(功能)代码
    控件状态11种,必须倒背如流——记录控件当前的状态,防止误判(一般使用完以后就把状态改回去)
    FindChildControl与FindComponent
    保存网页为图片——滚动截取IE(WebBrowse)
    HDOJ 1755
    IP编辑控件(因为封装的是系统自带控件,所以也使用了CreateSubClass,不过为啥要封装CN_COMMAND和CN_NOTIFY不是很明白)
    QT之深入理解QThread
    Qt读取ANSI格式文件——利用QTextCodec将其他编码格式的QByteArray转换为Unicode格式,或者从文件中读出后直接做转换
  • 原文地址:https://www.cnblogs.com/whoic/p/12913470.html
Copyright © 2011-2022 走看看