Product SiteDocumentation Site

10.9. Инструменты Диагностики Сети

Когда какое-либо сетевое приложение не работает как ожидалось, очень важно вникнуть в суть дела и разобраться почему это происходит. И даже в случаях видимости нормальной работы, без сбоев, очень важно дополнительно получить подтверждение этого от сетевых диагностических средств. Для решения данных вопросов существует несколько диагностических инструментов; при этом каждый из этих инстументов работает на своём (разном) уровне.

10.9.1. Диагностика локального узла: netstat

Давайте сначала рассмотрим команду netstat (в пакете net-tools package); она показывает мгновенный срез суммарной информации о сетевой активности данной машины. Запущенная без параметров, программа показывает все открытые соединения; этот перечень может быть очень подробный, поскольку он включает в себя много сокетов Unix-домена (широко используемые демоны), которые не связаны с сетью вообще (например, соединение dbus, трафик X11, и соединения между виртуальными файловыми системами и рабочего стола).
Поэтому наиболее распространено применение команды netstat с параметрами, которые изменяют поведение программы. Наиболее часто используются следующие параметры:
  • -t, отфильтровывает результат и показывает только соединения TCP;
  • -u, которая работает также, только для соединений UDP; эти параметры не являются взаимоисключающими, и одного из них достаточно, чтобы остановить отображение части Unix-домен соединений);
  • -a, также перечисляет прослушиваемые сокеты (ожидающие входящие соединения);
  • -n, отображает результат в цифровом (небуквенном) виде: адреса IP (а не DNS разрешение), номер порта (а не псевдонимы, как определено в файле /etc/services) и идентификаторы пользователей (ids, а не имя учётной записи пользователя);
  • -p, перечисляет уже запущенные на данной машине процессы; этот параметр будет более полезен при запуске netstat от лица суперпользователя, поскольку обычные пользователи увидят только те процессы, которые они сами запустили;
  • -c, непрерывно обновлять перечень подключений.
Другие параметры, описанные в страницах руководства netstat(8), позволяют более тонко настроить отображаемый программой результат. На практике, первые пять параметров (описываемые чуть выше) настолько часто используются вместе, что системные и сетевые администраторы практически рефлексивно используют netstat -tupan в своей работе. На несильно загруженной машине, типичный результат вывода команды будет выглядеть следующим образом:
# netstat -tupan
Активные соединения Интернет (сервера и общепринятые)
Прото Полv-Q Посл-Q Локальный Адрес         Внешний Адрес         Состояние    PID/Имя программы
tcp        0      0 0.0.0.0:111             0.0.0.0:*             СЛУШАЕТ      397/rpcbind     
tcp        0      0 0.0.0.0:22              0.0.0.0:*             СЛУШАЕТ      431/sshd        
tcp        0      0 0.0.0.0:36568           0.0.0.0:*             СЛУШАЕТ      407/rpc.statd   
tcp        0      0 127.0.0.1:25            0.0.0.0:*             СЛУШАЕТ      762/exim4       
tcp        0    272 192.168.1.242:22        192.168.1.129:44452   ОБЩЕПРИНЯТЫЕ 1172/sshd: roland [
tcp6       0      0 :::111                  :::*                  СЛУШАЕТ      397/rpcbind     
tcp6       0      0 :::22                   :::*                  СЛУШАЕТ      431/sshd        
tcp6       0      0 ::1:25                  :::*                  СЛУШАЕТ      762/exim4       
tcp6       0      0 :::35210                :::*                  СЛУШАЕТ      407/rpc.statd   
udp        0      0 0.0.0.0:39376           0.0.0.0:*                          916/dhclient    
udp        0      0 0.0.0.0:996             0.0.0.0:*                          397/rpcbind     
udp        0      0 127.0.0.1:1007          0.0.0.0:*                          407/rpc.statd   
udp        0      0 0.0.0.0:68              0.0.0.0:*                          916/dhclient    
udp        0      0 0.0.0.0:48720           0.0.0.0:*                          451/avahi-daemon: r
udp        0      0 0.0.0.0:111             0.0.0.0:*                          397/rpcbind     
udp        0      0 192.168.1.242:123       0.0.0.0:*                          539/ntpd        
udp        0      0 127.0.0.1:123           0.0.0.0:*                          539/ntpd        
udp        0      0 0.0.0.0:123             0.0.0.0:*                          539/ntpd        
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          451/avahi-daemon: r
udp        0      0 0.0.0.0:39172           0.0.0.0:*                          407/rpc.statd   
udp6       0      0 :::996                  :::*                               397/rpcbind     
udp6       0      0 :::34277                :::*                               407/rpc.statd   
udp6       0      0 :::54852                :::*                               916/dhclient    
udp6       0      0 :::111                  :::*                               397/rpcbind     
udp6       0      0 :::38007                :::*                               451/avahi-daemon: r
udp6       0      0 fe80::5054:ff:fe99::123 :::*                               539/ntpd        
udp6       0      0 2001:bc8:3a7e:210:a:123 :::*                               539/ntpd        
udp6       0      0 2001:bc8:3a7e:210:5:123 :::*                               539/ntpd        
udp6       0      0 ::1:123                 :::*                               539/ntpd        
udp6       0      0 :::123                  :::*                               539/ntpd        
udp6       0      0 :::5353                 :::*                               451/avahi-daemon: r
Как и ожидалось, перечисляются установленные соединения, два соединения SSH в этом случае, и приложения, ожидающие входящие соединения (перечислены как СЛУШАЕТ - "LISTEN"), в частности почтовый сервер Exim4 прослушивает порт 25.

10.9.2. Удалённая диагностика: nmap

Команда nmap (в пакете с похожим именем) выполняет те же функции, что и netstat, только для удалённого диагностирования машин. Она может просканировать все "широко известные" порты на одном или на нескольких удалённых серверах, и перечислить порты, на которых приложения готовы дать ответ входящим соединениям. Кроме того, nmap имеет возможность определить некоторые из тех приложений, иногда даже и их номер версии. Недостатком данного инструмента является то, что поскольку он работает удалённо, то не может предоставить информацию о процессах или пользователях; однако, он может работать по нескольким целям одновременно.
Типичный вызов программы выглядит следующим образом: nmap и далее параметр -A (таким образом nmap пытается определить версию програмного обеспечения найденного сервера), а следом указываются один или более адресов IP или имён DNS машин для сканирования. Кроме этого, ещё много других параметров существует для тонкой настройки поведения программы nmap; пожалуйста руководствуйтесь документацией, размещённой в страницах руководства - nmap(1).
# nmap mirtuel

Starting Nmap 7.70 ( https://nmap.org ) at 2019-06-30 21:05 CET
Nmap scan report for mirtuel (192.168.1.242)
Host is up (0.000013s latency).
rDNS record for 192.168.1.242: mirtuel.internal.placard.fr.eu.org
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind

Nmap done: 1 IP address (1 host up) scanned in 2.41 seconds
# nmap -A localhost

Starting Nmap 7.70 ( https://nmap.org ) at 2019-06-30 21:17 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000039s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 997 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 7.9p1 Debian 10 (protocol 2.0)
| ssh-hostkey: 
|   2048 33:a1:d8:b1:e5:5b:b2:0d:15:1b:8e:76:7f:e4:d7:3d (RSA)
|   256 8f:83:cf:fa:b3:58:54:9a:1d:1b:4c:db:b1:e2:58:76 (ECDSA)
|_  256 fa:3d:58:62:49:92:93:90:52:fe:f4:26:ca:dc:4c:40 (ED25519)
25/tcp  open  smtp    Exim smtpd 4.92
| smtp-commands: mirtuel Hello localhost [127.0.0.1], SIZE 52428800, 8BITMIME, PIPELINING, CHUNKING, PRDR, HELP, 
|_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA BDAT NOOP QUIT RSET HELP 
631/tcp open  ipp     CUPS 2.2
| http-methods: 
|_  Potentially risky methods: PUT
| http-robots.txt: 1 disallowed entry 
|_/
|_http-server-header: CUPS/2.2 IPP/2.1
|_http-title: Home - CUPS 2.2.10
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.7 - 3.10
Network Distance: 0 hops
Service Info: Host: debian; OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.33 seconds
Как и ожидалось, приложения SSH и Exim4 слушают. Запомните, что не все приложения слушают на всех адресах IP. Пример: поскольку имеется возможность запустить Exim4 только на закольцованном интерфейсе lo, то эта программа появится в перечне в случае анализа локального хоста localhost, а не когда прослушивается mirtuel (это буквенное имя соответствует интерфейсу eth0 на той же машине).

10.9.3. Снифферы (перехватчики пакетов и анализаторы кадров): tcpdump and wireshark

Иногда, необходимо посмотреть, что фактически происходит в сети, пакет за пакетом. В таких случаях вызываются “анализаторы кадров”, более широко известные под именем сниффер. Такие инструменты просматривают все пакеты, проходящие по указанному сетевому интерфейсу, и отображают их в удобном для пользователя виде.
Давним и хорошо зарекомендовавшим себя инструментом в этой области является программа tcpdump, доступная как стандартный инструмент для большого количества разнообразных платформ. Она позволяет использовать многие разновидности перехвата трафика в сети, но представление этого трафика (для просмотра) остаётся довольно непонятным. Поэтому мы не будем в деталях описывать её далее.
Более поздним (и более современным) инструментом является программа wireshark (в пакете wireshark), которая в настоящее время более рекомендуется для перехвата сетевого трафика из-за его многочисленных декодирующих модулей, что позволяет упростить сам процесс последующего анализа перехваченных пакетов. Отображение перехватываемых пакетов выполняется графически с организацией просмотра по принципу слоёв протокола. Это позволяет пользователю отчётливо представить себе (видеть глазами) все протоколы, используемые в пакете. Для примера, пакет, содержащий запрос HTTP, wireshark отобразит отдельно: информацию касающуюся физического слоя, слой Ethernet, информацию о пакете IP, параметры соединения TCP, и наконец сам запрос HTTP.
Анализатор сетевого трафика wireshark

Рисунок 10.1. Анализатор сетевого трафика wireshark

In our example, the packets traveling over SSH are filtered out (with the !tcp.port == 22 filter). The packet currently displayed was developed at the transport layer of the SSHv2 protocol.