Diagnosis koneksi jaringan Linux: dari alamat hingga HTTP
Untuk mendiagnosis koneksi Linux, periksa antarmuka dan alamat, rute, resolusi nama, koneksi transport, lalu respons aplikasi secara berurutan. Satu hasil ping tidak cukup untuk memastikan seluruh jaringan atau layanan web berfungsi.
Untuk membaca alamat dan rute bawaan, lihat peran alamat IP, DNS, dan port. Jika hanya koneksi Secure Shell (SSH) yang gagal, periksa pula host, port, dan kunci melalui panduan SSH serta transfer berkas berbahasa Inggris.
Rujukan latihan konfigurasi adalah mesin virtual (VM) dengan instalasi biasa Ubuntu 26.04 LTS, yaitu rilis dengan dukungan jangka panjang, atau Rocky Linux seri 9. Konfigurasi layanan dan paket dapat berbeda pada kontainer, Windows Subsystem for Linux (WSL), serta rilis lain. Siapkan pemulihan melalui konsol dan catat versi lingkungan dengan mengikuti panduan persiapan mesin virtual berbahasa Inggris.
Mencatat cakupan gangguan sebelum mengubah konfigurasi
Catat komputer asal, nama tujuan, port, waktu mulai gangguan, serta pesan galat persisnya. Bandingkan satu situs dengan beberapa situs, satu klien dengan klien lain, serta Internet Protocol versi 4 (IPv4) dengan versi 6 (IPv6) jika relevan. Perhatikan perbedaan virtual private network (VPN), proksi, dan perubahan terbaru. Sebelum memulai ulang jaringan server jarak jauh, pastikan tersedia akses konsol atau jalur pengelolaan lain.
Memeriksa antarmuka, alamat, dan rute
ip -brief link
ip -brief address
ip route
ip -6 route
Status administratif UP tidak membuktikan tujuan dapat dijangkau. Periksa informasi tautan seperti LOWER_UP, alamat yang seharusnya ada, dan rute yang sesuai. Pada VM, pastikan kartu jaringan virtual atau network interface card (NIC) tersambung, serta mode penerjemahan alamat jaringan (NAT) atau bridge sesuai rencana. Jangan menganggap nama antarmuka selalu eth0.
Setelah memperoleh alamat tujuan sebenarnya, ip route get ACTUAL_IPV4_ADDRESS menunjukkan antarmuka, hop berikutnya, dan alamat sumber yang dipilih. Ganti ACTUAL_IPV4_ADDRESS dengan alamat IPv4 tujuan yang nyata; jangan mengetik nama pengganti itu secara harfiah. Pesan “Network is unreachable” mengarahkan pemeriksaan ke perutean, bukan langsung ke Domain Name System (DNS). Adanya rute yang dipilih belum membuktikan hop berikutnya atau tujuan memberikan respons.
Menggunakan ping sebagai satu petunjuk keterjangkauan
ping -c 3 127.0.0.1
ping -c 3 example.com
Perintah pertama menguji ICMP Echo melalui loopback, yaitu alamat yang kembali ke perangkat sendiri. Internet Control Message Protocol (ICMP) dipakai di sini untuk meminta balasan Echo. Perintah kedua mencari alamat berdasarkan nama lalu mengirim permintaan ke tujuan. ICMP bisa disaring meskipun akses web berfungsi. Sebaliknya, balasan ping tidak memvalidasi port web, sertifikat, atau respons Hypertext Transfer Protocol (HTTP). Kirim hanya sedikit permintaan ke tujuan latihan yang diizinkan.
Memisahkan kegagalan resolusi nama dan koneksi
getent ahosts example.com
curl -I -v --connect-timeout 5 --max-time 15 https://example.com/
printf "exit=%s\n" "$?"
Jika getent tidak menghasilkan alamat, periksa konfigurasi layanan nama sistem. Alat itu dapat memakai sumber selain DNS, seperti /etc/hosts. Keluaran rinci curl membantu membedakan pemilihan alamat, koneksi, pertukaran Transport Layer Security (TLS), dan penanganan respons. -I meminta header menggunakan metode HTTP HEAD, sedangkan -v menampilkan rincian diagnostik. Penolakan HEAD oleh server tidak dengan sendirinya membuktikan permintaan GET atau akses peramban juga gagal.
Status keluar curl yang umum antara lain 6 untuk kegagalan resolusi nama host, 7 untuk kegagalan koneksi, 28 untuk batas waktu yang tercapai, dan 60 untuk kegagalan validasi sertifikat. Mematikan pemeriksaan sertifikat dengan -k bukan perbaikan penyebabnya. Periksa status langsung setelah curl; menjalankan perintah lain terlebih dahulu akan mengganti nilai $?.
Secara bawaan, curl dapat selesai dengan status nol setelah menerima respons HTTP 404 atau 500 karena transfernya sendiri berhasil. Gunakan --fail-with-body pada versi yang mendukungnya, atau --fail, jika galat HTTP perlu menghasilkan status gagal. --fail menekan isi respons galat, sedangkan --fail-with-body mempertahankannya. Baca status HTTP dan status keluar proses secara terpisah. Samarkan kuki, header sensitif, serta alamat privat sebelum membagikan keluaran rinci.
Memeriksa alamat dan port pendengar pada server
ss -lnt
ss -lnu
sudo ss -lntp
ss -lnt menampilkan soket pendengar Transmission Control Protocol (TCP) dengan alamat dan port numerik; ss -lnu memilih User Datagram Protocol (UDP). Opsi -p meminta informasi proses, yang dapat memerlukan hak administrator seperti pada perintah ketiga. Jalankan pemeriksaan ini pada server yang layanannya ingin diperiksa; hasil lokal bukan daftar port server jarak jauh.
Pendengar pada 127.0.0.1:8080 menerima koneksi langsung hanya dari mesin lokal. 0.0.0.0:8080 mencakup antarmuka IPv4, tetapi keterjangkauannya tetap bergantung pada rute dan penyaringan. Apakah [::]:8080 juga menerima IPv4 bergantung pada pengaturan soket dan sistem. Soket UDP yang terikat tidak setara dengan pertukaran permintaan dan respons yang sudah terbukti berhasil.
Menerapkan satu perubahan berdasarkan bukti
| Pengamatan | Periksa terlebih dahulu |
|---|---|
| Permintaan lokal juga gagal | Keadaan layanan, konfigurasi, dan soket pendengar |
| Lokal berhasil, jarak jauh gagal | Alamat bind, firewall host, dan aturan keamanan cloud |
| Koneksi berhasil, sertifikat gagal | Nama host, rantai sertifikat, dan jam sistem |
| Respons galat HTTP | Log web atau aplikasi dan jalur permintaan |
Catat pengaturan semula, ubah satu hal, lalu ulangi pengujian yang sama dari klien yang sama ke tujuan dan port yang sama. Kembalikan perubahan yang tidak efektif sebelum menguji dugaan lain. Cara ini mempertahankan bukti dan membantu menghindari gangguan kedua akibat proses pemecahan masalah.
Untuk membedakan galat HTTP tanpa bergantung pada situs luar, pastikan python3 dan curl terpasang pada VM latihan. Jika belum ada, gunakan pengelola paket distribusi. Jalankan server berikut pada satu terminal dan biarkan tetap berjalan. Perintah membuat direktori sementara baru yang kosong, lalu hanya menyajikannya melalui loopback. Jika port 18080 sedang dipakai, pilih port kosong lain dan ubah nomor pada perintah server serta klien.
lab=$(mktemp -d "$HOME/linux-http-check.XXXXXX") &&
python3 -m http.server 18080 --bind 127.0.0.1 --directory "$lab"
Setelah server mulai, jalankan perintah berikut di terminal lain pada VM yang sama. Hasil yang diharapkan adalah HTTP 404 dan status curl 22: koneksi TCP serta respons HTTP diterima, tetapi berkas yang diminta tidak ada. Server latihan http.server ini bukan layanan untuk penggunaan produksi.
curl --fail --show-error --connect-timeout 2 --max-time 5 http://127.0.0.1:18080/missing-file
printf "exit=%s\n" "$?"
Hentikan server melalui Ctrl+C pada terminal server, lalu ulangi permintaan klien. Jika tidak ada pendengar, curl biasanya melaporkan kegagalan koneksi dengan status 7; lingkungan yang menunggu sampai batas waktu koneksi dapat menghasilkan 28. Periksa status segera dan pastikan tidak ada server lain yang mengambil port itu. Direktori sementara tetap tersimpan setelah server dihentikan; catat jalurnya jika ingin mengelola berkas latihan nanti.




