Усунення несправностей та налагодження мережевої мережі Linux


80

Час від часу користувачі Linux та Unix стикалися з різними мережевими проблемами. Багато з цих проблем представлені тут і на деяких інших форумах з усунення несправностей, але вони є дуже конкретними і містять багато додаткової технічної інформації, а іноді досить важко зрозуміти основну суть і справжню причину невдалої поведінки системи.

Задаючи це запитання, я маю намір створити вікі- сторінку спільноти, яка дозволяє узагальнити нашу мережу з усунення несправностей та налагодження. Я сподіваюся, що користувачі Linux та Unix могли легше розпізнати та вирішити ("розділити та перемогти") свої мережеві проблеми за допомогою цієї сторінки.

Батьком цієї сторінки має бути найкраща практика для діагностики проблем . Але тут ми повинні зосередитись на вирішенні проблем мережі з простору користувача та ядра.

Я гадаю, якщо ви:

  1. Поділіться інформацією про використання чудового інструменту діагностики мережі з конкретними прикладами використання та прикладами мережевих помилок, які вони допомагають зловити.
  2. Поділіться посиланням на чудовий підручник з мережі, пов’язаний із цією темою
  3. Розкажіть про загальний метод або рецепт, який дозволяє вирішити певний клас мережевих проблем
  4. Діліться інформацією про свій набір інструментів для налагодження мережі та усунення несправностей

це цілком підійде до цієї теми.


Почну з обміну посиланням на інструменти діагностики varios та 12-річний простий підручник . Також підручник з archlinux здається фактичною інформацією про нашу тему. А для занурення в мережу Linux нам обов'язково потрібно відвідати Linux Networking-HOWTO .


У цьому питанні є ще одне, що слід врахувати, 2 машини в мережі, налаштовані з однаковою IP-адресою: unix.stackexchange.com/questions/85887/… .
slm

Ще один корисний посібник з усунення несправностей у мережі: cisco.com/en/US/docs/internetworking/troubleshooting/guide/…
Everett

Відповіді:


118

Я думаю, загальними принципами усунення несправностей у мережі є:

  1. Дізнайтеся, на якому рівні стеку TCP / IP (або якогось іншого стека) виникає проблема.
  2. Зрозумійте, що таке правильна поведінка системи, а що - відхилення від нормального стану системи
  3. Спробуйте висловити проблему одним реченням або кількома словами
  4. Використовуючи отриману інформацію з баггі-системи, власний досвід та досвід інших людей (google, різні форуми тощо), намагайтеся вирішити проблему до успіху (або невдачі)
  5. Якщо ви не вдається, попросіть інших людей про допомогу чи поради

Щодо мене, я зазвичай отримую всю необхідну інформацію, використовуючи всі необхідні інструменти, і намагаюся відповідати цій інформації моєму досвіду. Визначення того, на якому рівні мережевого стека міститься помилка, допомагає вирізати малоймовірні варіанти. Використання досвіду інших людей допомагає швидко вирішити проблеми, але часто це призводить до ситуації, що я можу вирішити якусь проблему без її розуміння, і якщо ця проблема повториться, мені неможливо знову її вирішити без Інтернету.

І взагалі я не знаю, як я вирішую мережеві проблеми. Здається, у моєму мозку названа якась магічна функція SolveNetworkProblem(information_about_system_state, my_experience, people_experience), яка іноді може повернути точно правильну відповідь, а також іноді може вийти з ладу (наприклад, TCP помирає на ноутбуці Linux ).

Я зазвичай використовую утиліти з цього набору для налагодження мережі:

  • ifconfig(або ip link, ip addr) - для отримання інформації про мережеві інтерфейси
  • ping- для перевірки, якщо цільовий хост доступний з моєї машини. pingтакож може використовуватися для основної діагностики DNS - ми можемо пінг-хосту за IP-адресою або за його ім'ям, а потім вирішити, чи працює DNS взагалі. А потім tracerouteабо tracepathабо mtrподивитися, що відбувається по дорозі туди.
  • dig - діагностувати все DNS
  • dmesg | lessабо dmesg | tailабо dmesg | grep -i error- для розуміння того, що ядро ​​Linux думає про певну проблему.
  • netstat -antp+ | grep smth- моє найпопулярніше використання команди netstat, яка показує інформацію про TCP-з'єднання. Часто я виконую деяку фільтрацію за допомогою grep. Дивіться також нову ssкоманду (з iproute2нового стандартного набору мережевих інструментів Linux) та lsofін lsof -ai tcp -c some-cmd.
  • telnet <host> <port> - дуже корисний для спілкування з різними TCP-сервісами (наприклад, на протоколах SMTP, HTTP), також ми можемо перевірити загальну можливість підключення до якогось порту TCP.
  • iptables-save(на Linux) - для скидання повних таблиць iptables
  • ethtool - отримати всі параметри мережевого інтерфейсу (стан зв'язку, швидкість, параметри завантаження ...)
  • socat- інструмент швейцарської армії для тестування всіх мережевих протоколів (UDP, багатоадресна передача, SCTP ...). Особливо корисно (більше, ніж telnet) з кількома -dваріантами.
  • iperf - перевірити наявність пропускної здатності
  • openssl( s_client, ocsp, x509...) для налагодження всіх питань SSL / TLS / PKI.
  • wireshark - потужний інструмент для збору та аналізу мережевого трафіку, що дозволяє аналізувати та виловлювати багато мережевих помилок.
  • iftop - показувати великих користувачів у мережі / маршрутизаторі.
  • iptstate (у Linux) - поточний вигляд відстеження з'єднання брандмауера.
  • arp(або новий (Linux) ip neigh) - показує стан таблиці ARP.
  • routeабо новіше (в Linux) ip route- показує стан таблиці маршрутизації.
  • strace(або truss, dtraceабо tuscзалежно від системи) - корисний інструмент, який показує, які системні виклики обробляє проблему, а також показує коди помилок (errno), коли системні виклики не вдається. Ця інформація часто говорить достатньо для розуміння поведінки системи та вирішення проблеми. Крім того, використання точок перерви на деяких функціях мережі gdbдозволяє вам дізнатися, коли вони зроблені та з якими аргументами.
  • досліджувати проблеми з брандмауером в Linux: iptables -nvLпоказує, скільки пакетів відповідає кожному правилу ( iptables -Zдо нуля лічильників). LOGМішень вставлена в ланцюжках брандмауера корисно дізнатися , які пакети досягають їх і як вони вже були перетворені , коли вони отримують там. Щоб отримати подальше NFLOG(пов'язане з ulogd), увійде повний пакет.

Гейз, поговори про ретельне!
mVChr

7
Я додам nmap. Профіль відкритих портів на машині може швидко дати вам підказки щодо того, чи шукаєте ви, наприклад, Linux або Windows сервер.
Адам Монсен

7
Я додам tcpdump. Як його стандартний аналізатор пакетів для TCP.
jhvaras

14

Дивовижна кількість "мережевих проблем" зводиться до тих чи інших проблем DNS. Початкове усунення несправностей має використовуватися ping -n w.x.y.zдля того, щоб залишити дозвіл DNS імені хоста та просто перевірити підключення IP. Після цього використовуйте route -nдля перевірки IP-маршруту за замовчуванням без роздільної здатності DNS.

Після перевірки підключення IP та маршрутизації nslookup, hostі digможе отримати інформацію. Пам’ятайте, що "блокування" може означати, що виникають таймаути DNS.

Не забудьте перевірити існування та вміст /etc/resolv.conf. Клієнти DHCP змінюють цей файл з кожною орендою, і іноді вони неправильно виходять, або якщо на диску є недостатньо місця, оновлення може не відбутися.


8

Проблеми з кабелем можуть існувати. Якщо у вас є доступ до обладнання, переконайтеся, що кабелі підключені та механічно зачеплені. Якщо ви бачите маршрутизатори або інтерфейси Ethernet, переконайтеся, що індикатори посилань увімкнуті.

Віддалено ви повинні залежати від ethtoolі 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

"Повідомлення виявлено: так" - це добре, але 10 Мбіт / с і половина дуплексу не є гарними, оскільки NIC на цьому комп'ютері може зробити краще. Мені потрібно розібратися, чи є сітка NIC заглушена чи кабель. Інший комп'ютер, підключений до того ж маршрутизатора, говорить про 100 Мбіт / с, повний дуплекс.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.