- Linux’un, İnternet Kontrol Mesajı Protokolü’nü (ICMP) kullanan
ping komutu için Ağ Adresi Çevirisi’ni (NAT) nasıl gerçekleştirdiğini açıklayan bir yazı
- Yazar, ICMP paketleri için NAT’ın nasıl çalıştığını anlamak amacıyla Linux ağ kodunu inceliyor; ICMP paketlerinde port alanı yok
- Yazar, tek bir Linux makinede birden fazla cihazı simüle etmek için ağ ad alanlarını kullanan bir deney düzeneği kuruyor ve NAT sürecini test etmek için
ping komutunu kullanıyor
- Deney; bir köprüye bağlı iki istemci oluşturmayı, NAT kutusu ile sunucunun bağlanmasını ve yönlendirme ile NAT yapılandırmasını içeriyor
- Yazar, istemci ve sunucu ağ ad alanlarında ICMP paketlerini yakalıyor ve paket verilerini analiz ediyor
- Yazar, her istemcinin farklı bir "id" alanına sahip olduğunu ve NAT kutusunun bu sayede her istemciye iletilecek yanıt paketlerini ayırt edebildiğini keşfediyor
- Yazar, ID’nin nasıl seçildiğini anlamak için Linux kaynak kodunu ve ICMP protokolünü tanımlayan RFC 792’yi inceliyor
- Yazar,
ping komutunun tanımlayıcıyı rastgele seçtiğini; farklı ana makinelerdeki iki ping süreci aynı ID’yi seçerse Linux çekirdeğinin rastgele boş bir port seçtiğini ve bu portun ICMP paketinin ID’si olarak kullanıldığını keşfediyor
- Yazar, çekirdek fonksiyonlarını izlemek ve netfilter koduna dair anlayışını doğrulamak için
bpftrace adlı aracı kullanıyor
- Yazının vardığı sonuç şu: Linux, her istemci için bir bağlantı oluşturarak
ping için NAT uygular; giden paketlerde kaynak IP adresini ve/veya ICMP id alanını yeniden yazar, ardından yanıt paketlerinde bu değişiklikleri tersine çevirir
- Yazı, temel teknik bilgiye sahip giriş seviyesindeki yazılım mühendislerinin de anlayabilmesi için sürece dair ayrıntılı adım adım açıklamalar sunuyor
1 yorum
Hacker News yorumu