2 poin oleh GN⁺ 2023-09-11 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2023-09-11
Komentar Hacker News
  • Artikel tentang bagaimana Network Address Translation (NAT) di Linux menangani permintaan ping
  • Server mengirim paket permintaan ICMP echo tetap ke alamat tetap, yang memang tidak diharapkan untuk kembali
  • Saat klien mencoba terhubung, klien mengirim paket ICMP time exceeded ke server yang berisi paket tetap "asli" yang sebelumnya dikirim server
  • Klien bertindak seperti hop di internet untuk memberi tahu server bahwa paket aslinya gagal dikirim
  • Perangkat NAT meneruskan ICMP time exceeded ke server di balik NAT, termasuk seluruh header IP milik klien, sehingga server dapat mengetahui alamat IP klien
  • Saat ping dikirim dari jaringan lokal ke perangkat di internet, router yang melakukan NAT menulis ulang alamat sumber ping menjadi alamat IP publik dan menulis ulang field ID pada paket ICMP menjadi nilai unik
  • Router menggunakan nilai ID unik tersebut untuk mengirimkan respons ke perangkat yang benar di jaringan lokal
  • Postingan ini juga menyediakan referensi tentang alat bernama Netfilter yang digunakan untuk merusak paket, translasi alamat jaringan, dan pemfilteran paket
  • Artikel ini dipuji karena menggali sangat dalam hingga ke kode sumber di semua lapisan abstraksi
  • Karena ICMP tidak memiliki port, NAT tidak perlu menangani masalah mengembalikan ICMP echo reply ke port yang benar
  • Permintaan ICMP echo memiliki ID, yang pada dasarnya setara dengan nomor port sumber
  • Penanganan NAT untuk ICMP echo perlu memetakan ulang ID di kedua arah, mirip seperti UDP memetakan ulang port sumber
  • Beberapa pengguna menyampaikan keluhan tentang menautkan ke baris kode tertentu di postingan blog karena perubahan seiring waktu
  • Beberapa pengguna mengkritik NAT sebagai abstraksi yang buruk dan menyerukan berakhirnya IPv4
  • Ada spekulasi tentang kemungkinan mengirim pesan singkat untuk jaringan peer-to-peer dengan menggunakan ping melalui UDP tanpa server pusat
  • Artikel ini diringkas sebagai penjelasan bahwa paket ICMP memiliki field ID dan Netfilter memperlakukan paket ICMP sebagai "kasus khusus"