- Penjelasan artikel tentang bagaimana Linux melakukan network address translation (NAT) untuk perintah ping yang menggunakan Internet Control Message Protocol (ICMP)
- Penulis menelusuri kode jaringan Linux untuk memahami cara kerja NAT pada paket ICMP, karena paket ICMP tidak memiliki field port
- Penulis menyiapkan eksperimen yang menggunakan network namespace untuk mensimulasikan beberapa perangkat pada satu mesin Linux, lalu memakai perintah ping untuk menguji proses NAT
- Eksperimen tersebut mencakup pembuatan dua klien yang terhubung ke bridge, koneksi ke kotak NAT dan server, serta konfigurasi routing dan NAT
- Penulis menangkap paket ICMP di network namespace klien dan server lalu menganalisis data paketnya
- Penulis menemukan bahwa setiap klien memiliki field "id" yang berbeda, sehingga kotak NAT dapat membedakan paket respons yang harus dikirim ke masing-masing klien
- Penulis menelusuri source code Linux dan RFC 792 yang mendefinisikan protokol ICMP untuk memahami bagaimana ID dipilih
- Penulis menemukan bahwa perintah ping memilih identifier secara acak; jika dua proses ping dari host yang berbeda memilih ID yang sama, kernel Linux akan memilih port kosong secara acak, dan port ini digunakan sebagai ID pada paket ICMP
- Penulis menggunakan alat bernama bpftrace untuk melacak fungsi kernel dan memverifikasi pemahamannya terhadap kode netfilter
- Kesimpulan artikel ini adalah Linux melakukan NAT pada ping dengan membuat koneksi untuk setiap klien, menulis ulang alamat IP sumber dan/atau field ICMP id pada paket keluar, lalu membalikkan perubahan tersebut pada paket respons
- Artikel ini menyediakan penjelasan proses yang rinci langkah demi langkah agar mudah diikuti oleh software engineer tingkat pemula dengan pengetahuan teknis dasar
1 komentar
Komentar Hacker News