Pemecahan masalah dan debugging jaringan Linux

80

Dari waktu ke waktu pengguna Linux dan Unix dihadapkan dengan berbagai masalah jaringan. Banyak dari masalah ini disajikan di sini dan di beberapa forum pemecahan masalah lainnya, tetapi sangat konkret dan berisi banyak informasi teknis tambahan, dan kadang-kadang agak sulit untuk memahami poin utama dan alasan sebenarnya perilaku sistem kereta.

Dengan mengajukan pertanyaan ini, maksud saya adalah memulai halaman wiki komunitas yang memungkinkan generalisasi pemecahan masalah jaringan dan pengalaman debugging kami. Saya berharap pengguna Linux dan Unix dapat lebih mudah mengenali dan memecahkan ("membagi dan menaklukkan") masalah jaringan mereka menggunakan halaman ini.

Induk halaman ini harus menjadi praktik terbaik untuk mendiagnosis masalah . Tetapi di sini kita harus fokus pada pemecahan masalah jaringan dari ruang pengguna dan kernel.

Saya kira, jika Anda:

  1. Bagikan informasi tentang menggunakan beberapa alat diagnostik jaringan yang hebat dengan contoh penggunaan konkret dan contoh bug jaringan, yang mereka bantu tangkap.
  2. Bagikan tautan ke tutorial jaringan hebat yang terhubung dengan subjek ini
  3. Ceritakan tentang metode umum atau resep yang memungkinkan untuk mengatasi beberapa kelas masalah jaringan
  4. Bagikan informasi tentang perangkat Anda untuk debugging jaringan dan pemecahan masalah

itu sangat cocok untuk topik ini.


Saya akan mulai dari membagikan tautan ke berbagai alat diagnostik dan tutorial sederhana berusia 12 tahun . Juga tutorial archlinux tampaknya memiliki informasi aktual tentang subjek kita. Dan untuk menyelam ke jaringan linux kita harus mengunjungi Linux Networking-HOWTO .

dr.
sumber
T&J ini memiliki satu hal lain yang perlu dipertimbangkan, 2 mesin di jaringan dikonfigurasikan dengan alamat IP yang sama: unix.stackexchange.com/questions/85887/… .
slm
Panduan pemecahan masalah jaringan lain yang bermanfaat: cisco.com/en/US/docs/internetworking/troubleshooting/guide/…
Ryne Everett

Jawaban:

118

Saya pikir, prinsip umum pemecahan masalah jaringan adalah:

  1. Cari tahu pada level apa tumpukan TCP / IP (atau tumpukan lainnya) terjadi masalah.
  2. Memahami apa perilaku sistem yang benar, dan apa penyimpangan dari keadaan sistem normal
  3. Cobalah untuk mengungkapkan masalahnya dalam satu kalimat atau dalam beberapa kata
  4. Menggunakan informasi yang diperoleh dari sistem buggy, pengalaman Anda sendiri dan pengalaman orang lain (google, berbagai forum, dll.), Cobalah untuk menyelesaikan masalah hingga berhasil (atau gagal)
  5. Jika Anda gagal, tanyakan orang lain tentang bantuan atau saran

Bagi saya, saya biasanya mendapatkan semua informasi yang diperlukan menggunakan semua alat yang diperlukan, dan mencoba mencocokkan informasi ini dengan pengalaman saya. Menentukan level tumpukan jaringan yang mengandung bug membantu untuk memotong varian yang tidak biasa. Menggunakan pengalaman orang lain membantu menyelesaikan masalah dengan cepat, tetapi sering kali mengarah ke situasi, bahwa saya dapat menyelesaikan beberapa masalah tanpa pemahamannya dan jika masalah ini terjadi lagi, tidak mungkin bagi saya untuk mengatasinya lagi tanpa internet.

Dan secara umum, saya tidak tahu bagaimana saya memecahkan masalah jaringan. Tampaknya ada beberapa fungsi ajaib di otak saya yang dinamai SolveNetworkProblem(information_about_system_state, my_experience, people_experience), yang kadang-kadang bisa mengembalikan jawaban yang tepat, dan juga kadang-kadang bisa gagal (seperti di sini TCP mati di laptop Linux ).

Saya biasanya menggunakan utils dari set ini untuk debugging jaringan:

  • ifconfig(atau ip link, ip addr) - untuk mendapatkan informasi tentang antarmuka jaringan
  • ping- untuk memvalidasi, jika host target dapat diakses dari mesin saya. pingjuga dapat digunakan untuk diagnosa DNS dasar - kita dapat melakukan ping host dengan alamat IP atau nama hostnya dan kemudian memutuskan apakah DNS berfungsi sama sekali. Dan kemudian tracerouteatau tracepathatau mtruntuk melihat apa yang terjadi di perjalanan ke sana.
  • dig - mendiagnosis segalanya DNS
  • dmesg | lessatau dmesg | tailatau dmesg | grep -i error- untuk memahami pendapat kernel Linux tentang beberapa masalah.
  • netstat -antp+ | grep smth- Penggunaan perintah netstat saya yang paling populer, yang menunjukkan informasi tentang koneksi TCP. Seringkali saya melakukan beberapa penyaringan menggunakan grep. Lihat juga ssperintah baru (dari iproute2rangkaian standar baru alat jaringan Linux) dan lsofseperti pada lsof -ai tcp -c some-cmd.
  • telnet <host> <port> - Sangat berguna untuk berkomunikasi dengan berbagai layanan TCP (misalnya pada SMTP, protokol HTTP), juga kita dapat memeriksa peluang umum untuk terhubung ke beberapa port TCP.
  • iptables-save(di Linux) - untuk membuang tabel iptables lengkap
  • ethtool - dapatkan semua parameter kartu antarmuka jaringan (status tautan, kecepatan, parameter pembongkaran ...)
  • socat- alat tentara swiss untuk menguji semua protokol jaringan (UDP, multicast, SCTP ...). Terutama berguna (lebih daripada telnet) dengan beberapa -dopsi.
  • iperf - untuk menguji ketersediaan bandwidth
  • openssl( s_client, ocsp, x509...) untuk debug semua masalah SSL / TLS / PKI.
  • wireshark - alat yang ampuh untuk menangkap dan menganalisis lalu lintas jaringan, yang memungkinkan Anda untuk menganalisis dan menangkap banyak bug jaringan.
  • iftop - Tampilkan pengguna besar di jaringan / router.
  • iptstate (di Linux) - tampilan saat ini dari pelacakan koneksi firewall.
  • arp(atau yang baru (Linux) ip neigh) - menunjukkan status tabel ARP.
  • routeatau yang lebih baru (di Linux) ip route- menunjukkan status tabel perutean.
  • strace(atau truss, dtraceatau tusctergantung pada sistem) - adalah alat yang berguna yang menunjukkan apa panggilan sistem melakukan proses masalah, itu juga menunjukkan kode kesalahan (errno) ketika panggilan sistem gagal. Informasi ini sering mengatakan cukup untuk memahami perilaku sistem dan menyelesaikan masalah. Atau, menggunakan breakpoint pada beberapa fungsi jaringan di gdbdapat membiarkan Anda mengetahui kapan mereka dibuat dan dengan argumen mana.
  • untuk menyelidiki masalah firewall di Linux: iptables -nvLmenunjukkan berapa banyak paket yang cocok dengan masing-masing aturan ( iptables -Zmenjadi nol penghitung). The LOGTarget dimasukkan dalam rantai firewall berguna untuk melihat mana paket menjangkau mereka dan bagaimana mereka telah berubah ketika mereka sampai di sana. Untuk lebih jauh NFLOG(terkait dengan ulogd) akan mencatat paket lengkap.
dr.
sumber
Ya ampun, bicarakan tentang tuntas!
mVChr
7
Saya akan menambahkan nmap. Profil port terbuka pada mesin dapat dengan cepat memberi Anda petunjuk apakah Anda sedang melihat server Linux atau Windows, misalnya.
Adam Monsen
7
Saya akan menambahkan tcpdump. Sebagai penganalisa paket standar untuk TCP.
jhvaras
14

Sejumlah "masalah jaringan" yang mengejutkan bermuara pada masalah DNS dari satu jenis atau lainnya. Pemecahan masalah awal harus digunakan ping -n w.x.y.zuntuk meninggalkan resolusi DNS dari nama host, dan cukup periksa konektivitas IP. Setelah itu, gunakan route -nuntuk memeriksa rute IP default tanpa resolusi DNS.

Setelah memverifikasi konektivitas IP, dan perutean nslookup,, hostdan digdapat menghasilkan informasi. Ingat bahwa "penguncian" dapat menunjukkan bahwa batas waktu DNS sedang terjadi.

Jangan lupa untuk memeriksa keberadaan dan konten /etc/resolv.conf. Klien DHCP mengubah file itu dengan setiap sewa, dan kadang-kadang mereka salah, atau jika ruang disk ketat, pembaruan mungkin tidak terjadi.

Bruce Ediger
sumber
8

Masalah kabel bisa ada. Jika Anda memiliki akses ke perangkat keras, pastikan semua kabel tersambung dan terhubung secara mekanis. Jika Anda dapat melihat router atau antarmuka ethernet, pastikan lampu tautan menyala.

Jarak jauh, Anda harus bergantung pada ethtooldan mii-tool.

[root@flask ~]# ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Speed: 10Mb/s
        Duplex: Half
        Port: MII
        PHYAD: 24
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Current message level: 0x00000001 (1)
                               drv
        Link detected: yes

"Tautan terdeteksi: ya" baik, tetapi 10Mb / s dan Half duplex tidak baik, karena NIC di komputer itu dapat melakukan lebih baik. Saya perlu mencari tahu apakah NIC rusak atau kabelnya. Komputer lain yang terhubung ke router yang sama mengatakan 100Mb / s, dupleks penuh.

Bruce Ediger
sumber