Pulse Connect Secure
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 客户端,您还需要安装 webkit2gtk 和 gtkmm3。在 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-zlib、net-tools、glib-perl、perl-libwww 和 gtk2-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-readkey 和 perl-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
变通方法
64 位 Java (变通方法 1)
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 的替代版本并手动链接 Firefox 的 Java 插件 - 这避免了使用 chroot 环境的必要性。请按照以下说明操作
- 安装 xterm。
- 从 java.com 安装自定义 64 位 Java 环境。选择 Linux x64 版本。一旦您决定了安装位置,将二进制文件提取到该位置,然后将其标记为可执行。最后,运行二进制文件以安装 Java。
- 还从 java.com 安装自定义 32 位 Java 环境,但这次选择 Linux(自解压)选项。将新的二进制文件提取到上面创建的同一位置,将其标记为可执行,然后运行该二进制文件。它会询问您是否要将文件替换为 32 位:键入“A”以覆盖所有 64 位文件,替换为 32 位文件。
- 最后,将库链接到所需的位置。Firefox 的相关库是
libnpjp2.so
。要链接它,请使用以下命令ln -s location-of-custom-java-installation/lib/amd64/libnpjp2.so /usr/lib/mozilla/plugins/libnpjp2.so
。
/usr/lib/mozilla/plugins
中的插件,而不是以前版本中使用的 ~/.mozilla/plugins
。有关更多信息,请参阅 南伊利诺伊大学的以下指南。
故障排除
登录成功但 Network Connect 无法启动
- 首先,验证您的 Java 安装。
- 然后导航到
~/.juniper_networks/network_connect
。 - 检查
ncsvc
是否设置为 setuid root。如果不是,请修复它。 - 运行
ldd ncsvc
并查看是否有任何缺失的库。 - 按照 Juniper 论坛的说明从命令行运行它。使用
-L 5
开关记录所有内容,并以 root 身份使用 strace。另请查阅ncsvc.log
以查找任何可能的错误。
Network Connect 已启动但 VPN 无法工作
运行 ip route
以检查路由是否存在。Network Connect 在 GUI 中有一个诊断工具。您还可以检查日志(也在 GUI 中可用)。
VPN 无法工作的其他原因可能在于 DNS 设置。检查它们是否真的已设置(通常在 /etc/resolv.conf 中),以及 DNS 缓存是否没有干预(如果正在运行,则停止 systemd-resolved 服务)。
/etc/resolv.conf
将定期被 DHCPCD 覆盖,因此您的 VPN 最终将停止工作。如果发生这种情况,只需重新启动 Network Connect 即可。您可能还希望保存您的 /etc/resolv.conf
文件,以便可以轻松恢复您的 VPN 设置。截至 2007 年,尚无已知的解决方案来解决此问题,但在 Red Hat Bugzilla 上有一个错误报告。Network Connect 已启动并显示配置错误消息
检查您是否已安装 net-tools。
ncapp.error 连接/验证 IVE 失败。
请参阅 Ubuntu 论坛上的这篇文章。请注意,在某些情况下,策略不允许从命令行发起的连接。相反,您必须安装 bin32-jreAUR 和 bin32-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/