WierGuard 教程搭建

如果觉得下面内容太复杂。可以看简陋版搭建:

https://www.sooele.com/index.php/2017/12/06/wierguard-%E6%90%AD%E5%BB%BA%EF%BC%88ubuntu%EF%BC%89/

更新内核

Wireguard需要使用Ubuntu的内核而不是Linode内核。在创建您的Linode之后执行以下步骤:

  1. 在Linode管理器中,打开您的Linode的配置文件并找到Boot Settings部分。选择GRUB 2作为你的内核。配置文件
  2. 引导您的Linode,然后使用SSH连接到它,并完成入门指南中的标准设置过程。
  3. 更新您的系统:
    sudo apt update && sudo apt upgrade
    
  4. 更新内核:
    sudo apt install linux-image-virtual grub2
    
  5. 从Linode管理器重新启动系统。
  6. 安装内核头文件:
    sudo apt install linux-headers-$(uname -r)
    

安装WireGuard

  1. 安装software-properties-common
    sudo apt install software-properties-common
    
  2. 将Wireguard存储库添加到您的资源列表中:
    sudo add-apt-repository ppa:wireguard/wireguard
    
  3. 安装Wireguard及其依赖项:
    sudo apt update
    sudo apt install wireguard-dkms wireguard-tools
    

    如果上一节中的步骤已成功完成,那么在安装之后,您将看到以下控制台输出:

    wireguard:
    Running module version sanity check.
    - Original module
    - No original module exists within this kernel
    - Installation
    - Installing to /lib/modules/4.4.0-98-generic/updates/dkms/
    
    depmod....
    
    DKMS: install completed.
    Setting up wireguard-tools (0.0.20171111-wg1~xenial) ...
    Processing triggers for libc-bin (2.23-0ubuntu9) ...
    

    注意

    如果安装完成但没有显示这个输出,你的内核很可能配置不正确(仔细检查,输出不lsmod | grep wireguard应该是空白的)。请参阅上一节进行故障排除。

配置WireGuard服务器

  1. 为WireGuard服务器生成私钥和公钥对:
    umask 077
    wg genkey | tee privatekey | wg pubkey > publickey
    

    这将保存私钥和公钥到您的主目录; 它们可以与被视为cat privatekeycat publickey分别。

  2. /etc/wireguard/wg0.conf在文本编辑器中打开并添加以下内容,替换<Private Key>为生成的私钥:
    /etc/wireguard/wg0.conf
    [Interface]
    PrivateKey = <Private Key>
    Address = 192.168.2.1/24, fd86:ea04:1115::1/64
    ListenPort = 51820
    PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    SaveConfig = true

    地址定义了WireGuard服务器的私有IPv4和IPv6地址。VPN网络中的每个对等点应具有该字段的唯一值。本指南将使用IPv4的192.168.2.0/24地址块和IPv6的fd86:ea04:1115 :: 0/64块。

    ListenPort指定WireGuard将用于传入连接的端口。

    PostUpPostDown分别设置在接口打开或关闭后运行的步骤。在这种情况下,iptables用于设置Linux IP Masquerade规则,允许所有客户端共享服务器的Internet IPv4和IPv6地址,并在隧道关闭后清除规则。

    SaveConfig告诉配置文件在服务运行时每当添加新的对等点时自动更新。

设置防火墙规则

  1. 允许SSH连接和WireGuard的VPN端口:
    ufw allow 51820/udp
    ufw allow 22/tcp
    ufw enable
    
  2. 验证设置:
    ufw status verbose
    

启动Wireguard服务

  1. 启动Wireguard:
    wg-quick up wg0
    

    注意

    wg-quick是一个方便的包装周围的许多常见的功能wg。你可以关闭wg0接口wg-quick down wg0
  2. 启用Wireguard服务以在引导时自动重启:
    systemctl enable [email protected]
    
  3. 检查VPN隧道是否正在运行:
    wg show
    ifconfig wg0
    

Wireguard客户端

设置客户端的过程与服务器基本相同。如果您的客户使用Ubuntu,请按照上面的说明操作。对于其他Linux发行版,请参阅WireGuard文档了解安装说明。

  1. 为客户端生成一个密钥对,如果您还没有:
    umask 077
    wg genkey | tee privatekey | wg pubkey > publickey
    
  2. 客户端和服务器之间的唯一区别是配置文件的内容:
    /etc/wireguard/wg0.conf
    [Interface]
    PrivateKey = <Output of privatekey file that contains your private key>
    Address = 192.168.2.2/24, fd86:ea04:1115::5/64

连接客户端和服务器

有两种方法可以将对等信息添加到WireGuard; 本指南将演示两种方法。

  1. 第一种方法是直接wg0.conf用服务器的信息编辑客户端的文件:
    /etc/wireguard/wg0.conf
    [Peer]
    PublicKey = <Server Public key>
    Endpoint = <Server Public IP>:51820
    AllowedIPs = 192.168.2.1/24, fd86:ea04:1115::1/64

    使用服务器的公共密钥,公共IP地址和端口。

  2. 启用wg服务:
    wg-quick up wg0
    systemctl enable [email protected]
    

添加对等信息的第二种方法是通过命令行。由于之前指定的SaveConfig选项,此信息将自动添加到配置文件中。

  1. 从服务器运行以下命令:
    wg set wg0 peer <Client Public Key> endpoint <Client IP address>:51820 allowed-ips 192.168.2.2/24,fd86:ea04:1115::5/64
    
  2. 验证连接:
    wg
    

无论上面选择哪种方法,如果安装成功,此命令的输出中将会有一个对等部分。此对等部分将自动添加到wg0.conf服务重新启动时。如果您想立即将此信息添加到配置文件,您可以运行:

wg-quick save wg0

可以使用相同的过程添加其他客户端。

测试连接

返回到客户端并ping服务器:

ping 192.168.2.1
wg

wg输出的最后两行应该类似于:

latest handshake: 1 minute, 17 seconds ago
transfer: 98.86 KiB received, 43.08 KiB sent

这表示您现在已经在服务器和客户端之间建立了私有连接。您也可以从服务器ping客户端来验证连接是否可以同时工作。