WireGuard是一个非常简单、快速和现代的 VPN,在第3层运行,作为Linux的内核虚拟网络接口实现。

它设计精巧,核心代码仅四千多行,被Linux之父Linus Torvalds称为“艺术品”。要知道林纳斯大神平时都是喷人的,而能得到他的赞美,可见wireguard有多么优秀了。

本文不再过多介绍Wiregaurd的优点和原理,主要讨论其使用方法。

案例:两台服务器之间通过WireGuard组建内网

总体流程如下:

  • step1: 安装wireguard
  • step2: 生成秘钥对
  • step3: 配置文件生成(服务端与客户端)
  • step4: 启动(服务端与客户端)
  • step5:测试

    步骤一: 安装wireguard

    官方安装教程:https://www.wireguard.com/install
    使用命令安装:

    apt install wireguard

    步骤二: 生成秘钥对

    ① 开启ipv4流量转发:

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

    ② 创建并进入WireGuard文件夹:

    mkdir -p /etc/wireguard && chmod 0777 /etc/wireguard  #创建WireGuard文件夹并赋予文件夹777权限
    cd /etc/wireguard  #转到Wireguard文件夹
    umask 077  #修改新建文件的默认权限

    ③ 生成两个密钥对:

    wg genkey | tee 1privatekey | wg pubkey > 1publickey  #密钥对1
    wg genkey | tee 2privatekey | wg pubkey > 2publickey  #密钥对2

    ④额外生成预共享密钥来进一步增强安全性(可选)

    wg genpsk > psk

    对于两台服务器,这个值都是相同的,所以只需要运行一次命令就可以了。

    步骤三:配置文件生成

    服务器1的配置文件:

    /etc/wireguard下新建文件,名为wg0.conf填入一下内容

    [Interface]
    Address = 10.0.10.1   #本机wireguard虚拟局域网IP
    ListenPort = 51820 #wiregauard端口
    PrivateKey =  #此处为client1的私钥
    DNS = 1.1.1.1,119.29.29.29
    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
     #接受来源为eth0的转发;接受出口为eth0的转发;增加对出口为本机网卡的NAT映射注意eth0需要为本机网卡名称
    MTU = 1420
    
    [Peer]
    PublicKey = #此处为client2的公钥
    AllowedIPs = 10.0.10.2/32  #服务器2所使用的wireguard虚拟局域网IP
    

    PostUp:启动 Wireguard 接口之后运行的命令。这个选项可以指定多次,按顺序执行。
    PostDown:关闭 Wireguard 接口之前运行的命令。这个选项可以指定多次,按顺序执行。

    服务器2的配置文件:

    /etc/wireguard下新建文件,名为wg0.conf填入一下内容

    [Interface]
    Address = 10.0.10.2   #本机wireguard虚拟局域网IP
    PrivateKey =  #此处为client2的私钥
    DNS = 1.1.1.1,119.29.29.29
    MTU = 1500
    
    [Peer]
    PublicKey =  #此处为client1的公钥
    AllowedIPs = 10.0.8.0/24 #此处为允许的服务器IP
    PresharedKey = #此处为预共享密钥
    Endpoint = 1.2.3.4:51820 #服务器1IP+端口
    

    更多详细配置可参考这篇博客:https://icloudnative.io/posts/wireguard-docs-practice

    步骤四: 启动

    启动或停止wireguard服务端的命令如下:

    # 启动WireGuard
    wg-quick up wg0
    # 停止WireGuard
    wg-quick down wg0
    

    设置开机启动:

    systemctl enable wg-quick@wg0
    

    步骤五: 测试

    多台机器互ping即可:

    ping 10.0.10.1