Устранение неполадок и устранение неполадок в сети Linux

80

Время от времени пользователи Linux и Unix сталкивались с различными сетевыми проблемами. Многие из этих проблем представлены здесь и на некоторых других форумах по поиску и устранению неисправностей, но они очень конкретны и содержат много дополнительной технической информации, а иногда довольно сложно понять суть и реальную причину некорректного поведения системы.

Задавая этот вопрос, я намерен открыть вики- страницу сообщества, которая позволит обобщить наш опыт устранения неполадок в сети и отладки. Я надеюсь, что пользователи Linux и Unix смогут легче распознавать и решать («разделяй и властвуй») свои проблемы с сетью, используя эту страницу.

Родитель этой страницы должен быть Лучшей практикой для диагностики проблем . Но здесь мы должны сосредоточиться на устранении проблем сети из пространства пользователя и ядра.

Я полагаю, если вы:

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

это идеально подходит для этой темы.


Я начну с того, что поделюсь ссылкой на инструменты диагностики varios и 12-летним простым руководством . Кроме того, учебник по archlinux, похоже, содержит актуальную информацию о нашей теме. А для того, чтобы погрузиться в работу с сетями Linux, нам обязательно нужно посетить Linux Networking-HOWTO .

др.
источник
В этом разделе «Вопросы и ответы» есть еще одна вещь, которую необходимо учитывать: две машины в сети настроены с одинаковым IP-адресом: unix.stackexchange.com/questions/85887/… .
SLM
Еще одно полезное руководство по устранению неполадок в сети: cisco.com/en/US/docs/internetworking/troublesho//ide/…
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, multicast, 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.
Джхварас
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 Мбит / с и полудуплекс - не хорошо, поскольку сетевая карта на этом компьютере может работать лучше. Мне нужно выяснить, нет ли сетевого адаптера или кабеля. Другой компьютер, подключенный к тому же маршрутизатору, сообщает 100 Мбит / с, Full duplex.

Брюс Эдигер
источник