Perintah jaringan Linux: ip, ss, ping, traceroute, dig, dan curl untuk diagnosis jaringan
Perintah jaringan utama di Linux: ip (alamat, antarmuka, dan rute), ss (port terbuka dan koneksi), ping dan traceroute (keterjangkauan host dan jalurnya), dig (pemeriksaan DNS), dan curl (permintaan ke layanan HTTP). Diagnosis paling mudah dilakukan lapis demi lapis: antarmuka dan alamat, rute, DNS, ketersediaan port, lalu respons aplikasi.
Perintah jaringan Linux mencakup hampir seluruh diagnosis harian: ip menampilkan alamat dan rute, ss menampilkan port dan koneksi yang terbuka, ping dan traceroute memeriksa keterjangkauan host, dig memeriksa DNS, dan curl memeriksa respons layanan web. Di bawah ini ada cheat sheet dengan flag-flagnya beserta urutan langkah yang berguna untuk mencari penyebab ketika "jaringan tidak berfungsi".
Cheat sheet perintah jaringan Linux dalam satu tabel
| Tugas | Perintah |
|---|---|
| Alamat IP semua antarmuka | ip -br addr |
| Status antarmuka (UP/DOWN) | ip -br link |
| Tabel rute | ip route |
| Melalui gateway mana paket menuju suatu alamat | ip route get 8.8.8.8 |
| Tetangga jaringan (tabel ARP) | ip neigh |
| Port yang sedang mendengarkan dan prosesnya | sudo ss -tulpn |
| Koneksi TCP yang terbentuk | ss -tn state established |
| Memeriksa keterjangkauan host | ping -c 4 example.com |
| Jalur paket menuju host | traceroute example.com, mtr example.com |
| Menerjemahkan nama menjadi alamat | dig +short example.com |
| Bertanya ke server DNS tertentu | dig @1.1.1.1 example.com |
| Memeriksa respons HTTP | curl -I https://example.com |
| Detail koneksi dan TLS | curl -v https://example.com |
| Apakah port TCP terbuka | nc -zv host 443 |
| Nama host | hostnamectl, hostname -I |
ip: alamat, antarmuka, dan rute
Perintah ip dari paket iproute2 menggantikan ifconfig dan route yang sudah usang. Subperintahnya bisa disingkat: ip a = ip addr, ip r = ip route. Flag -br memberi keluaran ringkas, sedangkan -c memberi warna.
$ ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 192.168.1.25/24 fe80::a00:27ff:fe4e:66a1/64
docker0 DOWN 172.17.0.1/16
Jika antarmuka tidak memiliki alamat dari jaringan yang dibutuhkan atau berstatus DOWN, tidak perlu mencari lebih jauh: masalahnya ada di lapis ini.
Cara menambah alamat IP dan menyalakan antarmuka
sudo ip link set eth0 up
sudo ip addr add 192.168.1.50/24 dev eth0
sudo ip addr del 192.168.1.50/24 dev eth0
Perubahan lewat ip hanya berlaku sampai sistem di-reboot. Pengaturan permanen ditulis di konfigurasi sistem: netplan di Ubuntu, NetworkManager (nmcli) di Fedora dan RHEL, serta systemd-networkd di server.
Rute dan gateway default
$ ip route
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.25
$ ip route get 10.20.0.5
10.20.0.5 via 192.168.1.1 dev eth0 src 192.168.1.25 uid 1000
Baris default via adalah gateway tujuan semua lalu lintas yang tidak cocok dengan rute yang lebih spesifik. Jika baris ini tidak ada, tidak ada akses internet, meskipun jaringan lokal berfungsi. Menambah rute: sudo ip route add 10.20.0.0/16 via 192.168.1.254.
ss: port mana yang terbuka dan siapa yang mendengarkannya
ss menggantikan netstat dan bekerja lebih cepat. Kombinasi yang paling sering dipakai adalah ss -tulpn:
| Flag | Arti |
|---|---|
-t / -u | TCP / UDP |
-l | hanya socket yang mendengarkan |
-p | tampilkan proses (untuk proses milik pengguna lain perlu sudo) |
-n | jangan menerjemahkan port dan alamat menjadi nama |
-a | semua socket, termasuk yang sudah terhubung |
-s | statistik ringkasan |
$ sudo ss -tulpn
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=812,fd=6))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=640,fd=3))
tcp LISTEN 0 151 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=901,fd=21))
Perhatikan alamatnya: 0.0.0.0 berarti layanan menerima koneksi dari semua antarmuka, sedangkan 127.0.0.1 hanya menerima koneksi lokal. Ini sering menjadi penyebab database "tidak merespons" dari mesin lain.
Cara mengetahui siapa yang memakai port
sudo ss -ltnp 'sport = :8080'
sudo ss -tn dst 10.0.0.7 # koneksi ke alamat tertentu
ss -tan state time-wait | wc -l # berapa socket dalam status TIME-WAIT
ping: apakah host bisa dijangkau
ping mengirim paket ICMP echo dan menampilkan waktu respons serta paket yang hilang. Di Linux ping berjalan tanpa henti, jadi jumlah paket sebaiknya dibatasi dengan flag -c.
$ ping -c 4 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.4 ms
...
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 12.1/12.5/13.0/0.3 ms
Flag yang berguna: -i 0.2 untuk interval, -W 2 untuk batas waktu respons, -4/-6 untuk versi protokol, dan -s 1472 -M do untuk memeriksa MTU tanpa fragmentasi. Ingat bahwa banyak server dan layanan cloud memblokir ICMP: tidak adanya respons ping belum berarti host tidak bisa dijangkau.
traceroute dan mtr: di mana paket hilang
traceroute menampilkan hop-hop yang dilewati sampai ke tujuan. Tanda bintang pada sebagian hop itu wajar, karena router perantara bisa saja tidak merespons. Yang perlu dicurigai adalah ketika setelah suatu hop semua baris berisi bintang sampai akhir.
traceroute -n example.com # tanpa nama DNS, lebih cepat
sudo traceroute -T -p 443 example.com # TCP alih-alih UDP, bisa melewati firewall
tracepath example.com # tanpa root, sekaligus menampilkan MTU
mtr menggabungkan ping dan traceroute, lalu memperbarui statistik kehilangan paket untuk setiap hop secara real time. Untuk laporan: mtr -rwc 50 example.com.
dig: pemeriksaan DNS
dig dari paket dnsutils (bind-utils di RHEL) adalah alat utama untuk memeriksa DNS. Bentuk singkatnya hanya menampilkan jawabannya:
$ dig +short example.com
93.184.215.14
$ dig example.com MX +short
$ dig @8.8.8.8 example.com A # bertanya ke server tertentu
$ dig -x 8.8.8.8 +short # reverse lookup (PTR)
$ dig +trace example.com # menelusuri rantai dari server root
Pada keluaran lengkap, perhatikan status: NOERROR berarti rekaman ditemukan, NXDOMAIN berarti domain tidak ada, SERVFAIL berarti server tidak dapat menjawab (sering karena masalah DNSSEC atau server otoritatif yang tidak bisa dijangkau). Jika dig @8.8.8.8 berhasil tetapi dig biasa gagal, yang bermasalah adalah resolver lokal: periksa /etc/resolv.conf dan resolvectl status.
Perlu diingat bahwa dig tidak membaca /etc/hosts. Untuk memeriksa resolusi nama seperti yang dilakukan aplikasi, gunakan getent hosts example.com.
curl: pemeriksaan HTTP dan API
curl menjawab pertanyaan terakhir: layanan merespons atau tidak, dan apa yang sebenarnya dikembalikannya.
| Perintah | Fungsi |
|---|---|
curl -I URL | hanya header (permintaan HEAD) |
curl -v URL | rinci: DNS, koneksi, TLS, header |
curl -L URL | ikuti redirect |
curl -o file URL | simpan ke berkas |
curl -X POST -H 'Content-Type: application/json' -d '{"a":1}' URL | kirim JSON |
curl -k URL | jangan memeriksa sertifikat (hanya untuk debugging) |
curl --resolve site.ru:443:10.0.0.5 https://site.ru | menghubungi server tertentu tanpa melalui DNS |
curl -s -o /dev/null -w '%{http_code} %{time_total}\n' URL | kode respons dan waktu |
$ curl -s -o /dev/null -w '%{http_code} %{time_connect} %{time_total}\n' https://example.com
200 0.041 0.187
Pesan galat curl cukup jelas menunjukkan lapisnya: Could not resolve host berarti DNS, Connection refused berarti port tertutup atau tidak ada yang mendengarkan, Connection timed out berarti paket diblokir firewall atau tidak ada rute, dan SSL certificate problem berarti ada masalah pada sertifikat.
Urutan diagnosis: ketika "jaringan tidak berfungsi"
- Antarmuka dan alamat:
ip -br addr— antarmuka UP dan alamat tersedia. - Gateway:
ip route— ada barisdefault via; laluping -c 3 <gateway>. - Jaringan luar berdasarkan IP:
ping -c 3 1.1.1.1. Jika berhasil, routing sudah benar. - DNS:
dig +short example.com. Jika kosong atau error padahal ping ke IP berhasil, masalahnya ada di resolver. - Port:
nc -zv host 443ataucurl -v. Di server,ss -tulpnmenunjukkan apakah layanan mendengarkan dan di alamat mana. - Firewall:
sudo nft list ruleset,sudo iptables -L -n,sudo ufw status. - Aplikasi:
curl -Idan log layanan (journalctl -u nginx).
Kerjakan dari bawah ke atas dan jangan melompati langkah: dengan cara ini Anda bisa mengetahui lapis mana yang bermasalah dalam beberapa menit, alih-alih me-restart semuanya secara acak.
Perintah lama dan penggantinya
| Usang (net-tools) | Pengganti modern |
|---|---|
ifconfig | ip addr, ip link |
route -n | ip route |
arp -n | ip neigh |
netstat -tulpn | ss -tulpn |
nslookup | dig |
Di distribusi baru, net-tools sering tidak terpasang sama sekali, jadi biasakan diri dengan perintah yang baru.
Kesimpulan
Untuk diagnosis harian, enam perintah jaringan Linux sudah cukup: ip, ss, ping, traceroute, dig, dan curl. Periksa lapis demi lapis — alamat, rute, DNS, port, lalu aplikasi — maka penyebab kesalahan akan cepat ditemukan. Perintah jaringan dan contoh kegagalan yang umum dibahas lebih lanjut dalam kursus Linux.
Pertanyaan umum
Mengapa perintah ifconfig tidak ada di sistem saya?
Perintah itu termasuk paket net-tools yang usang, dan di distribusi modern paket ini tidak terpasang secara default. Gunakan ip addr, atau pasang net-tools secara manual.
Bagaimana cara mengetahui alamat IP publik saya dari terminal?
Jalankan curl ifconfig.me atau curl -4 icanhazip.com: layanan eksternal akan mengembalikan alamat yang dipakai saat keluar ke internet. Perintah ip addr hanya menampilkan alamat antarmuka, yang biasanya alamat internal.
Apa perbedaan ping dengan pemeriksaan port?
ping memeriksa keterjangkauan host melalui ICMP, tetapi tidak memberi tahu apa pun tentang layanan tertentu. Untuk mengecek apakah server menerima koneksi pada suatu port, gunakan nc -zv host port atau curl.
Bagaimana cara melihat kecepatan dan beban antarmuka jaringan?
Penghitung byte dan error ditampilkan oleh ip -s link, sedangkan beban secara real time bisa dilihat dengan iftop, nload, atau bmon. Throughput antara dua mesin diukur dengan iperf3.
Bagaimana cara mengganti server DNS sementara?
Pada sistem yang memakai systemd-resolved, gunakan sudo resolvectl dns eth0 1.1.1.1. Untuk pengecekan sekali jalan, lebih mudah menentukan server langsung di perintah: dig @1.1.1.1 example.com.
Topik ini dibahas mendalam dengan praktik di kursus “Linux: с нуля до уверенного администрирования”.
Ke kursus