WireGuard PersistentKeepalive: NAT eşlemesini canlı tutun
Ters bağlantı yalnızca eş trafik gönderdikten hemen sonra çalışıyorsa eşlemenin süresi doluyor. keepalive'ı yönlendiricinin arkasında ayarlayın ve ardından gerçek zaman aşımını okuyun.
Ev kutusu tüneli açar ve bulut sunucusuna sorunsuz ulaşır. Bulut sunucusu, ev kutusu en son bir şey gönderdikten sonra bir veya iki dakika boyunca ev uygulamasına ulaşabilir, sonra durur. WireGuard günlüğünde hiçbir şey görünmez, hiçbir el sıkışma hatası bildirilmez ve tüneli yeniden başlatmak bunu kısa süreliğine düzeltir. Bu desen, bozuk bir tünel değil, süresi dolan bir eşlemedir ve aşağıdaki kılavuz herhangi bir şey değiştirilmeden önce bunu doğrular.
Desenin boşta kalma süresi dolması olduğunu doğrulayın
Ayırt edici ayrıntı zamanlamadır. Ters bağlantı, ev eşi trafik gönderdikten hemen sonra çalışıp sessiz bir aralıktan sonra başarısız oluyorsa yol iyidir, ortadaki durum değildir. Hiç çalışmadıysa, trafikten hemen sonra bile, bu yanlış teşhistir.
sudo wg show wg0 latest-handshakes
sudo wg show wg0 endpoints
sudo wg show wg0 transfer
İlk ikisini ev eşi bir şey gönderdikten hemen sonra çalıştırın, beş dakika bekleyin ve yeniden çalıştırın. Yeni bir uç nokta olmadan programa göre yenilenen bir el sıkışma zaman damgası, tünelin canlı olduğunu söyler. Değişen şey, istenmeyen paketlerin dışarıdan gelebilme yeteneğidir; bu tünelin değil, yolun özelliğidir.
Sonra ters bir deneme yapın ve aktarım sayaçlarına bakın. Bulut tarafı bayt gönderip ev tarafı hiç almıyorsa, paket buluttan çıkmış ve yolda durum tutan bir cihazda ölmüştür. Aradığınız imza bu. Her iki sayaç da hareket ediyorsa tünel paketi teslim etmiş ve şüpheli uygulamadır.
keepalive'ı yönlendiricinin arkasındaki eşe koyun
Kalıcı keepalive'lar, programa göre küçük ve kimliği doğrulanmış bir paket göndererek bir NAT eşlemesini ve her türlü güvenlik duvarı durumunu canlı tutar. Ayar, yönlendiricinin arkasındaki makineye, onun uzak eş için girdisine aittir, çünkü durumu kendi giden paketiyle oluşturan taraf odur.
[Peer]
PublicKey = <cloud peer public key>
AllowedIPs = 10.71.0.1/32
PersistentKeepalive = 25
Bunu mevcut eş bölümüyle birleştirin. Aynı ortak anahtarla ikinci bir blok eklemek seçenek eklemenin geçerli bir yolu değildir ve wg-quick bunları sizin için birleştirmez. Belgelenen 25 saniye, yaygın UDP zaman aşımlarının altında kalmak için seçilmiş bir örnektir, özel bir anlamı olan bir değer değildir.
Aynı yönergeyi bulut tarafına koymak bu soruna yardımcı olmaz. O eşin paketleri zaten genel bir adresten geliyor, bu yüzden önemli yönde korunacak bir eşleme yok. Trafik ekler ve hiçbir şeyi değiştirmez.
Aralığı tahmin etmek yerine zamanlayıcıları okuyun
keepalive'lar çalışır çünkü durumun süresi dolmadan daha sık gelirler. Bu, zaman aşımını gerçekten ihtiyaç duyduğunuz sayı yapar ve Linux'ta çeviriyi yapan cihazda okunabilir:
sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sudo conntrack -L -p udp --dport 51820
İlk değer yalnızca tek yönde görülen bir UDP akışı için zaman aşımıdır, ikincisi ise yanıtlar gözlemlendikten sonra geçerlidir. İkisi de genellikle kısadır ve sessizleşen bir eşleme akışınıza uygulananı izler.
Bu sayıyı aralığınızla karşılaştırın. 30 saniyelik zaman aşımı altında 25 saniyelik keepalive çalışır; aynı keepalive 15 saniyelik zaman aşımı altında çalışmaz. Hiçbir yeniden deneme miktarı bu aritmetiği değiştirmez. Bazı tüketici yönlendiricileri ve mobil operatörler Linux varsayılanından çok daha kısa değerler kullanır, bu yüzden bir ağda çalışan yapılandırma diğerinde başarısız olur.
| Observation | What it means | Reasonable response |
|---|---|---|
| Works after traffic, dies when idle | Mapping or firewall state expiring | Lower the keepalive interval |
| Never works, even immediately | No return route, listener or firewall | Stop tuning keepalive |
| Works for hours, then dies once | Carrier-side translation or address change | Check the endpoint and logs together |
Dinleyiciyi ve güvenlik duvarını ayrı ayrı kontrol edin
Canlı bir eşleme gereklidir ve yeterli değildir. Ev kutusundaki uygulama doğru adreste dinlemelidir ve ana makinenin güvenlik duvarı paketi şifre çözüldükten sonra izin vermelidir.
sudo ss -lntup | grep 8080
sudo wg show wg0 allowed-ips
curl -sS -m 5 http://10.71.0.2:8080/health
Soket yalnızca fiziksel arabirimin adresine bağlıysa ve tünelin adresine bağlı değilse, tünel üzerinden gelen paketler güvenlik duvarına sorulmadan önce düşürülür. Bu arıza bulut tarafından bakıldığında bir eşleme sorunuyla aynı görünür ve her keepalive ayarından sağ çıkar.
İzin verilen listesinin kontrolü diğer yönde de aynı derecede önemlidir. Bulut eşi yanıt verecekse ev tünelinin adresini kaynak olarak izin vermelidir ve ev eşi bulut adresini hedef olarak izin vermelidir. keepalive paketleri kimliği doğrulanmış trafiktir ve aynı kuralları uygular, bu yüzden çalışıyor gibi görünen bir keepalive çalışmayan bir uygulamayla bir arada bulunabilir.
Değişikliği yayın ve sınırlarını bilin
Ayarı uygulayın, güncelleme yönteminiz buysa arabirimi yeniden başlatın, sonra hemen testi yerine boşta kalma testini tekrarlayın. Daha önce okuduğunuz zaman aşımından daha uzun bekleyin, ters bir istek yapın ve sayaçların iki uçta da hareket ettiğini doğrulayın.
Aralığı ve ölçülen zaman aşımını yanına not edin. Gelecekte yönlendirici yazılımındaki bir değişiklik veya mobil bağlantıya geçiş zaman aşımını değiştirebilir. Not, birinin değeri kopyalamak yerine yeniden türetmesini sağlayan şeydir. Tek satırdaki iki sayı daha sonra bütün bir soruşturmayı kurtarır.
Kalıcı keepalive'lar durumu korur. Bir bağlantı noktası açmazlar, izin verilen listeye girdi eklemezler ve bir dinleyicinin görünmesini sağlamazlar. Ters bağlantı hiç çalışmadığında hata bu üçünden birindedir ve WireGuard hızlı başlangıcı keepalive ayarını aynı dar terimlerle açıklar.