persist-tun ve persist-key OpenVPN'de gerçekte neyi atlatır
Her iki seçenek de canlı bir süreç içindeki yumuşak yeniden başlatmayı kapsar. Durdurma sonrası arayüzü korumazlar ve trafik engelleme politikası değillerdir.
Hizmeti durdurmak, persist-tun ayarlı olsa bile arayüzü kaldırır. Bu, seçeneğin belgelendiği gibi çalışmasıdır, bir arıza değil. Seçenek, çalışan bir süreç içindeki tek bir yeniden başlatma yolunu tanımlar ve systemctl stop o yol değildir.
İki adı birlikte okuyun, tasarım netleşir. Biri bir tanımlayıcı tutar, diğeri anahtar malzemesini tutar ve ikisi de ayrıcalıklar bırakıldıktan sonra olanlar yüzünden vardır.
İki kaynak ve ait oldukları yeniden başlatma
OpenVPN kendi yeniden başlatmasını iki olağan durumda bildirir. Açık bir SIGUSR1 bunu yapar ve ölü bir eşin tetiklediği ping-restart de aynısını yapar. İkisi de süreci canlı bırakır ve bağlantı kurulumunu yeniden çalıştırır, seçenekler asıl orada yerlerini kazanır.
| Event | TUN/TAP device | Key and auth files | Addresses and routes | up/down hooks |
|---|---|---|---|---|
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itself | survives only with persist-tun | survive only with persist-key | survive with the device, otherwise rebuilt | run again only when restart hooks are enabled |
Configuration reload, SIGHUP | recreated | re-read from disk | rebuilt once the device returns | run again |
| Service stop | lost | re-read at the next start | removed | run at the next start |
Bu iki seçeneğin değiştirdiği tek şey yumuşak yeniden başlatma satırıdır ve atladıkları iş yoğun bir bağlantıda pahalı kısımdır. Bir aygıtı yeniden açmak ona bağlı adresleri ve yolları yıkar ve bunları yeniden kurmak, yeniden başlatma başladığında yolda olan paketleri düşürebilir. Durdurma aynı nesneleri onları koruyacak hiçbir seçenek olmadan yok eder.
Bu seçenekler neden var
Sertleştirilmiş bir OpenVPN sunucusu genellikle root olarak başlar, anahtarlarını ve aygıtını açar, sonra ayrıcalıksız bir kullanıcıya iner. Bu inişten sonra bazı işlemler basitçe yok olur. 0600 kipindeki bir anahtar dosyasını okumak, bir ağ arayüzü oluşturmak veya yolları değiştirmek reddedilebilir.
persist seçenekleri olmadan, ping-restart tetiklemek için yeterince uzun süre sessiz kalan bir eş tam da bu işlemleri zorlardı. Yapılandırmada hiçbir şey değişmemiş olsa bile yeniden bağlanma başarısız olurdu. Süreç sebepsiz ölüyormuş gibi görünürdü ve günlük ağ hatası yerine izin hatası gösterirdi.
Onlarla, yumuşak yeniden başlatma ayrıcalıklı aşamanın zaten elde ettiğini yeniden kullanır. Sihir yoktur ve süreç hiçbir şeyi atlatmaz. Kaynak edinimi yalnızca ertelenir.
Sonuncuyu değil, ilk hatayı okuyun
Yeniden başlatma başarısız olduğunda, sonuncu yerine ilk hatayı okuyun. Korumalı bir anahtar, bir auth dosyası, bir arayüz ioctl'i ve bir dış kanca dört farklı kaynaktır. Birini tutmak diğerlerine erişim hakkında hiçbir şey söylemez. Bir güvenlik duvarı aracını çağıran kanca hâlâ o aracın talep ettiği ayrıcalıklara ihtiyaç duyar.
Kancaların kendi anahtarı vardır. OpenVPN kılavuzu persist seçeneklerini up-restart ile eşleştirir, bu da yeniden başlatmadan sonra up ve down betiklerinin yeniden çalışıp çalışmayacağına karar verir. Bu nedenle ayakta kalan bir arayüz, çözümleyici entegrasyonunuzun yenilenip yenilenmediği hakkında size hiçbir şey söylemez.
# which restart path just happened?
journalctl -u openvpn-client@office --since '10 min ago' | grep -E 'SIGUSR1|ping-restart|Restart pause|NOTE:'
# did the interface survive, and do its routes still exist?
ip -brief link show tun0
ip route show dev tun0
Bu komut çifti iki arıza kipini saniyeler içinde ayırır. Var olan ama yolları eksik bir arayüz kanca veya yol sorunudur. Kaybolan bir arayüz sürecin gerçekten sona erdiği anlamına gelir.
Korunan arayüz bir kill switch değildir
Gereksinim trafiğin tünelin dışına hiç çıkmamasıysa, korunan bir aygıt bunu sağlamaz. Diğer adres ailesi için yollar, ikinci varsayılan yol ve sürecin tamamen çıktığı durum seçeneğin kapsamı dışında kalır.
İki gereksinimi ayrı ayrı ele alın. Tünel nesnesini yeniden bağlanmalar arasında tutmak daemon için bir kolaylıktır. Tünel çökmüşken çıkışı engellemek kendi kuralları ve kendi testi olan bir güvenlik duvarı politikasıdır. İkisini karıştırmak, savunmacı görünen ve en iyi çaba yeniden bağlanma gibi davranan bir yapılandırma üretir.
Teşhis etmeden önce olayı adlandırın. Yumuşak yeniden başlatma, başarısız bir bağlantı denemesi ve hizmet durdurma üç davranışa sahip üç olaydır ve yalnızca birincisi bu seçeneklerin tanımladığı şeydir.