Jaringan komputer merupakan tulang punggung komunikasi modern, dan di balik setiap koneksi yang sukses antara dua perangkat, terdapat keputusan routing yang menentukan ke mana paket data harus dikirim. Dalam sistem operasi Linux, tabel routing menjadi komponen fundamental yang menyimpan informasi jalur-jalur yang tersedia bagi lalu lintas jaringan. Tanpa tabel routing yang benar, paket data akan tersesat dan tidak pernah sampai ke tujuannya. Artikel ini akan membahas secara mendalam perintah-perintah Linux yang digunakan untuk melihat tabel routing, mulai dari konsep dasarnya hingga implementasi praktis di lapangan.
Apa itu Tabel Routing?
Tabel routing adalah struktur data yang dimiliki oleh setiap perangkat yang terhubung ke jaringan — baik itu router, server, maupun workstation — yang berisi daftar jalur (route) menuju berbagai destinasi jaringan. Setiap entri dalam tabel ini memberikan instruksi kepada sistem tentang ke mana paket data harus diteruskan berdasarkan alamat tujuannya. Tabel routing bisa diisi secara otomatis oleh protokol routing dinamis seperti OSPF atau BGP, maupun secara manual oleh administrator melalui perintah ip route add atau route add.
Mengapa tabel routing begitu penting? Jawabannya sederhana: tanpa tabel routing yang akurat, perangkat Anda tidak akan bisa berkomunikasi dengan jaringan lain. Misalnya, ketika Anda membuka sebuah website, komputer Anda mengirim paket data ke alamat IP tujuan. Sistem operasi kemudian memeriksa tabel routing untuk menentukan melalui gateway mana paket tersebut harus melewati, dan melalui antarmuka jaringan (interface) mana paket itu harus dikirim. Jika tidak ada entri yang cocok, paket tersebut akan dibuang atau dikirim ke default route — jika ada. Di lingkungan server production, kesalahan konfigurasi routing bisa berakibat fatal: layanan menjadi tidak dapat diakses, trafik mengambil jalur yang tidak efisien, atau bahkan terjadi downtime total.
Berikut adalah langkah-langkah dasar untuk melihat tabel routing di Linux menggunakan dua perintah yang paling umum:
# Menggunakan perintah ip (direkomendasikan, bagian dari iproute2)
ip route show
# Menggunakan perintah route (legacy, masih tersedia di banyak distro)
route -n
Perintah ip route show adalah metode modern dan direkomendasikan karena merupakan bagian dari paket iproute2 yang menggantikan utilitas net-tools yang sudah usang. Sementara route -n masih banyak digunakan karena kebiasaan dan kompatibilitas, flag -n pada perintah ini sangat penting karena mencegah sistem melakukan resolusi DNS pada alamat IP, sehingga output ditampilkan jauh lebih cepat tanpa menunggu proses DNS lookup yang bisa sangat lambat.
Untuk melihat tabel routing secara lebih spesifik, Anda juga dapat memfilter output berdasarkan kriteria tertentu:
# Melihat route hanya untuk tabel routing tertentu
ip route show table main
# Melihat route ke alamat tujuan tertentu
ip route get 8.8.8.8
# Melihat route dari interface tertentu
ip route show dev eth0
Cara Kerja Tabel Routing
Untuk memahami cara kerja tabel routing, kita perlu memahami konsep inti yang mendasarinya: longest prefix match. Ketika sebuah paket data harus diteruskan, kernel Linux memeriksa tabel routing dan mencari entri yang paling spesifik — yaitu entri dengan subnet mask terpanjang yang cocok dengan alamat tujuan. Misalnya, jika tabel routing memiliki entri untuk 10.0.1.0/24 dan juga 10.0.0.0/16, dan paket ditujukan ke 10.0.1.5, maka sistem akan memilih entri /24 karena lebih spesifik. Prinsip ini memastikan bahwa jalur yang lebih detail selalu diutamakan dibanding jalur yang lebih umum.
Konsep penting lainnya adalah default gateway. Direpresentasikan sebagai 0.0.0.0/0 atau default dalam tabel routing, default gateway berfungsi sebagai "jalur terakhir" — ketika tidak ada entri route yang lebih spesifik cocok dengan alamat tujuan, paket akan diteruskan ke gateway ini. Di sebagian besar jaringan sederhana, satu entri default route sudah cukup untuk memberikan konektivitas internet.
Komponen utama dalam setiap entri tabel routing meliputi beberapa elemen yang saling berkaitan. Pertama adalah Destination, yaitu alamat jaringan tujuan yang bisa berupa alamat spesifik atau default. Kedua adalah Genmask atau Prefix Length, yang menentukan seberapa luas cakupan jaringan tujuan — semakin panjang prefix, semakin spesifik route tersebut. Ketiga adalah Gateway, yaitu alamat IP perangkat berikutnya yang akan menerima paket; jika tujuan berada di jaringan lokal yang terhubung langsung, kolom gateway akan kosong atau menampilkan 0.0.0.0. Keempat adalah Interface (dev), yang menunjukkan antarmuka jaringan fisik atau virtual yang digunakan untuk mengirim paket, seperti eth0, wlan0, atau tun0. Kelima adalah Metric, nilai numerik yang menentukan prioritas route — semakin rendah nilai metric, semakin diutamakan route tersebut ketika ada beberapa route menuju destinasi yang sama.
terus, Linux mendukung konsep multiple routing tables. Secara default terdapat beberapa tabel routing bawaan yang didefinisikan dalam file /etc/iproute2/rt_tables, antara lain tabel local (untuk alamat lokal dan broadcast), tabel main (tabel routing utama yang biasa kita lihat), dan tabel default. Fitur ini menjadi sangat berguna ketika dikombinasikan dengan policy routing, di mana keputusan routing tidak hanya berdasarkan alamat tujuan, tetapi juga berdasarkan alamat sumber, port, atau mark dari paket — sebuah kemampuan yang tidak dimiliki oleh model routing tradisional.
Contoh Penggunaan Sehari-hari
Skenario 1: Melihat Seluruh Tabel Routing di Mesin Lokal
Ini adalah penggunaan paling dasar dan paling sering dilakukan. Administrator jaringan perlu memverifikasi apakah route yang diharapkan sudah ada dalam tabel routing, apakah default gateway sudah dikonfigurasi dengan benar, dan apakah tidak ada route yang konflik.
$ ip route show
default via 192.168.1.1 dev eth0 proto dhcp metric 100
10.0.0.0/24 dev tun0 proto kernel scope link src 10.0.0.5
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100
Dari output di atas, kita dapat membaca bahwa terdapat empat entri route. Baris pertama menunjukkan default route yang mengarah ke gateway 192.168.1.1 melalui interface eth0, yang diperoleh secara otomatis melalui DHCP. Baris kedua menunjukkan jaringan VPN 10.0.0.0/24 yang dijangkau melalui interface tun0 dengan alamat sumber 10.0.0.5. Baris ketiga adalah link-local address yang merupakan standar untuk komunikasi lokal tanpa konfigurasi IP. Baris keempat menunjukkan jaringan lokal 192.168.1.0/24 yang terhubung langsung ke eth0.
Skenario 2: Menentukan Jalur yang Diambil untuk Alamat Tertentu
Ketika Anda mendapatkan laporan bahwa koneksi ke server tertentu bermasalah, langkah pertama adalah memverifikasi jalur mana yang diambil paket untuk mencapai server tersebut. Perintah ip route get sangat berguna untuk ini karena tidak hanya menampilkan route yang cocok, tetapi juga menunjukkan keputusan routing aktual termasuk alamat sumber yang dipilih.
$ ip route get 8.8.8.8
8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100 uid 1000
cache
$ ip route get 10.0.0.10
10.0.0.10 dev tun0 src 10.0.0.5 uid 1000
cache
Output pertama menunjukkan bahwa paket menuju 8.8.8.8 (DNS Google) akan diteruskan melalui gateway 192.168.1.1 di eth0, dengan alamat sumber 192.168.1.100. Output kedua menunjukkan bahwa paket menuju 10.0.0.10 akan langsung dikirim melalui interface tun0 tanpa melewati gateway, karena alamat tujuan berada dalam jaringan yang terhubung langsung via VPN.
Skenario 3: Verifikasi Routing Setelah VPN Terhubung
VPN sering menambahkan route baru ke tabel routing setelah koneksi berhasil terbentuk. Namun, terkadang route yang ditambahkan tidak sesuai harapan, menyebabkan beberapa layanan tetap mengambil jalur internet biasa alih-alih melewati tunnel VPN.
# Sebelum VPN terhubung
$ ip route show | grep 10.0
(tidak ada output)
# Setelah VPN terhubung
$ ip route show | grep 10.0
10.0.0.0/24 dev tun0 proto kernel scope link src 10.0.0.5
10.0.1.0/24 via 10.0.0.1 dev tun0
# Verifikasi bahwa trafik ke jaringan internal melewati VPN
$ ip route get 10.0.1.50
10.0.1.50 via 10.0.0.1 dev tun0 src 10.0.0.5 uid 1000
cache
Dalam contoh ini, setelah VPN terhubung, dua route baru muncul. Route pertama menunjukkan jaringan langsung 10.0.0.0/24 yang dapat dijangkau melalui tun0, sedangkan route kedua menunjukkan bahwa jaringan 10.0.1.0/24 harus melewati gateway VPN di 10.0.0.1. Verifikasi dengan ip route get mengonfirmasi bahwa trafik ke server internal di 10.0.1.50 benar-benar melewati tunnel VPN.
Skenario 4: Mendiagnosis Masalah Dual-Homed Server
Server yang memiliki dua atau lebih interface jaringan (dual-homed atau multi-homed) sering mengalami masalah routing karena konflik antar route. Misalnya, server dengan interface publik dan interface privat bisa saja mengirim respons ke klien melalui interface yang salah.
$ ip route show
default via 203.0.113.1 dev eth0
10.10.0.0/16 dev eth1 proto kernel scope link src 10.10.1.5
203.0.113.0/24 dev eth0 proto kernel scope link src 203.0.113.50
# Cek jalur ke klien internal
$ ip route get 10.10.5.20
10.10.5.20 dev eth1 src 10.10.1.5 uid 0
cache
# Cek jalur ke klien publik
$ ip route get 203.0.113.100
203.0.113.100 dev eth0 src 203.0.113.50 uid 0
cache
Output ini menunjukkan konfigurasi routing yang sudah benar, di mana trafik internal mengalir melalui eth1 dan trafik publik melalui eth0. Jika verifikasi menunjukkan hasil yang salah — misalnya trafik internal mengambil jalur default melalui eth0 — maka Anda perlu menambahkan route spesifik atau mengimplementasikan policy routing.
Skenario 5: Menggunakan Perintah Route Legacy untuk Perbandingan
Meskipun ip route adalah standar modern, banyak dokumentasi dan tutorial lama yang masih menggunakan netstat dan route. Memahami output dari perintah legacy ini tetap penting untuk keperluan kompatibilitas.
$ route