Qarmaq skriptinin tunelin o biri tərəfinə çata bilməsi üç şərtdən asılıdır: hansı hadisəyə bağlandığı, skript işləyərkən OpenVPN-in hələ öz başlatma ardıcıllığında olub-olmadığı və işin o ardıcıllıqdan ayrılıb-ayrılmadığı. Əksər skriptlər üçüncüdə uğursuz olur. Yuxu əlavə etmək həyat dövrü probleminə vaxt problemi kimi baxır və yalnız çaşdırmağa çatacaq qədər işləyir.

Əvvəlcə hadisəni, sonra işi təxirə salma mexanizmini, sonra təxirə salınmış işin işlədiyi yeri qərar verin. Bu üç qərar bir-birindən asılı deyil və onları qarışdırmaq iki sətirlik qarmağın bir günortaya çevrilməsinin yoludur.

Qarmaq niyə özünü gözləyən tuneli gözləyir

OpenVPN qarmaqlarını paketləri hərəkət etdirən eyni prosesin içində sinxron çağırır. up tun və ya tap cihazı yarandıqdan sonra, hər hansı marşrut əlavə olunmazdan əvvəl işə düşür, route-up isə marşrutlardan sonra; heç bir an qarşı tərəfin cavab verəcəyinə zəmanət vermir. Hər iki qarmaqdan bir skript hələ işləyərkən demon yönləndirmir, ona görə tuneldən trafik keçməsini gözləyən əmr özünü gözləyən tuneli gözləyir. Bu dairəvi gözləmə əl ilə işə salmanın keçməsinin və qarmağın vaxt aşımına düşməsinin səbəbidir.

Aşkar yamaq, yəni bir neçə saniyə yuxu, bəzən işləyir, çünki uzaq tərəf özü ayağa qalxdı, yuxu heç nə düzəltmədiyi üçün deyil. Hazırlığı yoxlayan köməkçi fərqli cavabdır: qarmaq qayıdır, yönləndirmə başlayır və köməkçi lazım olanı həqiqətən mövcud olduqda alır.

Qarmağı rahatlığa görə deyil, hadisəyə görə seçin

Yalnız cihaza ehtiyacı olan işə up, marşruta ehtiyacı olan işə route-up bağlayın və client-connect ilə client-disconnect-i server tərəfində hər müştəri üzrə tapşırıqlar üçün saxlayın. Bağlantı kəsiləndə təmizləmə iki dəfə işləməyə dözməlidir, çünki davamlı interfeys üzərindən yenidən qoşulma tam yenidən başlatmanın ardıcıllığını izləmir. Serverdə client-connect demon başlayanda deyil, müştəri autentifikasiya etdikdə işə düşür və məntiqi ora köçürməzdən əvvəl bunu təsdiqləməyə dəyər. Əgər iş tək bağlantıya deyil, xidmətin həyat dövrünə aiddirsə, systemd vahidi hər hansı qarmaqdan daha yaxşı yerdir.

Qarmaq əmrləri demon tərəfindən birbaşa, aralıq qabıq olmadan icra olunur, ona görə up sətrindəki ifconfig_remote hərfi mətn kimi gəlir. Əmri açıq bir qabığa bükün və ya məntiqi mühiti oxuyan skriptdə saxlayın. ipchange öz arqumentlərini əlavə edən bir direktivdir: ünvanı və portu əmrə verir, ona görə heç biri üçün yazılmış skript iki gözlənilməz arqument görür.

İşi ayırmağın üç yolu

Birinci seçim köməkçini qarmağın içindən arxa plana keçirməkdir: onu setsid və ya systemd-run --scope ilə başladın, miras alınan deskriptorları bağlayın və dərhal sıfırla çıxın. İkincisi, qarmağın kiçik bir vəziyyət faylı yazması və systemd taymerinin və ya yol vahidinin ona görə hərəkət etməsidir; bu, qarmağı sadə saxlayır və yenidən cəhd siyasətini logların olduğu yerə qoyur. Üçüncüsü qarmağı tamamilə atmaq və işi VPN xidmətindən sonra sıralanmış vahidə köçürməkdir; iş heç də hər bağlantıya aid deyilsə, doğru cavab budur. Üçü də bir qaydanı bölüşür: qarmaq tunelə ehtiyac duymazdan əvvəl qayıtmalıdır.

Hansını seçsəniz də, köməkçini idempotent və müşahidə oluna bilən edin. Üst-üstə düşən iki çağırış eyni dönməz əməliyyatı iki dəfə icra etməməlidir və uğursuz olan köməkçi insanın oxuya biləcəyi bir şey qoymalıdır.

Sandbox nasazlıqlarını həyat dövrü nasazlıqlarından ayırın

Skript root promptundan işləyib xidmət kimi uğursuz olduqda, səbəb adətən şəbəkə deyil, sandbox olur. Məhdudlaşdırıcı ProtectHome, yalnız oxuna bilən ProtectSystem və ya mövcud olmayan iş qovluğu skripti və ya onun məlumatlarını əlçatmaz edə bilər və SELinux hostunda faylın icraya icazə verən konteksti də olmalıdır. Vahidi systemctl cat openvpn-server@server ilə, jurnalı journalctl -u openvpn-server@server -n 80 ilə oxuyun, sonra əlaqə vaxt aşımı deyil, icazə və ya kontekst xətası axtarın. Sandbox-u söndürmək ilk deyil, son addım olmalıdır.

Həyat dövrü nasazlığı başqa cür görünür: qarmaq başlayır, köməkçi işləyir və soket sadəcə hələ orada deyil. Qarmağın özündən vaxt damğalı sətir yazın, bağlantını kəsin və yenidən qoşun, hadisələri sıra ilə oxuyun. Köməkçi həqiqətən tunelə ehtiyac duyanda, sabit müddət yatmaq əvəzinə hazırlığı yoxlamasına icazə verin.

Üç sahə növbəti hesabatı faydalı edir: hansı qarmaq işlədi, hansı hesabdan istifadə etdi və harada dayandı. Onlar olmadan hər sonrakı araşdırma sıfırdan başlayır.

Əlaqəli məqalələr