Почему клиент GlobalProtect для Linux не работает на новых Ubuntu
Пакет .deb в порядке: новые выпуски Ubuntu убрали Qt5 WebKit, с которым по-прежнему связан интерфейс производителя. Подтвердите зависимость, а затем выберите openconnect или более старый LTS.
Разумное предположение состоит в том, что .deb с вашего портала GlobalProtect повреждён или что производитель выпустил плохую сборку. Обычно это не так. Linux-интерфейс производителя по-прежнему линкуется с Qt5 WebKit, а новые выпуски Ubuntu его больше не поставляют, поэтому пакет просит библиотеку, которую ваш дистрибутив убрал намеренно. Это несовпадение упаковки, а не испорченная загрузка, и эта разница решает, проведёте ли вы день, форсируя пакеты, или десять минут, выбирая другой клиент.
Пакет .deb не повреждён
Зависимость, которую дистрибутив больше не несёт, — обычный результат вывода библиотеки из эксплуатации. Qt5 WebKit исчез из поздних архивов Ubuntu и из Debian, и причиной было сопровождение безопасности, а не отсутствие спроса. Когда это происходит, каждый пакет, который всё ещё линкуется с ней, перестаёт устанавливаться, как бы хорошо он ни был собран.
Два отказа сообщаются как одна и та же ошибка и таковыми не являются. В выпуске без библиотеки установщик останавливается на неудовлетворённой зависимости. В выпуске, где клиент устанавливается и затем падает при входе, вы видите вместо этого проблему рукопожатия TLS или SAML внутри встроенного компонента браузера. Первое — упаковка; второе — среда исполнения, и ни то, ни другое не исправляется копированием старых библиотек в современный рабочий стол.
Подтвердить зависимость вместо того, чтобы форсировать её
Установите пакет явно, чтобы инструмент назвал неразрешённую зависимость, а не выдал вам сводку. Затем спросите, есть ли в вашем выпуске хоть какой-то кандидат, потому что «здесь недоступно» и «временно отсутствует в этом зеркале» ведут к совершенно разным решениям:
sudo apt install ./GlobalProtect_UI_deb-*.deb
apt-cache policy libqt5webkit5
apt-cache rdepends --installed libqt5webkit5
Если apt-cache policy не сообщает ни одного кандидата, прекратите попытки установить его и начните выбирать альтернативу. Интересно не имя отсутствующего пакета; интересен тот факт, что граф зависимостей производителя не сдвинулся вместе с дистрибутивами, которые используют ваши пользователи.
Что форсирование старых пакетов делает с рабочим столом
Обходной путь, который ходит по рукам, состоит в том, чтобы вытащить библиотеку из более старого выпуска. На актуальной Ubuntu это выливается в конфликт минорной версии Qt5: старые пакеты тянут libqt5core5t64 назад, и тогда установленные пакеты KDE и PyQt начинают требовать версию ABI, которую пониженная библиотека больше не предоставляет. Результат — частичное обновление, ломающее посторонние приложения, а это гораздо худший день, чем тот, с которого вы начали.
Такой исход ожидаем, а не неудачен. Ожидания Qt по ABI для минорных версий строги, а дистрибутив поставляет один согласованный набор. Подмешать библиотеку из другого выпуска — не точечное исправление; это второе, хуже контролируемое обновление.
Тот же совет относится к варианту отказа во время исполнения. Снижение общесистемного уровня безопасности OpenSSL, чтобы прошло рукопожатие старого клиента, меняет каждое TLS-соединение на машине ради починки одного приложения, включая менеджер пакетов, который понадобится, когда сломается что-то ещё.
openconnect говорит на этом протоколе
OpenConnect реализует протокол GlobalProtect напрямую, а заметки о протоколе описывают как вызов, так и разделение между двумя серверными интерфейсами. Портал раздаёт настройки и список шлюзов; шлюз завершает туннель:
openconnect --protocol=gp vpn.example.com
openconnect --protocol=gp --authgroup=staff vpn.example.com
Если портал не указывает нужный вам шлюз, --usergroup=gateway или URL, оканчивающийся на /gateway пропускает шаг портала. Когда предлагается несколько шлюзов, --authgroup=NAME выбирает среди них. Аутентификация — это имя пользователя и пароль, при необходимости с клиентским сертификатом, а шлюзы SAML на практике работают через network-manager-openconnect а не через набранную вручную командную строку.
Шлюз со строгой политикой posture может также требовать отчёт HIP, прежде чем выдать туннель. OpenConnect умеет сформировать и отправить его, но если шлюз требует инвентаризацию, которую он не может создать, никакой флаг эту политику не изменит; это решение на стороне сервера.
Проверить туннель и знать, чего openconnect не исправит
Проверьте, что туннель действительно применил, вместо того чтобы верить сообщению об успехе. Шлюз присылает маршрутизацию и конфигурацию в виде XML, а клиент их применяет, поэтому отсутствующий маршрут — это проблема конфигурации или выбора, а не ошибка клиента:
ip -4 addr show
ip route
resolvectl status
MTU заслуживает отдельного взгляда. Конфигурация GlobalProtect всегда сообщает MTU, равный нулю, поэтому клиент оценивает его из накладных расходов инкапсуляции. Крупные передачи, которые застревают, тогда как мелкие запросы проходят, — классический симптом, и лекарство — явный MTU на соединении, а не отключение обнаружения пути.
IPv6 — снова отдельная история. PAN добавил его в GlobalProtect 4.0, а поддержка в OpenConnect описывается как экспериментальная начиная с версии 9.0, поэтому не считайте, что семейство адресов ведёт себя как IPv4, только потому что туннель поднялся. И если шлюз требует проверку posture, которую клиент с открытым кодом не может пройти, запускайте клиент производителя на поддерживаемом выпуске LTS, в виртуальной машине, если ваша рабочая станция уже ушла вперёд. Это сохраняет рабочий стол целым и помещает устаревшую зависимость внутрь границы, которую вы можете пересобрать.