8.14. 使用 wg-quick 服务配置 WireGuard 客户端

您可以通过在 /etc/wireguard/ 目录中创建配置文件来配置 WireGuard 客户端。使用此方法独立于 NetworkManager 配置服务。

此流程假设以下设置:

  • Client:

    • Private key: aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A=
    • 隧道 IPv4 地址:192.0.2.2/24
    • 频道 IPv6 地址:2001:db8:1::2/32
  • server:

    • 公钥:UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
    • 隧道 IPv4 地址:192.0.2.1/24
    • 频道 IPv6 地址:2001:db8:1::1/32

先决条件

  • 您已为服务器和客户端生成了公钥和私钥。
  • 您知道以下信息:

    • 客户端的私钥
    • 客户端的静态隧道 IP 地址和子网掩码
    • 服务器的公钥
    • 服务器的静态隧道 IP 地址和子网掩码

步骤

  1. 安装 wireguard-tools 软件包:

    # dnf install wireguard-tools
  2. 使用以下内容创建 /etc/wireguard/wg0.conf 文件:

    [Interface]
    Address = 192.0.2.2/24, 2001:db8:1::2/32
    PrivateKey = aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A=
    
    [Peer]
    PublicKey = UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
    AllowedIPs = 192.0.2.1, 2001:db8:1::1
    Endpoint = server.example.com:51820
    PersistentKeepalive = 20
    • [Interface] 部分描述了客户端上接口的 WireGuard 设置:

      • Address :逗号分隔的客户端隧道 IP 地址的列表。
      • PrivateKey :客户端的私钥。
    • [Peer] 部分描述了服务器的设置:

      • PublicKey :服务器的公钥。
      • AllowedIPs :允许向此客户端发送数据的 IP 地址。例如,将参数设置为:

        • 服务器隧道 IP 地址,以仅允许服务器与此客户端通信。上例中的值可配置这种情况。
        • 0.0.0.0/0, ::/0 允许任何远程 IPv4 和 IPv6 地址与此客户端进行通信。使用此设置通过隧道路由所有流量,并使用 WireGuard 服务器作为默认网关。
      • Endpoint :设置服务器的主机名或 IP 地址以及端口。客户端使用此信息来建立连接。
      • 可选的 persistent-keepalive 参数定义 WireGuard 将 keepalive 数据包发送给服务器的间隔(以秒为单位)。如果您在网络中使用具有网络地址转换(NAT)的客户端,或者防火墙在一段时间不活跃后关闭 UDP 连接,则设置此参数。
  3. 启用并启动 WireGuard 连接:

    # systemctl enable --now wg-quick@wg0

    systemd 实例名称必须与 /etc/wireguard/ 目录中不带 .conf 后缀的配置文件的名称匹配。该服务还会将这个名称用于虚拟网络接口。

验证

  1. Ping 服务器的 IP 地址:

    # ping 192.0.2.1
    # ping6 2001:db8:1::1
  2. 显示 wg0 设备的接口配置:

    # wg show wg0
    interface: wg0
      public key: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM=
      private key: (hidden)
      listening port: 51820
    
    peer: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
      endpoint: server.example.com:51820
      allowed ips: 192.0.2.1/32, 2001:db8:1::1/128
      latest handshake: 1 minute, 41 seconds ago
      transfer: 824 B received, 1.01 KiB sent
      persistent keepalive: every 20 seconds

    要在输出中显示私钥,请使用 WG_HIDE_KEYS=never wg show wg0 命令。

    请注意,如果已经通过 VPN 隧道发送流量,输出只会包含 latest handshaketransfer 条目。

  3. 显示 wg0 设备的 IP 配置:

    # ip address show wg0
    10: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
        link/none
        inet 192.0.2.2/24 scope global wg0
           valid_lft forever preferred_lft forever
        inet6 2001:db8:1::2/32__ scope global
           valid_lft forever preferred_lft forever

其他资源

  • wg(8) 手册页
  • wg-quick (8) 手册页