Bir VPN istemci havuzuna kendi genel adresini vermesi gereken NAT kuralı sıfır pakette duruyor, aynı havuz yanlış kaynakla çıkmaya devam ediyor. Kural genellikle adreste yanılmaz; arayüzde yanılır. -o eth0:0 var olmayan bir aygıta işaret eder, çünkü eth0:0 bir adrese iliştirilmiş etikettir, o adresin aygıtı ise hâlâ eth0'dır. Sayaçlara bakmak bunu doğrulamanın en hızlı yoludur ve düzeltme araştırmanın ima ettiğinden küçüktür.

Çekirdeğin aygıtı nasıl adlandırdığını denetleyin

Bir şeyi değiştirmeden önce iki görünümü ayrı ayrı okuyun:

ip link show
ip address show dev eth0
ip route get 203.0.113.20

Bağlantı listesi arayüzleri gösterir. Adres listesi etiketi taşıyan ikinci bir IPv4 adresini gösterebilir eth0:0, ve o adresin aygıtı hâlâ eth0'dır. iproute2 adres elkitabı etiketi adresin adı olarak ele alır, ikinci bir bağlantı olarak değil, ve bütün sorun tam da bu ayrım üzerinde durur.

Tarih karışıklığı açıklar. Eski ifconfig eth0:0 sözdizimi gerçekten yeni bir arayüz gibi görünüyordu ve o dönemin betikleri hâlâ birine atıf yapar. Güncel bir sistemde takma ad, bir adres üzerindeki etikettir ve yönlendirme ya da netfilter yolunda hiçbir şey onu ayrı bir çıkış noktası olarak ele almaz.

Kuralın gerçekte neyle eşleştiğini denetleyin

Sayaçları belleğinizden değil, kural listesiyle birlikte okuyun:

iptables -t nat -L POSTROUTING -v -n --line-numbers

Eşleşen trafik akarken paket sayacı sıfırda kalan bir kural değerlendirilmiyor demektir ve çıkış arayüzü koşulunun şunu adlandırması eth0:0 yaygın bir nedendir. Yönlendirmenin seçtiği çıkış aygıtı eth0, bu yüzden başka bir ad arayan koşul, çekirdek hangi kaynak adresi seçerse seçsin asla doğru olmaz.

Koşulu gerçek aygıta değiştirin ve etiketi dışarıda bırakın. O aygıtı paylaşan iki istemci havuzunu ayırmanız gerekiyorsa, bunları kaynak önekiyle ayırın, var olamayacak bir arayüz adıyla değil. Çakışmayan -s -s eşleşmeleri olan iki kural okunabilir ve sınanabilir; uydurma aygıtlı tek bir kural ikisi de değildir. Her kurala havuzu adlandıran bir yorum ekleyin, çünkü altı ay sonra önek tek başına kimseye orada neden durduğunu söylemez.

Aygıtı seçen yolu denetleyin

Postrouting NAT, yolun çıkış arayüzünü zaten seçmesinden sonra çalışır, bu nedenle kuraldaki arayüz yolun seçtiği arayüz olmalıdır. Çekirdeğe doğrudan şununla sorun ip route get ile temsili bir istemci adresi için ve bildirdiği aygıtı da kaynağı da okuyun.

Yanıt eth0 adını veriyorsa, kuralın arayüz kısmı çözülmüştür. Tünel aygıtı adını veriyorsa, paket düzenlediğiniz kurala hiç ulaşmaz ve arama yönlendirme tablosuna ve önceliklerine kayar. Paket başka yerden çıktığı için hiç eşleşmeyen bir kural, sayaç çıktısında yanlış yazılmış aygıtlı bir kuralla aynı görünür. Bir şeyi düzenlemeden önce iki durumdan hangisine sahip olduğunuzu doğrulayın, çünkü ikincisi metin değil yönlendirme değişikliği gerektirir.

Çevrilen kaynağı bilinçli olarak seçin

Aygıt doğru olduğunda, kaynak adresi ayrı bir karardır. Bu yalnızca örnek bir IPv4 havuzu ve örnek bir adrestir:

iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
  -j SNAT --to-source 203.0.113.20

Adresi --to-source içine yazmak, kimsenin onu size geri yönlendirmesini sağlamaz. Yukarı akış sağlayıcısı veya adres sahibi, o adres için yanıtları bu ana bilgisayara teslim etmelidir ve adres, kullanma yetkiniz olan bir adres olmalıdır. Değilse, kural eşleşir ve çevirir, yanıtlar yine başka yere gider.

Kaynak adresini değiştirmek, üst bağlantıyı değiştirmekle aynı şey değildir. Gerçek gereksinim farklı bir fiziksel yolsa, yönlendirme politikası önce o yolu seçmelidir; sonra SNAT, politikanın seçtiği aygıtta kaynağı yeniden yazar. Daha fazla etiket eth0 eklemek ne yolu ne de yetkiyi verir.

Yeni açtığınız bir bağlantıyla doğrulayın

Var olan bir bağlantıyı yeniden kullanmak yerine yeni bir istemci bağlantısı açın. Bağlantı izleme, akış başladığında kaydettiği çeviriyi korur, bu yüzden eski bir oturum önceki kaynak adresini kullanmaya devam edip doğru yeni bir kuralı bozuk gösterebilir. Sayacın arttığını görün, sonra çevrilen kaynağı kabloda veya uzak uçta gözlemleyin.

Tek bir arayüzü paylaşan birkaç havuz için her birine açık bir kaynak eşleşmesi ve kendi çeviri adresini verin, bunları güvenlik duvarının yönetilen yapılandırmasında tutun ve hangi sırayla değerlendirildiklerini not edin. Sonra neyi doğruladığınızı yazın: aygıtı ip route get komutundan, hareket eden sayacı ve uzak tarafın gördüğü kaynağı. Bu kayıt, etiket karışıklığını yinelemeden bir sonraki rapora yanıt verir.

İlgili makaleler