Pulse Connect Secure

来自 ArchWiki

Pulse Connect Secure (PCS),以前称为 Juniper SSL VPN,是一个面向企业的商业 VPN 解决方案。

安装

AUR

安装 pulse-secureAUR 软件包并启动/启用 pulsesecure.service

要通过命令行连接,请运行以下命令

$ /opt/pulsesecure/bin/pulselauncher [-U signinUrl] [-r realm] [-l role] [-c cert] [-u username] [-p password]

请注意,登录 URL 与浏览器中使用的 URL 不同。请查看下面的“关于服务器/URL 的说明”部分。

要使用 pulseUi GUI 客户端,您还需要安装 webkit2gtkgtkmm3。在 GUI 客户端中,URL 应与浏览器中使用的 URL 相同。

注意
  • pulse-secure VPN 仅在使用 NetworkManager 时才能正常工作。此外,当使用单独的域名解析服务时,DNS 查找将无法正常工作。如果您禁用单独的 DNS 服务以切换回 NetworkManager#DNS 管理,您可能还需要删除 /etc/resolv.conf 以使 NetworkManager 正确检测到它应该管理 DNS。
  • 默认情况下,GUI 存储连接的目录不存在,并且它无法找到系统证书来验证主机。运行以下命令来解决这些问题
# mkdir -p /var/lib/pulsesecure/pulse
# mkdir -p /etc/pki/ca-trust/extracted/openssl
# ln -s /etc/ca-certificates/extracted/ca-bundle.trust.crt /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
  • 如果 GUI 客户端中 Chromium Embedded Framework 的安装卡住,可以使用以下命令安装
# sudo /opt/pulsesecure/bin/setup_cef.sh install

OpenConnect

OpenConnect VPN 客户端也支持 Pulse Connect Secure,但是 Host Checker 支持(某些 Pulse 服务器需要)在撰写本文时(2022 年春季)尚未实现。有关更多详细信息,请参阅初始公告

要使用,请安装 openconnect。如果您的 Juniper VPN 设置在连接后不需要任何输入,您可以使用此命令进行连接

# openconnect --protocol=pulse https://vpn.example.com/

如果您想要 NetworkManager 支持,请安装 networkmanager-openconnect,或尝试最新的 git 版本。VPN 连接可以通过 GUI 或使用以下命令创建

$ nmcli con add type vpn con-name "Connection Name" ifname "*" vpn-type openconnect -- vpn.data "gateway=vpn.example.com,protocol=nc"

第三方脚本

MSJNC

Mad Scientist 的“msjnc”脚本需要 multilib,然后安装 lib32-zlibnet-toolsglib-perlperl-libwwwgtk2-perl

访问您需要使用的 Juniper VPN 网站。登录并允许安装尝试失败(由于非 32 位 Java)。您应该会收到类似于以下的错误

Setup failed.
Please install 32 bit Java and update alternatives links using update-alternatives command.
For more details, refer KB article KB25230

您现在应该拥有 ~/.juniper_networks/ncLinuxApp.jar 文件。

但是,如果 ncLinuxApp.jar 未下载,请手动获取它 - 请参阅以下示例 URL:https://server/dana-cached/nc/ncLinuxApp.jar(注意:您需要先登录)。

然后下载 msjnc 脚本,使其可执行,并将其放入您的 PATH 中。

使用 msjnc 自动安装 ncsvc

首次启动 msjnc(在安装 ncsvc 之前)时,它将提取 ncLinuxApp.jar 并提示您输入密码以安装服务。这需要配置 sudo 以允许您的用户执行所有命令。

将服务安装到 ~/.juniper_networks/network_connect/ncsvc 与 suid 后,创建一个配置文件并连接。

手动安装 msjnc

创建这些目录

$ mkdir -p ~/.juniper_networks/network_connect
$ mkdir -p ~/.juniper_networks/tmp

提取软件

$ unzip ~/.juniper_networks/ncLinuxApp.jar -d ~/.juniper_networks/tmp

NC.jar 复制到 network_connect 目录

$ cp ~/.juniper_networks/tmp/NC.jar ~/.juniper_networks/network_connect

安装服务

$ sh ~/.juniper_networks/tmp/installNC.sh ~/.juniper_networks/network_connect

启动 msjnc,创建一个配置文件并连接。

关于服务器/URL 的说明

对于服务器/URL,您可能必须提供处理登录表单的 URL,而不是登录页面本身。例如,一家公司的登录表单位于 /dana-na/auth/url_0/welcome.cgi,但表单实际上由 /dana-na/auth/url_0/login.cgi 处理。您可能必须检查登录页面的 html 以查找表单的 action 属性。

JVPN

JVPN Perl 脚本建立 Juniper VPN 连接并支持以下功能

  • 使用 Host Checker 连接。
  • 以 root 身份运行时,自动下载所需的 Juniper Java 和守护进程文件 (ncsvc)。

安装

安装 Perl 依赖项 perl-term-readkeyperl-lwp-protocol-https。完成此操作后,您必须选择是以 root 身份(最简单的方法)还是以普通用户身份运行 jvpn,并相应地运行以下步骤。

以 root 身份运行

运行命令

# curl -L https://github.com/samm-git/jvpn/archive/v0.7.0.tar.gz | tar xz

该命令在当前目录中创建一个文件 jvpn-0.7.0

最后,使用以下命令启动脚本

# ./jvpn.pl

首次运行时,脚本将下载所有必要的文件

以普通用户身份运行

使用您的 Web 浏览器(无需 32 位 Java)连接到 VPN 网站并下载相应的软件。下载的文件将位于 ~/.juniper_networks/network_connect/ 中(即使 VPN 连接实际上失败)。

此步骤被认为更复杂,因为您必须在浏览器中具有功能正常的 Java 插件(配置了适当的安全设置)。在安装 Network Connect 期间,浏览器将请求 root 密码以在 ncsvc (Juniper 守护进程) 上设置 setuid 标志。

然后通过执行以下命令将 jvpn 安装到文件夹中

$ cd ~/.juniper_networks/network_connect
$ curl -L https://github.com/samm-git/jvpn/archive/v0.7.0.tar.gz | tar xz --strip-components=1

接下来,编辑 jvpn.ini(文件包含说明)。

最后,使用以下命令启动脚本

$ cd ~/.juniper_networks/network_connect
$ ./jvpn.pl

变通方法

本文或本节的事实准确性存在争议。

原因:所有这些变通方法质量都很差,并且可能存在问题。这些需要审查,然后修复或删除。(在Talk:Pulse Connect Secure 中讨论)

64 位 Java (变通方法 1)

警告:建议执行这些步骤。更新您的 JRE 将破坏此变通方法,您将必须重复这些步骤。

1) 安装 bin32-jreAUR。确保 PKGBUILD 将其安装到 /opt/bin32-jre,而不是 /opt/java,它将在那里与 64 位 JRE 冲突。

2) 安装 jreAUR

3) 将 java 二进制文件移动到 java.orig

# mv /opt/java/jre/bin/java /opt/java/jre/bin/java.orig

4) 创建一个 bash 脚本 java 并使其可执行

# touch /opt/java/jre/bin/java
# chmod 755 /opt/java/jre/bin/java

5) 最后,按照下面的说明编辑 bash 脚本

/opt/java/jre/bin/java
#!/bin/bash
if [ $3x = "NCx" ]
then
    /opt/bin32-jre/jre/bin/java "$@"
else
    /opt/java/jre/bin/java.orig "$@"
fi

64 位 Java (变通方法 2)

警告:不建议安装未打包版本的 Java 并将库符号链接到任意位置。

另一种方法是安装 Java 的替代版本并手动链接 Firefox 的 Java 插件 - 这避免了使用 chroot 环境的必要性。请按照以下说明操作

  1. 安装 xterm
  2. java.com 安装自定义 64 位 Java 环境。选择 Linux x64 版本。一旦您决定了安装位置,将二进制文件提取到该位置,然后将其标记为可执行。最后,运行二进制文件以安装 Java。
  3. 还从 java.com 安装自定义 32 位 Java 环境,但这次选择 Linux(自解压)选项。将新的二进制文件提取到上面创建的同一位置,将其标记为可执行,然后运行该二进制文件。它会询问您是否要将文件替换为 32 位:键入“A”以覆盖所有 64 位文件,替换为 32 位文件。
  4. 最后,将库链接到所需的位置。Firefox 的相关库是 libnpjp2.so。要链接它,请使用以下命令 ln -s location-of-custom-java-installation/lib/amd64/libnpjp2.so /usr/lib/mozilla/plugins/libnpjp2.so
注意: Firefox 5 及更高版本检查 /usr/lib/mozilla/plugins 中的插件,而不是以前版本中使用的 ~/.mozilla/plugins

有关更多信息,请参阅 南伊利诺伊大学的以下指南。

故障排除

登录成功但 Network Connect 无法启动

  1. 首先,验证您的 Java 安装。
  2. 然后导航到 ~/.juniper_networks/network_connect
  3. 检查 ncsvc 是否设置为 setuid root。如果不是,请修复它。
  4. 运行 ldd ncsvc 并查看是否有任何缺失的库。
  5. 按照 Juniper 论坛的说明从命令行运行它。使用 -L 5 开关记录所有内容,并以 root 身份使用 strace。另请查阅 ncsvc.log 以查找任何可能的错误。

Network Connect 已启动但 VPN 无法工作

运行 ip route 以检查路由是否存在。Network Connect 在 GUI 中有一个诊断工具。您还可以检查日志(也在 GUI 中可用)。

VPN 无法工作的其他原因可能在于 DNS 设置。检查它们是否真的已设置(通常在 /etc/resolv.conf 中),以及 DNS 缓存是否没有干预(如果正在运行,则停止 systemd-resolved 服务)。

本文或本节的事实准确性存在争议。

原因:以下注释中的信息是在 2007 年添加的。这在 2017 年仍然是一个问题吗?(在Talk:Pulse Connect Secure 中讨论)

本文或本节需要扩充。

原因:请提供 Red Hat Bugzilla 上的错误报告的链接。(在Talk:Pulse Connect Secure 中讨论)
注意: /etc/resolv.conf 将定期被 DHCPCD 覆盖,因此您的 VPN 最终将停止工作。如果发生这种情况,只需重新启动 Network Connect 即可。您可能还希望保存您的 /etc/resolv.conf 文件,以便可以轻松恢复您的 VPN 设置。截至 2007 年,尚无已知的解决方案来解决此问题,但在 Red Hat Bugzilla 上有一个错误报告。

Network Connect 已启动并显示配置错误消息

检查您是否已安装 net-tools

ncapp.error 连接/验证 IVE 失败。

请参阅 Ubuntu 论坛上的这篇文章。请注意,在某些情况下,策略不允许从命令行发起的连接。相反,您必须安装 bin32-jreAURbin32-firefox-binAUR,并通过浏览器进行身份验证。

已添加未经授权的新路由,正在断开连接

当使用 pulse-secureAUR 客户端时,由于路由表策略冲突,VPN 可能无法与 connman 一起工作。检查 ~/.pulse_secure/pulse/pulsesvc.log 中是否有此类消息

rmon.error Unauthorized new route to x.x.x.x/y.y.y.y has been added (conflicts with our route to z.z.z.z), disconnecting (routemon.cpp:598)

如果是这种情况,则使用 NetworkManager 代替可以解决此问题。

登录后,pulseUi 显示“合规性:未满足安全策略”

似乎 pulseUi 在某些情况下在验证连接时内部使用 NetworkManager。如果是这种情况,请安装 NetworkManager 并启动 NetworkManager.sevice

pulseUi 不记得连接

如果 pulseUI 总是忘记您的连接,请确保目录 /var/lib/pulsesecure/pulse/ 存在。如果不存在

# mkdir -p /var/lib/pulsesecure/pulse/