Hello World

安装和配置 WireGuard 作为客户端

好的,在 Alpine Linux 上安装和配置 WireGuard 作为客户端是一个非常常见的需求,因为 Alpine 轻量、安全,非常适合做容器或者小型设备。

整个过程分为三步:安装、配置、启动和验证。


场景设定

我们继续沿用之前的例子,方便你理解配置文件的内容。


第一步:安装 WireGuard 工具

Alpine 的包管理器是 apk。你需要安装 wireguard-tools,它包含了设置接口、密钥和连接所需的所有命令行工具(如 wg, wg-quick)。

打开你的 Alpine 终端,执行以下命令:

# 更新包列表
apk update

# 安装 wireguard-tools
# 它会自动安装内核模块依赖 wireguard-vanilla 或 wireguard-lts 等
apk add wireguard-tools

安装完成后,你可以通过运行 wg --version 来验证是否安装成功。


第二步:生成密钥并配置 ROS 服务器

和 Windows 客户端一样,Alpine 客户端也需要自己的一对密钥。

  1. 在 Alpine 上生成密钥对:

    # 创建存放配置的目录,并设置好权限
    mkdir -p /etc/wireguard
    chmod 700 /etc/wireguard
    
    # 进入目录
    cd /etc/wireguard
    
    # 生成私钥和公钥
    wg genkey | tee privatekey | wg pubkey > publickey

    执行后,/etc/wireguard 目录下会生成两个文件:

    • privatekey: 这是你的私钥,绝对不能泄露。
    • publickey: 这是你的公钥,需要把它添加到 ROS 服务器的 Peer 配置中。
  2. 查看并复制公钥:

    cat /etc/wireguard/publickey

    复制终端输出的这串字符。

  3. 在 ROS 服务器上添加新的 Peer:

    • 用 WinBox 连接到你的 ROS 路由器。
    • 打开 WireGuard -> Peers 选项卡,点击 + 号。
    • Interface: 选择你的主 WireGuard 接口 (如 wg-server)。
    • Public Key: 粘贴刚才从 Alpine 复制的 publickey
    • Allowed IPs:

      • 首先,填入你为 Alpine 分配的 IP: 10.10.10.9/32
      • 为了让它能和其他客户端通信,我们直接使用之前的方案:10.10.10.0/24。这样它不仅能被路由,也能访问其他客户端。
    • Endpoint / Endpoint Port: 留空,因为这是服务器在配置客户端,不需要主动连接它。
    • 点击 OK 保存。

第三步:在 Alpine 上创建配置文件

WireGuard 的标准做法是为每个连接创建一个配置文件,通常放在 /etc/wireguard/ 目录下,并以 .conf 结尾。我们创建一个 wg0.conf 文件。

# 使用 vi 或 nano 创建并编辑配置文件
vi /etc/wireguard/wg0.conf

将以下内容粘贴到文件中,并根据你的实际情况修改

[Interface]
# 这是 Alpine 客户端的配置
PrivateKey = <粘贴 /etc/wireguard/privatekey 文件的内容>
Address = 10.10.10.9/24
# 可选:如果你希望通过 VPN 解析 DNS,可以加上这行
# DNS = 192.168.88.1, 8.8.8.8

[Peer]
# 这是 ROS 服务器的配置
PublicKey = <粘贴 ROS 服务器的公钥>
Endpoint = 117.40.248.253:31213

# 关键:告诉 Alpine 哪些流量应该走 VPN 隧道
# 包含了 WG 子网 和 ROS 内网,这样就能访问所有资源
AllowedIPs = 10.10.10.0/24, 192.168.88.0/24

# 保持连接,对于 NAT 后面的客户端非常重要
PersistentKeepalive = 25

如何获取配置项的值?

编辑完成后,保存并退出 (:wq)。


第四步:启动连接并设置为开机自启

我们使用 wg-quick 这个便捷工具来启动连接。它会自动创建网络接口、设置 IP、配置路由和 DNS。

  1. 启动 WireGuard 连接:

    # wg-quick up <配置文件名,不带.conf>
    wg-quick up wg0

    如果没有报错,你的 WireGuard 隧道就已经启动了。

  2. 验证连接状态:

    • 方法一: 使用 wg 命令

      wg show

      你应该能看到类似这样的输出:

      interface: wg0
        public key: <Alpine的公钥>
        private key: (hidden)
        listening port: <随机端口>
      
      peer: <ROS服务器的公钥>
        endpoint: 117.40.248.253:31213
        allowed ips: 10.10.10.0/24, 192.168.88.0/24
        latest handshake: 15 seconds ago  <-- 看到这个就表示成功了!
        transfer: 1.20 KiB received, 2.50 KiB sent
        persistent keepalive: every 25 seconds

      看到 latest handshake 有时间戳是成功的关键标志。

    • 方法二: 检查网络接口和路由

      # 检查是否有名为 wg0 的网络接口
      ip addr show wg0
      
      # 检查路由表,看是否添加了去往 AllowedIPs 的路由
      ip route
  3. 进行 PING 测试:

    # PING ROS 服务器的 WG 接口
    ping -c 3 10.10.10.1
    
    # PING ROS 的内网网关
    ping -c 3 192.168.88.1
    
    # PING 另一个 WG 客户端 (如果你的配置允许)
    ping -c 3 10.10.10.3
  4. 设置开机自启 (非常重要):
    Alpine Linux 使用 OpenRC 作为其服务管理器。

    # 将 wg-quick@wg0 服务添加到默认运行级别
    rc-update add wg-quick@wg0 default
    
    # 立即启动服务 (等同于 wg-quick up wg0)
    rc-service wg-quick@wg0 start

    这样,每次 Alpine 重启后,wg0 隧道都会自动建立。

  5. 停止连接:
    如果需要断开连接,使用:

    wg-quick down wg0
    # 或者使用服务管理器
    rc-service wg-quick@wg0 stop

总结 Checklist for Alpine

  1. [ ] 安装: apk add wireguard-tools
  2. [ ] 密钥: 在 /etc/wireguard 生成密钥对,并将公钥添加到 ROS Peer。
  3. [ ] ROS Peer 配置: 在 ROS 上为 Alpine 创建 Peer,Allowed IPs 设置为 10.10.10.0/24
  4. [ ] Alpine 配置文件 (wg0.conf):

    • [ ] 填对自己的 PrivateKeyAddress (10.10.10.9/24)。
    • [ ] 填对服务器的 PublicKeyEndpoint
    • [ ] AllowedIPs 设置为 10.10.10.0/24, 192.168.88.0/24
    • [ ] 加上 PersistentKeepalive = 25
  5. [ ] 启动与验证: wg-quick up wg0,然后用 wg showping 命令检查。
  6. [ ] 开机自启: rc-update add wg-quick@wg0 default

按照这个流程操作,你的 Alpine 设备就能稳定地作为 WireGuard 客户端运行了。