OpenVPN'in birden çok --up betiği uyarısı: yalnızca biri çalışır
İki up satırını yeniden sıralamak ikisinin de çalışmasını sağlamaz. OpenVPN her aşama için tek komut tutar, bu yüzden iki tanımı da bulun ve işe tek bir giriş noktası verin.
Birden çok betik uyarısı zamanlama şikâyeti gibi kulağa gelir, bu yüzden bariz düzeltme kaybolana kadar satırları yeniden sıralamaktır. Ama bu bir zamanlama şikâyeti değildir. Sonraki bir --up tanımı, o aşama için zaten saklanan komutu değiştirir ve ayrıştırıcı bunu söyler; yani iki betiğinizden tam olarak biri hiç çalışmıştır. Diğeri onun arkasında sırada değil; o gitmiş.
Bu yüzden uyarı ölümcül olmasa da dikkate değer: öngördüğü şey, sessizce olmayı bırakan bir DNS güncellemesi ya da yol değişikliğidir.
Uyarı sıralamayla ilgili değil
OpenVPN up aşaması için tek bir kullanıcı betiği komutu saklar. Ayrıştırıcı başka bir tanımla karşılaştığında, profilden, dahil edilen bir dosyadan ya da komut satırından, zaten tuttuğunu değiştirir ve uyarıyı yayınlar. Hiçbir şey birleştirilmez, hiçbir şey iki kez çalışmaz ve sıralama diye bir soru yoktur. Hayatta kalan komut ayrıştırıcının en son gördüğüdür, bu yüzden bir satırı taşımak kazananı değiştirebilirken diğer betik ölü kalır.
Aynı örüntü diğer betik aşamaları için de geçerlidir: her birine bir komut. İki işin de olması gerekiyorsa, listeye benzeyen iki direktif değil, tek bir giriş noktasına ihtiyaçları vardır.
İki tanımı gerçek başlatmada bulun
Düzenlediğiniz profilden değil, daemonun gerçekte aldığı şeyden başlayın. ps -ef ve birimin ExecStart komut satırını gösterir; buna bir konteyner giriş noktasından ya da bir sarmalayıcıdan --up eklenmiş olabilir; bir dağıtımın init dosyası da aynısını yapabilir. systemctl cat openvpn-server@server hizmetin kendisinin ne kattığını ortaya çıkarır ve yapılandırma dizininde özyinelemeli bir grep dosya düzeyindeki tanımları bulur. Yinelenenler genellikle farklı katmanlardan gelir ve tek bir dosyayı düzenlemenin hiçbir şeyi değiştirmemesinin nedeni tam da budur.
Bir betiği başka bir dizine kopyalamak ya da adını değiştirmek de bir direktifi kaldırmaz. Ayrıştırıcı dosyaları değil, tanımları sayar.
İşi tek bir hook sahiplensin
Kalıcı çözüm, iki eylemi bilinçli bir sırayla yürüten tek bir dağıtıcıdır. set -eu içeren kısa bir shell betiği, gereken entegrasyonu ve ardından yerel eylemi çağırır ve argüman sınırları yaşasın diye "$@" aktarır; böylece davranış denetlenebilir tek bir yerde kalır. Argümanları aktarmak onları yalnızca korur; iki yardımcının aynı arayüzü beklediğini kanıtlamaz, bu yüzden her birinin sözleşmesini okuyun. Bir hatanın ne yapması gerektiğine ve kısmi değişikliklerin geri alınması gerekip gerekmediğine karar verin.
Başlatıcı desteklenen bir uzantı hook'u sunuyorsa, elle kurulmuş zincir yerine onu tercih edin. Bir konteyner imajı ya da satıcı paketi genellikle ek iş için belgelenmiş bir yere sahiptir ve bunu kullanmak bir yükseltmenin dağıtıcınızın üzerine yazmasını önler.
Temizlik ilgili down aşamasına aittir. DNS'i yeniden yazan ya da yollar ekleyen bir up eylemi belgelenmiş bir geri alım gerektirir ve yalnızca başlatmayı ele alan bir dağıtıcı tasarımın yarısıdır.
Yalnızca sessizliği değil, entegrasyonu doğrulayın
Yinelenen uyarıyı kaldırmak kolay kısımdır; entegrasyon yine de çalışmalıdır. Bağlandıktan sonra çözümleyici durumunu resolvectl status ile ya da /etc/resolv.conf okuyarak denetleyin ve yolları ip route ile doğrulayın. Sonra bağlantıyı kesip yeniden bağlanın, çünkü aceleyle zincirlenmiş bir hook önceki oturumdan bir şey bırakır. journalctl -u openvpn-server@server -b dağıtıcınızın çalışıp çalışmadığını ve ne yazdırdığını gösterir.
Hook'un ayrıcalıklarını ait oldukları yerde tutun. script-security değerini yükseltmek ya da daemonu daha fazla hakla çalıştırmak, değiştirilmiş bir hook için çözüm değildir; her gelecek betiğin, bir saldırganın adlandıracağı betik de dahil, neler yapabileceğini genişletir.
Düzeltmenin gerçek olduğunun işareti günlükteki sessizlik değildir. DNS yanıtı, yol girdisi ve temizliğin iki yeniden bağlantıdan sonra doğru çalışmasıdır.