OpenVPN active (exited) mi diyor? Başlattığınız örneği bulun
active (exited) bir tünel değil, RemainAfterExit'in ayakta tuttuğu tek seferlik bir /bin/true görevidir. Örneği bulun, işaret ettiği dosyayı okuyun ve ardından günlüğünü okuyun.
Tüneli kontrol edersiniz, systemctl status openvpn çalıştırırsınız ve Main PID olmadan, boş bir süreç listesiyle active (exited) alırsınız. Doğal okuma hizmetin başlayıp öldüğüdür, bu yüzden unit'i açıp /bin/true bulur ve paketin bozuk olduğu sonucuna varırsınız. Debian paketlemesinde bu durum tasarlandığı gibi çalışan wrapper'dır ve tünel onun başlattığı instance unit'lerinden birinde yaşar. Toplu unit size hangi örneğin onu kurduğunu asla söylemez.
Bu unit'te active (exited) gerçekte ne anlama gelir
Paketlenmiş unit tek seferlik bir görevdir: ExecStart'ı /bin/true'dur ve bitmiş bir unit'i active (exited) olarak bildirilmiş tutan şey RemainAfterExit=yes'tir. O yönergeyi kaldırın, aynı başarılı /bin/true görevi inactive (dead) içinde biter; bu da insanların beklediği ve ters yönde yanlış okuduğu tam o durumdur. Komut yalnızca bir yer tutucudur ve unit başka unit'lerin yaptığı işi bildirir. Bu düzenlemede hiçbir şey bozuk değildir ve /bin/true'yu değiştirmek tüneli değil paketleme sözleşmesini değiştirir.
Wrapper devreder. Paket yapılandırmasının veya systemd oluşturucusunun sağladığı instance unit'lerini başlatır, bu yüzden boş bir süreç listesi tünel hakkında hiçbir şey kanıtlamaz. Hiçbir örnek seçilmediğinde wrapper yine başarılı olur ve yine hiçbir şey başlatmaz. Durum, wrapper'ın çalışıp çalışmadığını yanıtlar, tünelin var olup olmadığını değil.
Parantez içindeki sözcük değil, status çıktısının üç satırını okuyun. Loaded systemd'nin okuduğu unit dosyasını adlandırır, Active son başarılı çalıştırmanın zaman damgasını taşır ve eksik Main PID bitmiş tek seferlik bir göreve uyar. Bu üç satır, başlamadan bir saniye sonra çöken bir hizmetten bu wrapper'ı ayırmanın da yoludur.
Status'u yeniden okumadan önce unit'leri listeleyin
Ne çalıştığını sormadan önce systemd'ye neyin var olduğunu sorun. Hiçbir örnek oluşturulmadan bir şablon kurulu olabilir ve yalnızca oluşturulmuş bir unit tünel taşır. Yüklenen kümeyle başlayın:
systemctl list-units 'openvpn*'
Bu liste systemd'nin şu anda yüklediği şeydir ve tünel envanterine en yakın olanıdır. Kurulu unit dosyaları başka bir soruyu yanıtlar ve hiçbir şey oluşturulmadığında bile bu liste bir şablon gösterir:
systemctl list-unit-files 'openvpn*'
İki listeyi birlikte okuyun, çünkü ikincisindeki şablon ve birincisindeki örnek iki farklı yanıttır. Var olan bir şablon ile çalışan bir örnek aynı olgu değildir ve yalnızca ikincisi tünel anlamına gelir. Paket düzenleri dağıtımlar ve OpenVPN sürümleri arasında da farklıdır. Daha eski bir openvpn@ şablonu, ayrı client ve server çifti ve bir dağıtım wrapper'ı kendi paketlemelerinde meşru olabilir.
Bulduğunuz öğreticiye değil, kendi makinenize uyum sağlayın. Başkasının çıktısındaki örnek adı office olabilir, sizinki home veya work olabilir. Aktarılan yöntemdir, dize değil.
Örnek adından okuduğu dosyaya gidin
Upstream client şablonunda unit'in çalışma dizini /etc/openvpn/client'tir ve komutu oradan %i.conf alır, yani openvpn-client@office /etc/openvpn/client/office.conf okur. Bu eşlemeyi örneğe güvenmek yerine kurulu unit'te doğrulayın, çünkü elinizdeki şablon daha eski ya da dağıtım tarafından yeniden yazılmış olabilir:
systemctl cat [email protected]
O çıktının altında görünen drop-in'leri okuyun, çünkü .d/ altındaki bir dosya ExecStart'ı, çalışma dizinini veya yapılandırma yolunu değiştirebilir. office.ovpn olarak indirdiğiniz profil örneğin açtığı dosya değildir. Bu boşluk, bir hatanın hiç düzenlemediğiniz bir yolu adlandırmasının olağan nedenidir.
Profil içindeki göreli yollar bir sonraki tuzaktır. Ana dosyayı taşırken ca, cert ve key başvurularını göreli bırakmak, eksik dosya hatasını başka bir eksik dosya hatasıyla değiştirir. İkincisi, var olduğundan emin olduğunuz bir dosyayı işaret eder, bu yüzden profil dizini dosya adından daha önemlidir.
Onu başlatın ve ardından o örneğin günlüğünü okuyun
Az önce incelediğiniz örneği başlatın, çünkü toplu unit'in günlüğü tünelin hatalarını içermeyecektir. Ardından bu önyüklemenin günlüğünü okuyun ve bu sırayla yapılandırma hatası, dosya erişim hatası ve bağlantı hatası arayın, çünkü her biri başlatmanın farklı bir aşamasında başarısız olur.
sudo systemctl start [email protected]
journalctl -u [email protected] -b
Başlatmak ve etkinleştirmek ayrı kararlardır: start unit'i şimdi çalıştırır, enable bir sonraki önyüklemeyi düzenler ve enable --now ikisini tek adımda yapar. daemon-reload unit tanımlarını yeniden okur ve çalışan bir süreci yeniden başlatmaz ve düzenlenmiş bir profili uygulamaz. Profili değiştirdikten sonra örneği yeniden başlatın, çünkü dosyayı yeniden okuyan odur.
Aynı tünele ikinci bir yönetici koymayın
NetworkManager ve OpenVPN 3 oturum yöneticileri kendi bağlantı durumlarına sahiptir ve bunlardan birinin yanında bir systemd örneği aynı tünele iki sahip koyar. Belirti, yükselip saniyeler sonra değiştirilen bir tünel ya da durdurulmuş kalmayı reddeden bir tüneldir. Dağıtımınızın masaüstü için belgelediği yöneticiyi seçin ve bir sunucuda systemd'yi bilinçli olarak kullanın.
Bir örnek başlatmadan önce var olan bir sahip olup olmadığını kontrol edin. Bir masaüstü applet'i bağlantıyı gösterdiğinde, başlattığınız örnek onu tamamlamak yerine onunla yarışır. İkisini de çalıştırıp sıranın tutacağını ummak yerine kullanmadığınız yöneticiyi devre dışı bırakın. Bu çakışma, bir tünelin kurulup sonra hiç başlatmadığınız bir süreç tarafından yıkıldığı günlükleri de açıklar.
Özgün soruyu örnek adı, okuduğu dosya ve başarısız olan günlük satırıyla yanıtlayın. OpenVPN'in systemd entegrasyonu üzerine notları şablon düzenini ve örnek adının çözüldüğü dosya eşlemesini açıklar.