Cheat sheet

Perintah jaringan Linux: ip, ss, ping, traceroute, dig, dan curl untuk diagnosis jaringan

Diperbarui: · Skillaria.Top

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

TugasPerintah
Alamat IP semua antarmukaip -br addr
Status antarmuka (UP/DOWN)ip -br link
Tabel ruteip route
Melalui gateway mana paket menuju suatu alamatip route get 8.8.8.8
Tetangga jaringan (tabel ARP)ip neigh
Port yang sedang mendengarkan dan prosesnyasudo ss -tulpn
Koneksi TCP yang terbentukss -tn state established
Memeriksa keterjangkauan hostping -c 4 example.com
Jalur paket menuju hosttraceroute example.com, mtr example.com
Menerjemahkan nama menjadi alamatdig +short example.com
Bertanya ke server DNS tertentudig @1.1.1.1 example.com
Memeriksa respons HTTPcurl -I https://example.com
Detail koneksi dan TLScurl -v https://example.com
Apakah port TCP terbukanc -zv host 443
Nama hosthostnamectl, 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:

FlagArti
-t / -uTCP / UDP
-lhanya socket yang mendengarkan
-ptampilkan proses (untuk proses milik pengguna lain perlu sudo)
-njangan menerjemahkan port dan alamat menjadi nama
-asemua socket, termasuk yang sudah terhubung
-sstatistik 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.

PerintahFungsi
curl -I URLhanya header (permintaan HEAD)
curl -v URLrinci: DNS, koneksi, TLS, header
curl -L URLikuti redirect
curl -o file URLsimpan ke berkas
curl -X POST -H 'Content-Type: application/json' -d '{"a":1}' URLkirim JSON
curl -k URLjangan memeriksa sertifikat (hanya untuk debugging)
curl --resolve site.ru:443:10.0.0.5 https://site.rumenghubungi server tertentu tanpa melalui DNS
curl -s -o /dev/null -w '%{http_code} %{time_total}\n' URLkode 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"

  1. Antarmuka dan alamat: ip -br addr — antarmuka UP dan alamat tersedia.
  2. Gateway: ip route — ada baris default via; lalu ping -c 3 <gateway>.
  3. Jaringan luar berdasarkan IP: ping -c 3 1.1.1.1. Jika berhasil, routing sudah benar.
  4. DNS: dig +short example.com. Jika kosong atau error padahal ping ke IP berhasil, masalahnya ada di resolver.
  5. Port: nc -zv host 443 atau curl -v. Di server, ss -tulpn menunjukkan apakah layanan mendengarkan dan di alamat mana.
  6. Firewall: sudo nft list ruleset, sudo iptables -L -n, sudo ufw status.
  7. Aplikasi: curl -I dan 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
ifconfigip addr, ip link
route -nip route
arp -nip neigh
netstat -tulpnss -tulpn
nslookupdig

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.

Pelajari topik ini lewat video

Topik ini dibahas mendalam dengan praktik di kursus “Linux: с нуля до уверенного администрирования”.

Ke kursus