Kimse oturum açmamışken sunucuyu yeniden başlatın, sonra kontrol etmediğiniz bir ağdan bağlanın. Bu tek test kurtarmanın gerçek olup olmadığını yanıtlar, çünkü yalnızca biri elle bir komut çalıştırdıktan sonra çalışan bir tünel kurtarma değil, onarımdır. Kontrollerin çoğu çok erken durur: servis etkin görünür, arayüz yükselir ve sayfa yine de yüklenmez. Boşluk neredeyse her zaman tünelin çevresindeki parçaların kalıcılığındadır, tünel komutunun kendisinde değil.

Dört sahip, dört farklı test

Yeniden başlatmadan önce tüneli neyin geri getirmesi gerektiğini adlandırın. Çalıştırdığınız test ve uyguladığınız düzeltme ikisi de bu yanıta bağlıdır ve dört yaygın sahip vardır: VPN servisi için bir systemd unit, WireGuard arayüzü için bir wg-quick örnek unit, bir konteyner çalışma zamanı veya bir ağ yöneticisi profili. Sahibi adlandıramıyorsanız durun ve bulun, çünkü beklenen bir başlatma yolu olmadan yeniden başlatma testi yalnızca bir şey olduğunu söyler.

Her sahip yapılandırmasını farklı bir yerde tutar. systemd tarafından yönetilen bir OpenVPN sunucusu yapılandırmasını başlangıçta okur, yani önyükleme anında dosyada ne varsa o çalışır. wg-quick arayüzü adreslerini, rotalarını ve DNS'ini aynı dosyadan türetir, bu da bir kabuktan elle kaldırılan ve hiçbir zaman unit olarak etkinleştirilmeyen bir arayüzün geri dönmeyeceği anlamına gelir. Bir konteyner giriş noktasını geri getirir ama ana makinenin güvenlik duvarı değişikliklerini getirmez, bunlar konteynerin dışında yaşamıyorsa.

Önce temel durum, yoksa sonucun anlamı yok

Çalışırken çalışan durumu kaydedin: tüneldeki adresler, istemci alt ağı için rotalar, NAT veya iletme kuralları, dinleyen soket ve iletme sysctl'i. ip addr show wg0, ip route, nft list ruleset veya iptables-save, ss -lunp ve sysctl net.ipv4.ip_forward çoğu ana makinede yeterlidir.

Servisin çalışıp çalışmadığını değil, nasıl başlatılacak şekilde yapılandırıldığını kaydedin. systemctl is-enabled wg-quick@wg0 ve systemctl is-active wg-quick@wg0 farklı soruları yanıtlar ve önyüklemede önemli olan etkin durumdur, systemctl(1) içinde açıklandığı gibi. OpenVPN için ana makinenin hangi şablonu kullandığını kontrol edin, çünkü openvpn@server ve openvpn-server@server farklı varsayılanlara sahip farklı unit'lerdir.

Yeniden başlatmayı çalıştırın ve ilk hatayı okuyun

Seçtiğiniz bir pencerede bilerek yeniden başlatın, bir konsol veya bant dışı yol açıkken. Son durumu değil olayların sırasını izleyin: ana makine erişilebilir, unit etkinleştirildi, arayüz mevcut, rotalar kuruldu, güvenlik duvarı kuralları mevcut, dinleyici bağlandı, istemci kabul edildi. Gerçekleşmeyen ilk adım bulgudur; ondan sonraki her şey gürültüdür.

Tünel kullanılamazken servis etkin olabilir ve bu en yaygın yanlış geçiştir. Unit yalnızca network.target yerine network-online.target beklerse, başlatma ağ çevrimiçi olmadan önce tamamlanabilir. Sertifikalar, anahtarlar veya bir CRL gibi başvurulan dosyalar o anda okunamaz olabilir çünkü bir bağlama veya gizli yol henüz hazır değildir. İki sorundan hiçbiri, unit'in günlüğünü okuyana kadar systemctl status içinde görünmez.

Ana makinenin dışından test edin. Aynı LAN'daki bir istemci, hiçbir uzak istemcinin asla kullanmayacağı bir rotadan başarılı olabilir ve makineye SSH oturumu tünel hakkında hiçbir şey kanıtlamaz. Bağlanın, dahili bir adı çözün, özel kaynağa ulaşın, sonra iptal durumunun ve anahtarların hâlâ geçerli olduğunu doğrulamak için bir kez daha bağlanın.

Düzeltmenizi belirleyen üç koşul

Tünel geri dönerse ama istemciler hiçbir yere ulaşamazsa, hata yönlendirme veya NAT kalıcılığındadır. İstemciler el sıkışmayı bile tamamlayamazsa, hata arayüzde veya kimlik doğrulama malzemesindedir. Servis hiç başlamazsa, hata unit dosyasında veya bağımlılıklarındadır. Bu üç dal farklı düzeltmelere götürür, bu yüzden temel durum olmadan kör bir yeniden başlatma kazandırdığından çok zaman harcar.

Düzeltmeyi ayarın sahiplenildiği yerde yapın. İletmeyi bir sysctl drop-in'e, NAT kurallarını önyüklemede yüklenen kural kümesine koyun, unit'i başlatmak yerine etkinleştirin ve gizli değerleri unit başlamadan önce var olan bir yolda tutun. Unit'e bir uyku eklemek bir bağımlılığı bildirmek yerine gizler.

Sonucu runbook'a kaydedin

Kendi kendine neyin geri döndüğünü, neyi başlatmak zorunda kaldığınızı ve boşluğun ne kadar sürdüğünü yazın. Doğrulamak için kullandığınız tam komutları ekleyin, böylece sonraki kişi yenisini icat etmek yerine testi tekrarlar. Herhangi bir adım elle komut gerektirdiyse, o komut yapılandırmaya aittir, runbook'a kalıcı bir adım olarak değil.

Sonra bir sonraki testi ana makinenin ağ yığınındaki bir sonraki değişiklikten sonraya planlayın, altı ay sonraki bir takvim tarihine değil. Korunduğunuz hata modu kalıcı gibi hissettiren geçici bir komuttur ve bunlar tam olarak biri güvenlik duvarı kurallarını düzenlediğinde veya bir servisi yeni bir unit'e taşıdığında ortaya çıkar.

İlgili makaleler