Kivuko 图标

Kivuko

一款 Mac 菜单栏 NordVPN 客户端,使用 Rust 编写,基于 WireGuard 构建。

Kivuko(kee-VOO-koh)在斯瓦希里语中意为“渡口”或“渡船”。

Kivuko 是一个独立项目,并非由 Nord Security 开发、认可或支持。你需要自己的 NordVPN 订阅。

Kivuko 连接时的菜单:Disconnect、设为 United States 的 Location,以及已勾选的 Kill Switch、Auto-Connect 和 Block Ads and Trackers

Kill Switch、自动重连和广告拦截

Kivuko 是一款免费开源的 macOS NordVPN 客户端,通过 WireGuard(NordLynx)连接。

Kivuko 的 Kill Switch(断网保护)由 macOS 强制执行。Kivuko 会在睡眠唤醒和网络变化后重新连接,还可以通过 NordVPN 的 DNS 拦截广告和跟踪器。菜单栏 App 约占用 23 MB 内存,隧道约占用 8 MB。

它的隧道在 macOS 数据包隧道扩展中运行 GotaTun,即 Mullvad 用 Rust 实现的 WireGuard。该扩展由 macOS 启动和重启,例如在睡眠唤醒后。

服务器无响应时

Kivuko 每 15 秒检查一次 WireGuard 握手。

  1. 8 秒尝试下一个服务器如果服务器在 8 秒内没有响应,Kivuko 会尝试下一个服务器,最多尝试三个。
  2. 3 分钟强制握手如果 3 分钟内没有收到 WireGuard 握手,Kivuko 会强制进行一次新的握手。
  3. 6 分钟在新服务器上重启6 分钟后,macOS 会在新服务器上重启隧道(需打开 Auto-Connect)。

工作原理

Kivuko.app                     app/       menu bar app: menu, token prompt, VPN configuration
└── Contents/PlugIns/
    └── KivukoTunnel.appex     provider/  packet-tunnel extension: server choice, GotaTun, watchdog
  • 菜单栏 App 负责管理 macOS 保存在“系统设置”›“VPN”中的 VPN 配置,包括 Kill Switch、按需连接(On-Demand)规则和 DNS 选择。
  • 隧道是一个 NetworkExtension 数据包隧道提供程序。每当 VPN 启动时,macOS 都会启动它,包括 App 未运行时的自动重连。
  • 每次启动时,隧道会向 NordVPN 请求推荐的 WireGuard 服务器,将地址、路由和 DNS 提供给 macOS,并在 macOS 创建的隧道接口上运行 GotaTun。
  • docs/architecture.md 解释了设计决策、连接流程和看门狗机制。

隐私与安全

Kivuko 只与 NordVPN 的 API 和你所连接的 VPN 服务器通信,不发送任何分析数据。

  • 你的 NordVPN 访问令牌存储在登录钥匙串中。点按 Connect 时,App 会将令牌交给隧道,隧道再用它从 NordVPN 获取你的 WireGuard 密钥。
  • 隧道将 WireGuard 密钥保存在自己的沙盒容器中,只有你的用户账户可以读取(权限模式 0600)。
  • 这台 Mac 上的任何用户都能读取 macOS 的 VPN 配置,因此 Kivuko 只在其中存储你选择的国家/地区和 DNS。
  • 日志只记录事件,从不记录令牌或密钥。docs/setup.md 列出了 Kivuko 写入的每个文件。

资源占用

在运行 macOS 26 的 MacBook Pro 上测得。

进程内存CPU
菜单栏 App23 MB空闲时为 0%
隧道8 MB有后台流量时低于 1%;以 212 Mbit/s 下载时约占一个核心的 26%

获取 Kivuko

没有现成的下载版本。macOS 只会载入通过付费 Apple Developer Program 会员资格签名的 VPN 扩展,因此需要你自己构建并签名 Kivuko。完整指南见 docs/setup.md。

系统要求

Mac
Apple 芯片
macOS
14 或更高版本(目前仅在 macOS 26 上测试过)
VPN 服务
你自己的 NordVPN 订阅
签名
付费的 Apple Developer Program 会员资格

构建所需

Xcode
已登录该账户
Rust
1.95 或更高版本
  1. 克隆代码仓库,并选择一个你自己的 Bundle ID 前缀,例如 com.yourname:

    git clone https://github.com/piedol/kivuko.git
    cd kivuko && cp signing/local.env.example signing/local.env

    在 signing/local.env 中设置 KIVUKO_BUNDLE_PREFIX;如果你的 Apple ID 属于多个开发者团队,还需设置 KIVUKO_TEAM。scripts/bundle.sh --check 会显示将要签名的内容。

  2. 构建、签名并安装。首次运行时,Xcode 会注册你的 Mac 和两个 Bundle ID,并下载开发描述文件:

    scripts/bundle.sh --install
  3. 在 Nord Account › NordVPN › Advanced settings › Access token 中获取 NordVPN 访问令牌。

  4. 点按菜单栏中的盾牌图标,然后选择 Set Up and Connect。粘贴令牌并点按 Save and Connect,然后在 macOS 询问是否添加 VPN 配置时点按允许。

开发描述文件的有效期为一年。过期后,macOS 将不再载入 Kivuko,再次运行 scripts/bundle.sh --install 即可续期。不要在 Mac 上保留第二份 Kivuko 副本。如果注册了两份隧道扩展,打开其中任意一份 App 都会使 macOS 停止另一份的隧道,导致 VPN 断开。

要卸载,请按顺序完成卸载步骤。如果先删除 App,Kill Switch 可能会持续阻断你的网络连接,直到你移除 VPN 配置。

常见问题

Kivuko 是免费开源的吗?

是的。Kivuko 可免费下载和使用,其源代码以 GNU 通用公共许可证 v3.0 或更高版本发布在 GitHub 上。

需要 NordVPN 订阅吗?

需要。Kivuko 使用你自己的订阅连接 NordVPN,所用的访问令牌来自 Nord Account › NordVPN › Advanced settings。

Kivuko 与 Nord Security 有关联吗?

没有。Kivuko 是一个独立项目,并非由 Nord Security 开发、认可或支持。

如何安装 Kivuko?

在搭载 Apple 芯片并运行 macOS 14 或更高版本的 Mac 上从源代码构建。macOS 只会载入通过付费 Apple Developer Program 会员资格签名的 VPN 扩展,因此没有现成的下载版本。具体步骤见 docs/setup.md。

Kivuko 会通过网络发送什么?

它只与 NordVPN 的 API 和你所连接的 VPN 服务器通信,不发送任何分析数据。你的访问令牌保存在登录钥匙串中。

如何卸载 Kivuko?

先退出 Kivuko,然后在“系统设置”›“VPN”中移除其配置,将 Kivuko.app 移到废纸篓,并从登录钥匙串中删除其令牌。如果先删除 App,Kill Switch 可能会继续阻断你的网络连接。

许可证

Kivuko 是采用 GNU 通用公共许可证 v3.0 或更高版本的自由软件。欢迎在 GitHub 上提交错误报告和拉取请求。

可在任何场合使用(包括工作中),也可阅读、修改和分享源代码。如果分发修改版本,须以相同的许可证公开其源代码。

致谢:Mullvad 的 GotaTun、wireguard-apple 和 objc2。