FORWARD zincirine VPN trafiği için bir kural eklersiniz, isteği aynı Linux makinesinden çalıştırırsınız ve sayaç sıfırda kalır. Kural muhtemelen doğrudur. Paket o yolu hiç izlemedi, çünkü makinenin kendisinde oluşan bir isteği o makine iletmez. Paketin soketten kabloya kadar yaşamını izlemek bunun nedenini ve kuralın aslında nereye ait olduğunu açıklar.

Paketin nerede doğduğunu bulun

Netfilter'ın kanca sırası üç durumu ayırır ve bunlardan yalnızca biri FORWARD ile ilgilidir:

OriginPathHook that sees it
Local processOUTPUT then POSTROUTINGOUTPUT, POSTROUTING
Addressed to a local servicePREROUTING then INPUTPREROUTING, INPUT
Received for another hostPREROUTING, FORWARD, POSTROUTINGFORWARD

Yerel bir uygulama OUTPUT yolunda başlar, çünkü çekirdek paketin burada oluştuğunu ve asla iletim adayı olmadığını zaten belirlemiştir. Tünel oluşturmak bu sınıflandırmayı değiştirmez; tünel paketin çıkabileceği bir aygıttır, yerel çıktıyı geçişe dönüştüren bir aşama değildir.

İki paket, tek hikâye

Tünel ayağa kalktığında uygulamanın iç paketi ile şifrelenmiş dış paket farklı nesnelerdir. İç paket uygulamanın seçtiği hedefi ve yükü taşır. Dış paket şifreli metni karşı tarafın adresine ve bağlantı noktasına taşır ve fiziksel arabirimi gerçekte geçen odur.

Politikanız ikisinden biriyle ilgilidir ve yanlış olanı seçmek bir kuralın hiçbir şey yapmıyor gibi görünmesinin yaygın bir nedenidir. Karşı tarafın dış adresiyle eşleşen bir kural her tünel paketini aynı görür, içerideki uygulama ne yaparsa yapsın. İç hedefle eşleşen bir kural ilgilendiğiniz trafiği görür ve yalnızca o paket kuralı yerleştirdiğiniz kancaya ulaşırsa devreye girer.

Ad alanları sınırı kaydırır

Bir konteyner ilkeyi değiştirmeden bunu zorlaştırır. Uygulamanın isteği konteynerin ağ ad alanı içindeki yerel çıktıdır. Ana makine bu trafiği sanal bir Ethernet arabiriminde alır ve iletebilir, bu yüzden isteği oluşturan süreç ana makinenin OUTPUT zincirine hiç dokunmamış olsa da ana makinedeki FORWARD kuralı anlamlı olabilir.

Bir kanca seçmeden önce kural kümesinin ve tünelin gerçekte nerede yaşadığını belirleyin. Konteyner içindeki tünel, konteynerin onun üzerinden yönlendirildiği ana makinedeki tünel ve ayrı bir ad alanındaki tünel üç farklı topolojidir ve üç farklı kural yerleşimi vardır. Kuralları aygıta sahip olan ad alanının içinde okuyun, yalnızca varsayılanda değil.

Gerçekten bir işarete ihtiyacınız var mı diye sorun

Amaç bir hedef önekini tünelden geçirmekse, o önek için bir yol yeterli olabilir. Önce geçerli yolları denetleyin, sunucunun ittiği her şey dahil: yönlendirilmiş varsayılan yol, aklınızdaki dar politikadan çok daha fazla trafiği VPN üzerinden gönderir ve ne kadar işaretleme yaparsanız yapın sonuç niyetle örtüşmez.

Sınıflandırma, kararın bir yolun ifade edemeyeceği bir şeye bağlı olduğu durumlarda gerekir; kaynak, kullanıcı veya süreç gibi. Alınan trafik için PREROUTING'de işaretleme çalışır. Yerel trafik için işaretleme, işaret konduktan sonra yeni bir yol araması başlatabilen çıkış aşamasında olmalıdır. nftables'ta bu, çıkış kancasındaki route türünde bir zincirdir; sıradan bir çıkış filtre zinciri değeri yerleştirir ve yolu değiştirmeden bırakır.

iptables'ta eşdeğeri mangle OUTPUT düzeninde yaşar ve aynı koşul geçerlidir: yönlendirme kararı işaret var olduktan sonra yeniden gözden geçirilmelidir. Ardından bir politika kuralı işareti tüketmeli ve kullanılabilir bir yol içeren bir tabloya işaret etmelidir. conntrack işareti koymak üçüncü, ayrı bir işlemdir; akışa bir değer kaydeder ve bu değeri yönlendirmenin okuyabilmesi için geçerli paketin üzerine kendiliğinden koymaz.

Aramayı ve sayacı birlikte doğrulayın

nft list ruleset
ip route get 198.51.100.25
ip route get 198.51.100.25 mark 0x1

Adres ve işaret örnektir ve iki yol sorgusu farklı soruları yanıtlar. İkincisi paket o işareti taşısaydı çekirdeğin ne yapacağını sorar; kural kümenizin bir işaret atadığını göstermez. Bunu bir varsayım testi olarak ele alın, politikanın çalıştığının kanıtı olarak değil.

Sonra zararsız bir istek çalıştırın ve iki şeyi aynı anda izleyin: seçtiğiniz kancadaki sayaç ve paketin gerçekte aldığı çıkış. Sayaç artıyor ve paket başka bir yerden çıkıyorsa işaret veya tablo yanlıştır. İkisi de artmıyorsa paket o kancaya hiç ulaşmıyordur ve sıradaki soru ad alanı veya yoldur.

Son olarak testi mekanizmanın ifade edebildiğiyle sınırlayın. Tek bir adres için tek bir yol, adresleri değişen bir hizmet için kalıcı bir politika hâline gelmez. Önce paket kapsamına karar verin, sonra yönlendirme ve işaretleme tasarımının yeniden bağlanma sonrasında bu kapsamı koruyup koruyamadığını denetleyin.

İlgili makaleler