چرا کلاینت لینوکس GlobalProtect روی اوبونتوهای جدیدتر شکست میخورد
فایل .deb سالم است: نسخههای جدیدتر اوبونتو Qt5 WebKit را حذف کردهاند، همان که رابط فروشنده هنوز به آن پیوند دارد. وابستگی را تأیید کنید و سپس openconnect یا یک LTS قدیمیتر را انتخاب کنید.
فرض معقول این است که .deb دریافتی از پورتال GlobalProtect شما خراب است، یا فروشنده بیلد معیوبی منتشر کرده. معمولاً اینطور نیست. رابط لینوکس فروشنده هنوز به Qt5 WebKit پیوند دارد، و نسخههای جدیدتر اوبونتو دیگر آن را ارائه نمیدهند، پس بسته کتابخانهای را میخواهد که توزیع شما عمداً حذف کرده است. این ناسازگاری بستهبندی است، نه دانلود خراب، و همین تفاوت تعیین میکند که بعدازظهر را صرف تحمیل بستهها کنید یا ده دقیقه را صرف انتخاب کلاینت دیگری.
فایل .deb خراب نیست
وابستگیای که توزیع دیگر آن را ندارد نتیجهٔ طبیعی بازنشستهشدن یک کتابخانه است. Qt5 WebKit از آرشیوهای بعدی اوبونتو و از دبیان حذف شد، و دلیلش نگهداری امنیتی بود نه نبود تقاضا. وقتی این رخ میدهد، هر بستهای که هنوز به آن پیوند دارد نصبشدنی نمیماند، هرقدر هم خوب ساخته شده باشد.
دو خطا بهعنوان یک باگ گزارش میشوند و یکی نیستند. روی نسخهای بدون کتابخانه، نصبکننده روی وابستگی برآوردهنشده متوقف میشود. روی نسخهای که کلاینت نصب میشود و سپس در ورود شکست میخورد، در واقع مشکلی در دستدادن TLS یا SAML داخل مؤلفهٔ مرورگر تعبیهشده میبینید. اولی بستهبندی است؛ دومی زمان اجراست، و هیچکدام با کپی کتابخانههای قدیمی به یک دسکتاپ مدرن درست نمیشود.
وابستگی را تأیید کنید نه اینکه تحمیلش کنید
بسته را صریح نصب کنید تا ابزار وابستگی حلنشده را نام ببرد نه اینکه خلاصهای به شما بدهد. سپس بپرسید آیا نسخهٔ شما اصلاً کاندیدایی دارد، چون «اینجا موجود نیست» و «موقتاً در این آینه غایب است» به تصمیمهای کاملاً متفاوتی میرسند:
sudo apt install ./GlobalProtect_UI_deb-*.deb
apt-cache policy libqt5webkit5
apt-cache rdepends --installed libqt5webkit5
اگر apt-cache policy هیچ کاندیدایی گزارش نکند، از تلاش برای نصبش دست بردارید و شروع به انتخاب جایگزین کنید. نکتهٔ جالب نام بستهٔ غایب نیست؛ این واقعیت است که گراف وابستگی فروشنده با توزیعهایی که کاربرانتان اجرا میکنند حرکت نکرده است.
تحمیل بستههای قدیمی با دسکتاپ چه میکند
راهحلی که دستبهدست میشود این است که کتابخانه از نسخهٔ قدیمیتر کشیده شود. روی اوبونتو کنونی این به تعارض نسخهٔ فرعی Qt5 میرسد: بستههای قدیمی libqt5core5t64 را عقب میکشند، و سپس بستههای نصبشدهٔ KDE و PyQt نسخهٔ ABIای را طلب میکنند که کتابخانهٔ تنزلداده دیگر ارائه نمیدهد. نتیجه ارتقای جزئیای است که برنامههای بیربط را میشکند، و این بعدازظهری بسیار بدتر از آن است که با آن شروع کردید.
این نتیجه قابل انتظار است و نه بدشانسی. انتظارات 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 پشتیبانیشده اجرا کنید، در یک ماشین مجازی اگر ایستگاه کارتان جلوتر رفته است. این دسکتاپ را سالم نگه میدارد و وابستگی قدیمی را داخل مرزی میگذارد که میتوانید از نو بسازید.