İki sağlıklı VPN çıkışı, hâlihazırda çalışan uzun bir yükleme ve bir sonraki bağlantının diğer tüneli kullanması şartı. Bunu yerine getirmenin iki yolu vardır ve yalnızca biri canlı bir ağ geçidinde güvenlidir. Varsayılan rotayı değiştirmek, yüklemeye ait olanlar dahil her paketi taşır. Planlı bir boşaltma yeni bağlantılar için seçimi değiştirir ve izlenen akışları başladıkları yolda bırakır.

Bir çıkışı değiştirmenin iki yolu

Rota değişimi tek bir komuttur ve saniyeler içinde geri alınabilir, bu yüzden olaylar sırasında kullanılır. Aynı zamanda ayrım gözetmez: mevcut yüklemenin paketleri aniden başka bir tünelden çıkar, farklı bir genel kaynak adresi ve ayrı çeviri durumuyla.

Uzak uç akışları kaynak adresine göre izliyorsa, yükleme basitçe tanınmamaya başlayabilir. Boşaltma bunu, kararı bağlantı başına bir kez alıp saklayarak önler, böylece eski yükleme bitene kadar çıkışını korur. Egzersizin bütün değeri budur: uzak uç yorumlaması gereken hiçbir değişiklik görmez. Zaten bildiği bağlantıyla eşleşen paketleri almaya devam eder.

Bedeli karmaşıklıktır: iki yönlendirme tablosu, doğru kancada çalışan bir sınıflandırıcı ve kutudaki onları kullanan diğer her şeyle koordine edilmesi gereken işaretler.

Her çıkışa kendi tablosunu verin

Her çıkış için bir yönlendirme tablosu ve iki seçenek için farklı işaret değerleri veya bitler ayırın. Her tablonun yalnızca bir ada değil, rolüne uygun rotalara ihtiyacı vardır ve eksik durum için kasıtlı bir başarısızlık sonucuna ihtiyacı vardır. Ana tabloya sessizce düşen boş bir tablo — trafik kimsenin seçmediği bir çıkıştan böyle ayrılır.

ip rule add fwmark 0x10/0x10 table 101
ip rule add fwmark 0x20/0x20 table 102
ip route add default via 192.0.2.1 dev wg-a table 101
ip route add default via 198.51.100.1 dev wg-b table 102

Her tablonun sonuna bir blackhole rotası ekleyin, böylece eşleşme bulamayan bir arama seçmediğiniz bir varsayılana kaçmak yerine yüksek sesle başarısız olsun.

Bir kez seçin, ilk pakette

Bağlantı izleme var olduktan sonra ve önemli olan rota aramasından önce sınıflandırın. Yeni, sınıflandırılmamış bir LAN bağlantısı için çıkışı seçin ve bağlantı durumuna kaydedin. Sonraki paketlerde, kaydedilen değeri politika yönlendirmesinin okuduğu paket işaretine geri yükleyin.

İnce nokta, yeni kelimesinin ne anlama geldiğidir. Conntrack, yanıt görülmeden önceki erken paketler ve yeniden iletimler için hâlâ NEW bildirebilir, bu yüzden yalnızca bu duruma dayanan bir sınıflandırıcı zaten yaptığı bir seçimin üzerine yazabilir. Bir çıkış atamadan önce bağlantı için kayıtlı bir çıkış olmadığını doğrulayın.

nftables paket ve bağlantı işaretlerini ayrı tutar ve meta bilgi kılavuzu aralarındaki açık kopyalamayı belgeler. Bir bağlantı işareti kendiliğinden kuralınızın eşleştiği paket işareti olmaz ve bu, dikkatle yazılmış bir sınıflandırıcının hiçbir etkisi olmamasının en yaygın nedenidir.

Geri yüklemeyi kastettiğiniz yön ve trafikle sınırlayın. İnternet çıkışı işaretini dönen paketlere uygulamak yanıtları LAN yerine çıkışa doğru gönderebilir ve belirti güvenlik duvarı sorunu gibi görünen tek yönlü bir bağlantıdır. Bir güvenlik duvarı kuralına dokunmadan önce yanıt yolunu okuyun, çünkü paket yönlendiriliyor, yalnızca gönderene geri dönmüyor.

Bir boşaltmanın dört aşaması

  1. B'yi A'ya dokunmadan hazırlayın: yönlendirme, iletme, yetkilendirme, NAT ve dönüş yolu. Tablosunu ve seçim politikasını ağ geçidinin mevcut yapılandırma sahibi aracılığıyla kurun.

  2. Sınıflandırıcıyı değiştirin, yeni, sınıflandırılmamış bağlantılar B'yi seçsin ve kayıtlı seçimler korunsun. Atomik bir nftables işlemi, eski durumun temizlenmesi gereken bir pencereyi önler.

  3. A, akışları bitene kadar açık kalsın. Arayüzü, tablosu, uzak çıkışı ve NAT eşlemeleri hâlâ o akışların parçasıdır ve bir NAT kuralını düzenlemek zaten var olan bağlamaları yeniden kurmaz.

  4. Boşaltma koşulu sağlandığında A'yı devreden çıkarın; bu, tek bir sessiz aralıkla değil, bağlantı durumu ve uygulama davranışıyla değerlendirilir.

Bir boşaltmanın vaat edemeyeceği şey

Tarayıcı isteği yeni bir taşıma bağlantısı değildir; havuzlama istekleri eski bağlantı üzerinden göndermeye devam eder. Tersine, bir UDP akışı conntrack'ten yaşlanabilir ve sonraki paket yeniden sınıflandırılır. Boşaltma izlenen akışları izler, bir uygulamanın oturum fikrini değil.

A, akışları bitmeden başarısız olursa, saklanan işaret onları kurtarmaz. B üzerinden yeniden bağlanırlar ya da hiç bağlanmazlar. Planlı bir boşaltma, özgün yol sağlıklıyken süreklilik satın alır; bağımsız çıkışlar arasında durum çoğaltması değildir.

Her iki yarıyı da doğrulayın

Değişiklikten önce uzun ömürlü izinli bir bağlantı, sonrasında ise gerçekten yeni bir bağlantı başlatın. Her birinin hangi tüneli kullandığını ve uzak ucun hangi genel kaynak adresini gördüğünü doğrulayın, ardından dönüş trafiğinin geri geldiğini kontrol edin.

Yeni seçimin görünmesi için conntrack tablosunu boşaltmayın. Bu, boşaltmanın koruması gereken durumu tam olarak yok eder ve kontrollü bir geçişi, temiz görünen bir testle kesintiye dönüştürür.

İlgili makaleler