8.12. 使用 nmtui 配置 WireGuard 客户端

您可以通过在 NetworkManager 中创建连接配置集来配置 WireGuard 客户端。使用此方法让 NetworkManager 管理 WireGuard 连接。

此流程假设以下设置:

  • 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 地址和子网掩码
  • 已安装 NetworkManager-tui 软件包

流程

  1. 启动 nmtui 应用程序:

    # nmtui
  2. 选择 Edit a connection,点 Enter
  3. 选择 添加,然后按 Enter 键。
  4. 选择列表中的 WireGuard 连接类型,然后按 Enter 键。
  5. Edit connection 窗口中:

    1. 输入连接名称和虚拟接口,如 wg0,以便 NetworkManager 应分配给连接。
    2. 输入客户端的私钥。

      nmtui WireGuard client general
    3. Peers 窗格旁的 Add s:

      1. 输入服务器的公钥。
      2. 设置 Allowed IPs 字段。例如,将其设置为:

        • 服务器隧道 IP 地址,以仅允许服务器与此客户端通信。
        • 0.0.0.0/0,::/0 以允许任何远程 IPv4 和 IPv6 地址与此客户端通信。使用此设置通过隧道路由所有流量,并使用 WireGuard 服务器作为默认网关。
      3. Endpoint 字段中输入 WireGuard 服务器的主机名或 IP 地址和端口。使用以下格式: hostname_or_IP:port_number
      4. 可选: 如果您在带有网络地址转换(NAT)的网络中使用客户端,或者防火墙在一定时间不活动状态后关闭 UDP 连接,则设置持久的间隔(以秒为单位)。在这个间隔中,客户端向服务器发送一个保留数据包。
      5. 选择 确定,然后按 Enter 键。

        nmtui WireGuard 客户端对等配置
    4. 选择 IPv4 Configuration 旁边的 显示,然后按 Enter 键。

      1. 选择 IPv4 配置方法 Manual
      2. 输入隧道 IPv4 地址和子网掩码。将 Gateway 字段留空。
    5. 选择 IPv6 Configuration 旁边的 显示,然后按 Enter 键。

      1. 选择 IPv6 配置方法 Manual
      2. 输入隧道 IPv6 地址和子网掩码。将 Gateway 字段留空。
    6. 可选: 选择 Automatically connect
    7. 选择 确定,然后按 Enter

      nmtui WireGuard client ip config
  6. 在带有连接列表的窗口中,选择 Back,然后按 Enter 键。
  7. NetworkManager TUI 主窗口中,选择 Quit,然后按 Enter 键。

验证

  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 brd 192.0.2.255 scope global noprefixroute wg0
           valid_lft forever preferred_lft forever
        inet6 2001:db8:1::2/32 scope global noprefixroute
           valid_lft forever preferred_lft forever
        inet6 fe80::73d9:6f51:ea6f:863e/64 scope link noprefixroute
           valid_lft forever preferred_lft forever

其它资源

  • wg(8) 手册页