• wireguard


    WireGuard 是由 Jason Donenfeld 等人用 C 语言编写的一个开源3层网络隧道工具,被视为下一代 VPN 协议,旨在解决许多困扰 IPSec/IKEv2、OpenVPN 或 L2TP 等其他 VPN 协议的问题。它与 Tinc 和 MeshBird 等现代 VPN 产品有一些相似之处,即加密技术先进、配置简单。从 2020 年 1 月开始,它已经并入了 Linux 内核的 5.6 版本,这意味着大多数 Linux 发行版的用户将拥有一个开箱即用的 WireGuard。
    WireGuard 优点:

    • 配置精简,可直接使用默认值
    • 只需最少的密钥管理工作,每个主机只需要 1 个公钥和 1 个私钥。
    • 就像普通的以太网接口一样,以 Linux 内核模块的形式运行,资源占用小。
    • 能够将部分流量或所有流量通过 VPN 传送到局域网内的任意主机。

    WireGuard 不能做的事:

    • 通过信令服务器突破双重 NAT。
    • 通过中央服务器自动分配和撤销密钥。
    • 发送原始的二层以太网帧。

    升级内核

    WireGuard 的安装条件非常苛刻,对内核版本要求极高,不仅如此,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致,Red Hat、CentOS、Fedora 等系统的内核,内核源码包,内核头文件包名分别为 kernel、kernel-devel、kernel-headers;Debian、Ubuntu 等系统的内核,内核源码包,内核头文件包名分别为 kernel、linux-headers。果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。

    目前 WireGuard 已经被合并到 Linux 5.6 内核中了,如果你的内核版本 >= 5.6,就可以用上原生的 WireGuard 了,只需要安装 wireguard-tools 即可,内核版本<5.6,可能需要首先更新内核,否则可能会报错:Unable to access interface: Protocol not supported,如下为更新内核版本示例(CentOS)

    了,只需要安装 wireguard-tools 即可,内核版本<5.6,可能需要首先更新内核,否则可能会报错:Unable to access interface: Protocol not supported,如下为更新内核版本示例

    1.CentOS

    yum install yum-utils epel-release
    yum-config-manager --setopt=centosplus.includepkgs=kernel-plus --enablerepo=centosplus --save
    sed -e 's/^DEFAULTKERNEL=kernel$/DEFAULTKERNEL=kernel-plus/' -i /etc/sysconfig/kernel
    yum install kernel-plus wireguard-tools
    reboot
    

    2.Ubuntu

    内核下载 选择你需要的内核 https://kernel.ubuntu.com/~kernel-ppa/mainline/


    点开网页滑到底,选择你的系统版本,我的是64位操作系统

    三个generic的deb,加一个_all的deb,下载到一个文件夹中。

    -rw-r--r-- 1 root root 11434148 Dec 13  2020 linux-headers-5.10.0-051000_5.10.0-051000.202012132330_all.deb
    -rw-r--r-- 1 root root  1234988 Dec 13  2020 linux-headers-5.10.0-051000-generic_5.10.0-051000.202012132330_amd64.deb
    -rw-r--r-- 1 root root 10970584 Dec 13  2020 linux-image-unsigned-5.10.0-051000-generic_5.10.0-051000.202012132330_amd64.deb
    -rw-r--r-- 1 root root 55087372 Dec 13  2020 linux-modules-5.10.0-051000-generic_5.10.0-051000.202012132330_amd64.deb
    

    下载好了之后安装deb文件

    dpkg -i *.deb
    reboot
    

    验证

    root@RainGod:~/kernel# uname -r
    5.10.0-051000-generic
    

    安装wireguard

    示例为:Ubuntu20.04

    服务端

    apt update
    apt install wireguard
    apt install resolvconf
    

    验证是否安装成功:

    root@RainGod:~/kernel# modprobe wireguard && lsmod | grep wireguard
    wireguard              86016  0
    curve25519_x86_64      36864  1 wireguard
    libchacha20poly1305    16384  1 wireguard
    libblake2s             16384  1 wireguard
    ip6_udp_tunnel         16384  1 wireguard
    udp_tunnel             24576  1 wireguard
    libcurve25519_generic    49152  2 curve25519_x86_64,wireguard
    

    生成证书

    cd /etc/wireguard/
    生成服务端和客户端的公钥私钥

    wg genkey | tee sprivatekey | wg pubkey > spublickey
    wg genkey | tee green-tao-rivatekey | wg pubkey > green-tao-publickey
    

    开启内核转发

    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    sysctl -p
    

    生成服务端配置文件

    echo "[Interface]
    PrivateKey = $(cat sprivatekey)
    Address = 10.0.0.1/24 
    #如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。ens33
    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 = 51820
    DNS = 8.8.8.8
    MTU = 1420
    #[Peer] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号
    [Peer]
    PublicKey = $(cat green-tao-publickey)
    AllowedIPs = 10.0.0.3/32"|sed '/^#/d;/^\s*$/d' > wg0.conf
    

    生成客户端配置文件

    echo "[Interface]
    PrivateKey = $(cat green-tao-privatekey)
    Address = 10.0.0.3/24
    DNS = 8.8.8.8
    MTU = 1420
    [Peer]
    PublicKey = $(cat spublickey)
    # 服务器地址和端口,下面的 X.X.X.X 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
    Endpoint = X.X.X.X:51820
    AllowedIPs = 0.0.0.0/0, ::0/0
    PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > green-tao.conf
    

    运行wireguard

    systemd管理

        wg show wg0                     #查看wg0虚拟网卡当前状态
        systemctl status wg-quick@wg0
        systemctl restart wg-quick@wg0
    
    

    命令控制

    #启动
    
    wg-quick up wg0
    
    #停止
    
    wg-quick down wg0
    
    #查看wireguard的状态
    
    wg
    

    添加用户

    生成密钥对

    wg genkey |tee green-iphone-privatekey|wg pubkey > green-iphone-publickey
    

    添加peer节点 ip不能重复

    root@RainGod:/etc/wireguard# wg set wg0 peer $(cat green-iphone-publickey) allowed-ips 10.0.0.5/32
    root@RainGod:/etc/wireguard# wg-quick save wg0
    [#] wg showconf wg0
    
    
    
    root@RainGod:/etc/wireguard# cat wg0.conf 
    [Interface]
    Address = 10.0.0.1/24
    MTU = 1420
    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 = 51820
    PrivateKey = YAPkAf88Dss5ev2i+so0qfd1nqrp7miyLhABZrO0k3g=
    
    
    [Peer]
    PublicKey = 3z1RHlorufY+USRME6HILL/es7OS0oX483hHYbC/tE8=
    AllowedIPs = 10.0.0.4/32
    Endpoint = 218.57.107.234:61017
    
    [Peer]
    PublicKey = gF18igCSuw2Ufx7DClEcv46B+wrYtYPCCZ4LEtSszGM=
    AllowedIPs = 10.0.0.5/32
    
    

    生成客户端配置文件

    #生成客户端配置文件1
    echo "[Interface]
    PrivateKey = $(cat green-iphone-privatekey)
    Address = 10.0.0.5/24
    DNS = 8.8.8.8
    MTU = 1420
    [Peer]
    PublicKey = $(cat spublickey)
    Endpoint = X.X.X.X:51820
    AllowedIPs = 0.0.0.0/0, ::0/0
    PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > green-iphone.conf
    

    windows 直接导入这个配置文件即可
    手机可以生成二维码扫描使用

    apt -y install qrencode
    qrencode -t ansiutf8 < green-iphone.conf
    
  • 相关阅读:
    String类
    Scanner类
    Object类
    接口
    static关键字
    final关键字
    抽象类
    权限修饰符
    方法重写 (Override)
    面向对象思想特征
  • 原文地址:https://www.cnblogs.com/yangtao416/p/16372660.html
Copyright © 2020-2023  润新知