یک فرمان اتصال مجدد در هوک خواب بگذارید و مشکل حل‌شده به نظر می‌رسد. تنها زمانی حل می‌شود که هوک پس از وجود شبکه اجرا شود، با هویتی که سرویس‌گیرنده می‌شناسد، از مسیری که سرویس‌گیرنده واقعاً پیاده‌سازی می‌کند. بیشتر شکست‌ها پس از بیداری یکی از این سه است، و هیچ‌یک از آن‌ها به‌عنوان خطا در خود هوک ظاهر نمی‌شود. هوک در هر حال موفقیت برمی‌گرداند.

اسکریپتی که با صفر خارج می‌شود، هیچ چیزی درباره بازگشت تونل به شما نگفته است.

هوک اجرا می‌شود، و بعد چه؟

#!/bin/sh
case "$1" in
  pre)
    vpn-client disconnect
    ;;
  post)
    vpn-client connect
    ;;
esac

هر رویداد هوک را دو بار فراخوانی می‌کند، پیش و پس از گذار، و فاز و نام رویداد را به آن می‌دهد. به‌عنوان root با محیطی کمینه اجرا می‌شود، بنابراین مسیرهای مطلق لازم است و نباید هیچ متغیر نشست رومیزی انتظار داشت. اینکه هر دو فراخوانی سریع برگردند فقط می‌گوید اسکریپت اجرا شده است. اینکه نمایه پس از آن بالا آمده یا نه، مشاهده‌ای جداگانه است و به شاهد خودش در گزارش نیاز دارد.

آرگومان فاز را بخشی از طراحی بدانید. تلاش برای اتصال مجدد در فاز pre زمانی رخ می‌دهد که ماشین در آستانه از دست دادن همه چیز است، و نمی‌تواند موفق شود.

root، محیط کمینه، کاربر اشتباه

اگر سرویس‌گیرنده توکن ورود را برای هر کاربر نگه دارد، اجرای هوک به‌عنوان root آن را بدون چیزی برای ارائه رها می‌کند. وضعیت را تحت هویتی بررسی کنید که هوک واقعاً استفاده می‌کند، نه هویتی که از یک ترمینال رومیزی آزمایش کرده‌اید. برخی نسخه‌ها پس از قطع اتصال نیز دیمنی باقی می‌گذارند که رابط را نگه می‌دارد، بنابراین اتصال مجدد در وضعیتی کهنه فرود می‌آید، و پاک کردن فرایند پیش از آن، آن را به قیمت خاموشی ناپاک بازمی‌گرداند. هیچ‌یک از این دو رفتار اگر فقط مسیر خوش را آزمایش کنید دیده نمی‌شود.

هوک را با مسیرهای مطلق بنویسید، آن را در مالکیت root و قابل اجرا نگه دارید، و ثبت کنید چه کرد. بدون آن گزارش، بررسی بعدی از صفر شروع می‌شود.

اتصال خودکار مسیر VPN نیست

NetworkManager دو سازوکار فعال‌سازی ارائه می‌دهد: پرچم اتصال خودکار روی نمایه، و اتصال‌های ثانویه‌ای که وقتی نمایه اصلی فعال می‌شود شروع می‌شوند. انواع دستگاه بومی اولی را پیاده‌سازی می‌کنند؛ افزونه‌های VPN از نظر تاریخی فقط دومی را پیاده‌سازی کرده‌اند، بنابراین تیک زدن اتصال خودکار روی نمایه OpenVPN ممکن است هیچ اثری نداشته باشد. هر دو ویژگی را بررسی کنید، سپس VPN را به‌جای آن به‌عنوان ثانویه نمایه Wi-Fi یا Ethernet متصل کنید.

[Unit]
PartOf=NetworkManager.service
Requires=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service

رابط WireGuard که با یک واحد systemd مدیریت می‌شود به جای هوک به همان فایل افزودنی نیاز دارد، که پس از آنلاین شدن شبکه مرتب شده است.

منتظر شبکه بمانید، با یک سقف

timer=1
while ! ping -c1 -n -w1 203.0.113.1 >/dev/null; do
  sleep 1; timer=$((timer+1))
  [ $timer -ge 300 ] && exit 0
done
nmcli connection up "work-vpn"

هنگام بیداری ممکن است تونل خواسته شود در حالی که Wi-Fi هنوز در حال اتصال دوباره است، که هر خواب ثابتی را به حدس تبدیل می‌کند. منتظر یک نشانی قابل دسترس بمانید، سپس نمایه را بالا بیاورید، و انتظار را محدود کنید تا هوک نتواند مسیر بیداری را بی‌تعریف باز نگه دارد. نام نمایه را بر شاخص عددی ترجیح دهید، و اگر نمایه درست بسته به شبکه فرق می‌کند، بگذارید تونل سالم انتخاب خود را از پیش در فایلی ثبت کند.

از توفان‌های راه‌اندازی دوباره هم پیشگیری کنید، با شمردن تلاش‌ها و توقف. نگهبانی که به هر بررسی ناموفق واکنش نشان می‌دهد، یک قطعی را به حلقه‌ای تبدیل می‌کند.

یک بار سیستم را به خواب ببرید، سپس گزارش را برای خروجی خود هوک بخوانید. این تنها آزمایشی است که ترتیب را ثابت می‌کند.

مقالات مرتبط