Bir değişiklik etkili olmadığında rota önbelleğini boşaltmak ilk içgüdüdür ve modern Linux'ta bu boşa emektir: genel IPv4 rota önbelleği yıllar önce kaldırıldı, bu yüzden ip route show cache hiçbir şey yazdırmaz ve temizlenecek bir şey yoktur. Sizi kandıran durum bir kat yukarıda yaşar: bir socket, bir NAT eşlemesi, bir çözümleyici veya eski profili yeniden uygulayan bir ağ yöneticisinde. Üç soru bu durumları ayırır: yanlış yol yeni bir akıştan mı yoksa eski bir bağlantıdan mı geliyor, platformunuz rotaları önbellekliyor mu, ve durum yönlendirmede mi yoksa onun üstünde mi. Bir arayüzü sıfırlamadan önce bunları yanıtlayın.

Kontrol bir: eski yol yeni bir akıştan mı geliyor?

Kurulmuş bir bağlantı oluşturulduğu rotayı korur. Bu yüzden tünel üzerinden bir SSH oturumu yönlendirme tablosundaki değişikliği atlatırken yeni bir oturum hemen yeni yolu alır, ve bu yüzden «değişiklik hiçbir şey yapmadı» çoğu zaman «eski socket hâlâ onu tutuyor» anlamına gelir. Yeni bir süreçle test edin, zaten açık olan pencereyle değil.

ss -tnp | head
ip route get 1.1.1.1
curl -m 5 -sS -o /dev/null -w '%{remote_ip}
' https://example.com

Son komut yeni bağlantının gerçekten ulaştığı adresi yazdırır ve durum penceresine güvenmeden gerçek yolu görmenin en ucuz yolu budur. Bunu ad alanının veya arayüzün kullanması gereken kaynak adresle karşılaştırın.

Yeni bir akış doğru yolu alıyor ve eskisi toparlanmıyorsa yönlendirmeye bakmayı bırakın. Rota doğruydu; oturum eskiydi.

Kontrol iki: platformunuz bir rota önbelleği tutuyor mu?

Linux'ta yanıt hayır, çoğu kılavuzun kastettiği anlamda. Atılacak genel bir hedef önbelleği yok ve seçilen bir rotayı tutan socket düzeyindeki kayıt socket ile birlikte serbest bırakılır. ip-route kılavuzunun önbellek bölümü tarihsel davranışı anlatır, güncel bir çekirdekte boşaltabileceğiniz bir şeyi değil.

Diğer platformlar farklıdır ve öğütleri kopyalamak tam burada ters gider. Windows, netsh interface ip delete destinationcache ile temizleyebileceğiniz bir hedef önbelleği tutar. BSD ve macOS route -n get aracılığıyla hedef başına aramalar gösterir ve önbellekleri kendi takvimlerine göre sona erer. Bunlardan birinde çalışan bir komut Linux'ta hiçbir şey yapmaz, bu yüzden aynı düzeltme deneyenlerin yarısı için başarısız görünür.

NAT veya conntrack tablosu bir rota önbelleği değildir, aynı belirtiyi üretse de. Değişikliğinizden önce çevrilen bir akış çevirisini korur ve conntrack -L onu yönlendirme politikası ilerledikten çok sonra da gösterir. Bu eski bir durumdur, ancak rotaları temizlemek ona dokunmaz.

Kontrol üç: durum yönlendirmede mi, onun üstünde mi?

Başka bir şey okumadan önce mevcut aramayı okuyun: hedef için ip route get, ardından from ve kaynak adresle aynı komut, ardından ip rule show. Bu üçü amacınızla örtüşüyorsa yönlendirme düzeltilecek katman değildir ve eski gözlem başka bir yerden gelmiştir.

Üç olağan şüpheli yönlendirmenin üstünde oturur. Bir ağ yöneticisi rotayı sildikten saniyeler sonra kayıtlı bir profilden yeniden kurabilir, bu yüzden değişikliğiniz geri dönüyor gibi görünür; tabloyu yeniden düzenlemeden önce nmcli connection show --active ve birim durumunu kontrol edin. Çözümleyici önbelleği eski bir adres döndürür; bu, önbelleği atlayan bir araçla aynı adı sorgulayana kadar yönlendirme arızası gibi görünür. Bir uygulamanın bağlantı havuzu eski hedefe çalışan bir socket tutar ve çekirdekten asla yeni bir karar istemez.

Üç yanıt ne sonuç çıkarmanıza izin verir

Yanıtları bir araya getirin, onarım genellikle kendini söyler. Rota önbelleği olmayan bir platformda yeni bir akışın yanlış yolu alması politikanın gerçekten yanlış olduğu anlamına gelir, bu yüzden tünelin kurduğu kuralları ve tabloyu okuyun. Eski oturum takılırken yeni bir akışın doğru yolu alması sorunun uygulama veya socket olduğu anlamına gelir. Her iki durumda da doğru rotalarla bozuk bir gözlem, durumun yönlendirmenin üstünde olduğu anlamına gelir.

Genel yenilemeye karşı koyun. Ağ yığınını yeniden başlatmak veya varsayılan rotası tünel olan bir makinede her rotayı silmek, onu düzeltmek için kullandığınız bağlantıyı kesebilir ve hangi katmanın başarısız olduğunu söyleyecek kanıtı yok eder.

Gerçekten bir şeyi temizlemeniz gerekiyorsa tanıya uyan en küçük şeyi temizleyin: bir sürecin socketleri, bir conntrack kaydı, çözümleyici önbelleği. Sonra aynı yeni akış testini yineleyin ve neyin değiştiğini yazın.

Üç durumu notlarınızda ayrı tutun

Kayıtlı yapılandırma, mevcut arama ve gözlenen akış üç farklı olgudur ve bunları «önbellek» içinde birleştirmek arızayı yeniden üretmeyi zorlaştıran şeydir. Rotanın sahibi olan profili veya birimi, ip route get çıktısını ve gerçek bağlantının kaynağını ve hedefini yazın.

Yanlarına platformu ve istemci sürümünü yazın, çünkü Windows hedef önbelleğini temizleyen bir düzeltme Linux ana bilgisayarına uygulanabilir bir düzeltme değildir ve ikisi arasında kopyalanan bir yordam yanlış dersi öğretir. Sorunu başkasına devrettiğinizde o üç satır, tahmin etmek yerine başarısız durumu yeniden üretmesini sağlar.

İlgili makaleler