桌面软件 活跃维护

GlobalProtect-openconnect

yuezk/GlobalProtect-openconnect

一个用于 Linux 的 GlobalProtect VPN 客户端,用 Rust 编写,基于 OpenConnect 和 Tauri,支持带多因素认证(MFA)、YubiKey 和客户端证书认证的单点登录(SSO)等。

2283
Stars 标星
265
Forks 分支
21
Watchers 关注
35
Open Issues
Rust
主要语言
GPL-3.0
开源协议
9.2 MB
仓库大小
6 小时前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:yuezk/GlobalProtect-openconnect
git clone https://github.com/yuezk/GlobalProtect-openconnect.git
git clone git@github.com:yuezk/GlobalProtect-openconnect.git
README.md main

英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。

GlobalProtect-openconnect

一个面向 Linux 的现代 GlobalProtect VPN 客户端,基于 OpenConnect 构建,完全支持 SSO 认证。该项目提供命令行和图形界面,以实现无缝的 VPN 连接。

灵感来自于 gp-saml-gui

功能

  • 跨平台 Linux 支持 – 针对各种 Linux 发行版进行优化
  • 双接口 – 提供 CLI 和 GUI 应用程序
  • 灵活的身份验证 – 支持 SSO、非 SSO、FIDO2(例如 YubiKey)和客户端证书认证
  • 浏览器集成 – 使用默认浏览器或指定浏览器进行身份验证
  • 多门户支持 – 连接到多个门户和网关
  • 直接网关连接 – 在需要时绕过门户选择
  • 自动连接 – 系统启动时自动连接
  • 系统托盘集成 – 方便的系统托盘图标(在 GNOME 上需要 gnome-shell-extension-appindicator)

使用方法

命令行界面

CLI 版本是完全开源且功能丰富的,提供与 GUI 版本几乎相同的功能。

基本命令

Usage: gpclient [OPTIONS] <COMMAND>

Commands:
  connect     Connect to a portal server
  disconnect  Disconnect from the server
  launch-gui  Launch the GUI
  hip         Generate HIP report
  help        Print this message or the help of the given subcommand(s)

Options:
      --fix-openssl              Uses extended compatibility mode for OpenSSL operations to support a broader range of systems and formats.
      --ignore-tls-errors        Ignore the TLS errors
      --log-format <LOG_FORMAT>  Log output format. JSON is intended for non-interactive consumers; interactive prompts remain text. [default: text] [possible values: text, json]
  -v, --verbose...               Enable verbose output, -v for debug, -vv for trace
  -q, --quiet...                 Decrease logging verbosity, -q for warnings, -qq for errors
  -h, --help                     Print help (see more with '--help')
  -V, --version                  Print version

提示: 使用 gpclient help <command> 获取特定命令的详细信息。

外部浏览器认证

对于基于浏览器的 CLI 认证:

方法 1: 使用 sudo 并保留环境变量:

sudo gpclient connect --browser <portal>

方法二: 使用身份验证管道:

gpauth <portal> --browser 2>/dev/null | sudo gpclient connect <portal> --cookie-on-stdin

浏览器选项:

  • 使用 --browser 自动选择 Chrome、Firefox,然后是系统默认浏览器
  • 使用 --browser default 使用系统默认浏览器
  • 使用 --browser <browser> 指定浏览器(例如,firefox、chrome)
  • 在无头服务器上使用 --browser remote – 这会提供一个 URL,您可以从另一台机器访问以完成身份验证

图形用户界面

GUI 应用程序提供了用于管理 VPN 连接的直观界面。可以从应用菜单启动它,或通过终端启动:

gpclient launch-gui

[!注意]

GUI 版本是部分开源的。后台服务(gpservice)是开源的,而 GUI 封装是专有的。

安装

[!注意]

对于较旧的Linux发行版,请使用v2.3.13,而不是最新版本。它提供适用于常见发行版系列的发布资产,包括Debian/Ubuntu(.deb)、Arch Linux / Manjaro(.pkg.tar.zst)、基于RPM的发行版如Fedora / RHEL / Rocky / AlmaLinux / CentOS(.rpm),以及通用Linux压缩包(.bin.tar.xz)。

Debian / Ubuntu

选项1:从PPA安装(推荐)

sudo add-apt-repository ppa:yuezk/globalprotect-openconnect
sudo apt-get update
sudo apt-get install globalprotect-openconnect

[!注意]

针对 Linux Mint 用户: 如果遇到 GPG 密钥错误,请手动导入密钥:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7937C393082992E5D6E4A60453FC26B43838D761

选项 2:从 DEB 包安装

从 releases 页面下载最新的 .deb 包,然后安装:

sudo apt install --fix-broken globalprotect-openconnect_*.deb

Arch Linux / Manjaro

选项 1:从 AUR 安装

软件包:globalprotect-openconnect-git

您可以使用像 yay 这样的 AUR 助手来安装它:

yay -S globalprotect-openconnect-git

选项 2:从官方 Extra 仓库安装

该软件包也可在官方 Arch Linux Extra 仓库中获得。

软件包:globalprotect-openconnect

[!注意]

由于官方软件包不包含系统托盘支持依赖项,您需要手动安装 libappindicator:

sudo pacman -S libappindicator globalprotect-openconnect

选项 3:从软件包安装

从 releases 页面下载最新的软件包,然后安装:

sudo pacman -U globalprotect-openconnect-*.pkg.tar.zst

Fedora 38 / Rawhide

从 COPR 安装

该软件包可用于基于 RPM 的发行版,访问 COPR:

sudo dnf copr enable yuezk/globalprotect-openconnect
sudo dnf install globalprotect-openconnect

openSUSE Leap 15.6 / Tumbleweed

从 OBS (openSUSE 构建服务) 安装

软件包可在 openSUSE 构建服务 上获得。请按照您的发行版的 安装说明 操作。

其他基于 RPM 的发行版

从 RPM 包安装

从 发布 页面下载最新的 RPM 包:

sudo rpm -i globalprotect-openconnect-*.rpm

阿尔卑斯Linux

从 releases 页面下载最新的 .apk 包,然后安装:

sudo apk add --allow-untrusted globalprotect-openconnect-*.apk

该软件包使用 Alpine 的原生 musl 构建。确保启用了 community 仓库,以便可以解析 GUI 依赖项,例如 webkit2gtk-4.1、libsecret 和 libayatana-appindicator。通过 GUI 启动的连接使用 polkit,而 VPN 隧道创建需要 /dev/net/tun。

FreeBSD

从 releases 页面下载最新的 FreeBSD 软件包,然后安装:

sudo pkg install ./globalprotect-openconnect-*-freebsd-*.pkg

要从源代码构建,请参阅 在 FreeBSD 和 OpenBSD 上从源代码构建。

OpenBSD

从 releases 页面下载最新的 OpenBSD 包,然后安装:

doas pkg_add -D unsigned ./globalprotect-openconnect-*-openbsd-*.tgz

要从源代码构建,请参见 在 FreeBSD 和 OpenBSD 上从源代码构建。

健图

可通过 guru 和 lamdness 覆盖获得:

sudo eselect repository enable guru
sudo emerge --sync guru
sudo emerge --ask --verbose net-vpn/GlobalProtect-openconnect

NixOS

此存储库包含用于 NixOS 集成的 flake。

安装步骤

在你的 flake.nix 中添加 flake 输入和 NixOS 模块:

该模块使用你的 NixOS 配置中的 pkgs 构建软件包,因此 GlobalProtect GUI 和系统使用相同的 Nixpkgs 依赖版本。

{
  inputs = {
    # ... other inputs
    globalprotect-openconnect.url = "github:yuezk/GlobalProtect-openconnect";
  };

  outputs = { self, nixpkgs, globalprotect-openconnect, ... }:
    let
      system = "x86_64-linux"; # or "aarch64-linux" for ARM64
      hostname = "<your-host>";
    in {
      nixosConfigurations.${hostname} = nixpkgs.lib.nixosSystem {
        inherit system;

        modules = [
          ./configuration.nix
          globalprotect-openconnect.nixosModules.default
          {
            programs.globalprotect-openconnect.enable = true;

            environment.systemPackages = [
              nixpkgs.legacyPackages.${system}.gnomeExtensions.appindicator
            ];
          }
        ];
      };
    };
}

申请:

sudo nixos-rebuild switch
loginctl terminate-user "$USER"

重新登录 GNOME 后,如有需要,请启用 AppIndicator 支持:

gnome-extensions enable appindicatorsupport@rgcjonas.gmail.com

官方 Docker 镜像

官方 Docker 镜像在 Alpine Linux 上提供 CLI 工具:

docker pull yuezk/globalprotect-openconnect:<version>

发布镜像的标签为 vX.Y.Z、X.Y.Z 和 latest。

以访问 TUN 设备的方式运行它:

docker run --rm -it --cap-add=NET_ADMIN --device=/dev/net/tun \
  yuezk/globalprotect-openconnect:<version> \
  connect <portal> --cookie-on-stdin

在无头环境中进行浏览器身份验证时,请使用远程浏览器身份验证:

docker run --rm -it --cap-add=NET_ADMIN --device=/dev/net/tun \
  yuezk/globalprotect-openconnect:<version> \
  connect <portal> --browser remote

在 Linux 主机上,如果 VPN 路由应该影响主机网络命名空间,请添加主机网络:

docker run --rm -it --network host --cap-add=NET_ADMIN --device=/dev/net/tun \
  yuezk/globalprotect-openconnect:<version> \
  connect <portal> --browser remote

如果没有使用 --network host,VPN 连接将停留在容器的网络命名空间内。macOS 和 Windows 上的 Docker Desktop 不会通过 --network host 让主机使用 VPN;请在主机上运行 gpclient 或使用容器网关设置以处理主机流量。

或者,将 gpauth 远程浏览器输出通过管道传递给 gpclient:

docker run --rm -it --entrypoint gpauth yuezk/globalprotect-openconnect:<version> \
  <portal> --browser remote 2>/dev/null \
  | docker run --rm -i --cap-add=NET_ADMIN --device=/dev/net/tun \
      yuezk/globalprotect-openconnect:<version> \
      connect <portal> --cookie-on-stdin

该镜像仅包含 gpclient 和 gpauth。它不包含嵌入式 webview 认证、gpgui-helper 或 gpgui。

其他发行版

手动安装

  1. 安装依赖项:

    • webkit2gtk
    • libsecret
    • libayatana-appindicator 或 libappindicator-gtk3
  2. 下载并解压: 从 releases 页面下载 globalprotect-openconnect_${version}_${arch}.bin.tar.xz:

    tar -xJf globalprotect-openconnect_${version}_${arch}.bin.tar.xz
  3. 安装:

    sudo make install

从源代码构建

你可以使用 DevContainer(推荐)或本地开发环境从源代码构建应用程序。

方法 1:使用 DevContainer(推荐)

该项目包含一个 DevContainer 配置,提供一个一致、可复现的构建环境,并预先安装了所有依赖项。

先决条件

构建步骤

  1. 克隆仓库:

    git clone https://github.com/yuezk/GlobalProtect-openconnect.git
    cd GlobalProtect-openconnect
    git submodule update --init --recursive
  2. 构建 DevContainer 镜像:

    docker build -t gpoc-devcontainer .devcontainer/
  3. 构建项目:

    要构建包括 GUI 助手在内的所有内容,请运行此命令:

    docker run --privileged --cap-add=NET_ADMIN --device=/dev/net/tun \
     --tty -v "$(pwd)":/workspace -w /workspace gpoc-devcontainer \
     bash -c "export PATH=/usr/local/cargo/bin:\$PATH && make build"

    要在没有 GUI 辅助的情况下构建,请运行与上面相同的命令,但在执行 make 时传递 BUILD_GUI_HELPER=0 参数。

  4. 定位构建产物:

    编译后的二进制文件将在 target/release/ 中可用:

    • gpclient – 命令行客户端
    • gpservice – 后台服务
    • gpauth – 认证辅助工具
    • gpgui-helper – GUI 辅助工具

替代方案:使用 VS Code

  1. 在 VS Code 中打开项目
  2. 出现提示时,点击“在容器中重新打开”(或运行 Dev Containers: Reopen in Container)
  3. 容器准备好后,打开终端并运行:
    make build

方法 2:本地开发构建

前提条件

  • Rust 1.89 或更高版本
  • Tauri 依赖
  • OpenConnect 源码构建依赖:autoconf、automake、autopoint/gettext、libtool、patch、pkg-config、libxml2、zlib、lz4、gnutls、p11-kit、nettle 和 gmp 开发包
  • pkexec 和 gnome-keyring(KDE 上为 pam_kwallet)
  • nodejs 和 pnpm(可选)

构建步骤

  1. 下载源代码:

    从 releases 页面下载 globalprotect-openconnect-${version}.tar.gz

  2. 解压并构建:

    tar -xzf globalprotect-openconnect-${version}.tar.gz
    cd globalprotect-openconnect-${version}
    make build
  3. 安装:

    sudo make install

    注意: 当前不支持 DESTDIR。

测试您的构建

验证 CLI 客户端是否正常工作:

./target/release/gpclient --help

构建选项

  • BUILD_GUI_HELPER=0 – 仅构建 CLI 组件(不包括 GUI)
  • OFFLINE=1 – 使用捆绑的依赖项在离线模式下构建

常见问题

问:我如何解决“安全存储未准备好”错误?

解决方案 1: 更新到 2.2.0 或更高版本,其中包含基于文件的存储回退功能。

解决方案 2: 安装 gnome-keyring 软件包并重启系统。

参见相关问题: #321, #316

问:在使用 CLI 时如何修复“无法打开显示器”错误?

如果遇到 (gpauth:18869): Gtk-WARNING **: 10:33:37.566: cannot open display:,尝试使用 sudo -E 运行命令:

sudo -E gpclient connect <portal>

参见相关问题:#316

许可

试用和定价

CLI 版本 完全免费且开源。GUI 版本 是付费应用,安装后有 7 天试用期。

开源许可证

该项目由多个组件组成,每个组件都有其自己的许可证:

组件 类型 许可证
gpapi 包 MIT
openconnect 包 GPL-3.0
common 包 GPL-3.0
auth 包 GPL-3.0
gpservice 应用程序 GPL-3.0
gpclient 应用程序 GPL-3.0
gpauth 应用程序 GPL-3.0
gpgui-helper 应用程序 GPL-3.0
本站来源与版权声明
  • 本文标题:GlobalProtect-openconnect - 一个用于 Linux 的 GlobalProtect
  • 本文链接:https://www.cn121.com/desktop/yuezk-globalprotect-openconnect.html
  • 原项目:yuezk/GlobalProtect-openconnect 版权归原作者 yuezk 及贡献者所有
  • 收录信息:本站于 2026-10-07 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 GPL-3.0(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。基于本页内容形成的衍生作品, 须同样以该协议发布。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 yuezk/GlobalProtect-openconnect。
  • 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出,仅将二级标题译为中文,便于按栏目定位;标题原文可在下方原仓库中查看),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。