systemd VPN xidmətini dayandırır: Type= dəyərini klientə uyğunlaşdırın
Yükləmə zamanı işə düşən VPN vahidi Type= klientin ömrünə uyğun olmadıqda qeyri-aktiv olur. Tipi uyğunlaşdırın, sahibliyi düzəldin və xidməti tuneldən sonra sıralayın.
Vahidlər düzgün görünə bilər, systemctl start uğur bildirə bilər, lakin on saniyə sonra xidmət qeyri-aktiv qalır. Ya da başlama limiti onu dayandırana qədər hər yarım dəqiqədə yenidən başlayır. Bu davranışların heç biri şəbəkə nasazlığı deyil: vahid klientin həqiqətən etdiyi işə uyğun olmayan proses ömrünü təsvir edir. Klient fork edib çıxa bilər, ya da sessiyanı konfiqurasiya edib dərhal çıxır.
Uğurlu başlamadan saniyələr sonra vahid niyə qeyri-aktiv olur
systemd vəziyyəti özünün başlatdığı prosesdən çıxarır, yəni Type= sənədləşmə deyil, həmin proses haqqında bir iddiadır. Type=simple ilə vahid əmr işlədiyi müddətdə aktiv sayılır və əmr qayıtdıqda qeyri-aktiv olur. Bağlantını köməkçi proqrama ötürüb çıxan klient buna görə qəza kimi görünür, hətta tunel işlək olsa da. Sonra jurnal qüsurlu binar kimi oxunan bir başla-dayan nümunəsi göstərir.
Şəbəkə konfiqurasiyasına toxunmazdan əvvəl vahid tipini klientin davranışı ilə yanaşı oxuyun.
Klientə uyğun tipi seçin
İki nümunə əksər vendor CLI-lərini əhatə edir: sessiyanı konfiqurasiya edib çıxan əmr və qayıtmazdan əvvəl köməkçi fork edən əmr. Hər biri fərqli vahid forması tələb edir.
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/protonvpn-cli connect -f
ExecStop=/usr/bin/protonvpn-cli disconnectoneshot və RemainAfterExit=true birlikdə əmr qayıtdıqdan sonra vahidi aktiv saxlayır, bu da konfiqurasiya-et-çıx nümunəsinə uyğundur və dayandırma əmri xidmətə təmiz bağlanma verir. Fork edən klient eyni formanı saxlayır, lakin systemd uşağı izləsin deyə Type=forking tələb edir. Restart=on-failure, RestartSec=30 və sonlu StartLimitBurst təyin edin ki, provayderin kəsintisi xətanı basdıran yenidən başlama dövrəsinə çevrilməsin.
Nəzarət altındakı klientin daemonlaşmasına imkan verməyin
systemd-dən kənar nəzarətçilər eyni maneəyə çırpılır. Daemonlaşmış klienti işə salan runit skripti dərhal nəzarətçiyə qayıdır, nəzarətçi bu qayıdışı qəza kimi oxuyub başqa nüsxə başladır. Hər nəzarətçi ön plandakı prosesə sahib olmağı gözləyir, necə ki sshd -D öndə qalır. Nəzarət olunan əmrlər üçün daemon bayrağını çıxarın və arxa planı nəzarətçiyə buraxın. Tunel yaranmazdan əvvəl qayıdan sarğı skriptləri də eyni qarışıqlığa səbəb olur.
Özünü ayıran proses onu izləməli olan hər şey üçün görünməz olur.
Sessiya bitir və tuneli də özü ilə aparır
Masaüstü sessiyası başlatdığı klientə sahibdir. Girişi bitirin və sessiya avtobusu yox olur, tuneli də aparır; qrafik klientin bağlantısının son pəncərə bağlananda tez-tez düşməsi bununla izah olunur. Serverlər öz-özünə qalxan sistem vahidi və ya NetworkManager profili işlətməlidir. İstifadəçi vahidi yalnız tunelin girişlə birlikdə bitməsi nəzərdə tutulanda məntiqlidir, ona görə onu qrafik sessiya hədəfinə bağlayın və bunu təsvirində qeyd edin.
Xidmət istifadəçisi eyni problemin digər yarısıdır. root-a məxsus və rejimi 0600 olan açar başqa hesabla işləyən vahid üçün oxuna bilməz, sizin shell-də sudo nəyə nail olsa da.
systemctl cat openvpn-server@work
sudo chown -R openvpn:network /etc/openvpn/server
sudo find /etc/openvpn -type f -perm /077 -lsAsılıları ünvan yarandıqdan sonra sıralayın
Daemon hələ yaradılmamış tunel ünvanına bağlananda Cannot assign requested address ilə çıxır. Düzəliş təkrar cəhd dövrəsi deyil, açıq sıralamadır.
[Unit]
After=network.target [email protected]
Requires=sys-devices-virtual-net-wg0.deviceAfter= işləri sıralayır, cihaz vahidindəki Requires= isə asılı xidməti interfeysin mövcudluğuna bağlayır ki, bu da yalnız şəbəkə hədəfini gözləməkdən güclüdür. Redaktədən sonra meneceri yenidən yükləyin və asılı xidməti yenidən başladın, sonra sıranın işlədiyini güman etmək əvəzinə onun jurnalını oxuyun. Klientin çıxışını StandardOutput=journal və ya log seçimi ilə jurnala göndərin, çünki heç kimin açmadığı fayla yazan nəzarətli klient heç başlamamış klientlə eyni görünür.
Sonra bir dəfə yenidən yükləyin və tunel cihazı göründükdən sonra vahidin aktiv olduğunu təsdiqləyin. Yalnız systemctl start ilə yoxlanmış düzəliş düzəltməli olduğu yükləmə sırasını sınamamışdır.