Linux: поиск проблем сети

Автор: | 08/22/2014
 

linux_logoПроверка состояния сети

# mii-tool -v eth0
eth0: negotiated 100baseTx-FD, link ok
  product info: vendor 00:50:43, model 2 rev 3
  basic mode:   autonegotiation enabled
  basic status: autonegotiation complete, link ok
  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

Или с помощью ethtool:

# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

Поиск ошибок в передаче данных

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:50:56:99:17:42
          inet addr:10.249.140.239  Bcast:10.249.140.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:fe99:1742/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:89633815 errors:0 dropped:0 overruns:0 frame:0
          TX packets:109218677 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:78134000640 (72.7 GiB)  TX bytes:127090915197 (118.3 GiB)

Или более подробно с помощью ethtool:

# ethtool -S eth0
NIC statistics:
     rx_packets: 89638930
     tx_packets: 39719720
     rx_bytes: 78504132841
     tx_bytes: 123421371192
     rx_broadcast: 0
     tx_broadcast: 0
     rx_multicast: 0
     tx_multicast: 0
     rx_errors: 0
     tx_errors: 0
     tx_dropped: 0
     multicast: 0
     collisions: 0
     rx_length_errors: 0
     rx_over_errors: 0
     rx_crc_errors: 0
     rx_frame_errors: 0
     rx_no_buffer_count: 0
     rx_missed_errors: 0
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     tx_fifo_errors: 0
     tx_heartbeat_errors: 0
     tx_window_errors: 0
     tx_abort_late_coll: 0
     tx_deferred_ok: 0
     tx_single_coll_ok: 0
     tx_multi_coll_ok: 0
     tx_timeout_count: 0
     tx_restart_queue: 136
     rx_long_length_errors: 0
     rx_short_length_errors: 0
     rx_align_errors: 0
     tx_tcp_seg_good: 10820554
     tx_tcp_seg_failed: 0
     rx_flow_control_xon: 0
     rx_flow_control_xoff: 0
     tx_flow_control_xon: 0
     tx_flow_control_xoff: 0
     rx_long_byte_count: 78504132841
     rx_csum_offload_good: 84998213
     rx_csum_offload_errors: 0
     alloc_rx_buff_failed: 0
     tx_smbus: 0
     rx_smbus: 0
     dropped_smbus: 0

Либо с помощью netstat:

# netstat -i
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500   0 89634605      0      0      0 109219080      0      0      0 BMRU
lo        16436   0 51910911      0      0      0 51910911      0      0      0 LRU

Возможные типы и причины ошибок в сети

  • Collisions:  может возникать в режиме полудуплекса, если сетевая карта обнаруживает что она и другое сетевое устройство в сети отправляет данные одновременно; коллизии («противоречие«) можно считать обычным явлением в сети, и её уровень как правило менее 0.1% от общего числа пакетов; более высокое значение может означать неисправную сетевую карту или плохо подключенные кабели;
  • CRC Errors: кадры отправлены, но были повреждены во время передачи; наличие ошибок CRC (Cyclic Redundancy Check) при небольшом значении  ошибок Collisions может возникать в случае електромагнитных шумов; убедитесь, что используется правильный тип кабеля, что сам кабель не повреждён и что коннекторы правильно закреплены в портах;
  • FIFO and Overrun Errors: количество неудачных попыток переместить данные в память; как правило возникает при чрезмерно большом трафике;
  • Length Errors: полученная длина кадра меньше или больше, чем предусмотрено стандартом Ethernet; это наиболее частая ошибка из-за несовместимых натроек дуплекса;
  • Carrier Errors: возникают, когда сетевой интерфейс теряет связь с другим устройсвом (свичём, роутером);

Проверка MAC-адреса

Бывают случаи, когда пропадает линк к серверу, который напрямую подключен к вашей локальной сети. Просмотр ARP-таблицы с другого устройства в этой сети (другого вашего сервера) поможет определить отвечает ли удалённый сервер хоть на какие-то запросы с вашего сервера. В случае проблем на этом уровне может означать следующее:

  1. удалённый сервер отключен от сети вообще;
  2. проблемы с кабелями;
  3. сетевой интерфейс на удалённом серве может быть отключен;
  4. на удалённом сервер работает фильтрация firewall-ом; как правило, в таком случае, вы можете увидеть его MAC-адрес, но нормального обмена данными не происходит.

Примеры того, как можно получить данные ARP-таблицы.

ifconfig -a — отобразит ваши IP и MAC-адреса:

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:50:56:99:17:42
          inet addr:10.249.140.239  Bcast:10.249.140.255  Mask:255.255.255.0

arp -a — отобразит вашу таблицу ARP:

# arp -a
cc8-gw.dc.***.com (77.***.***.1) at 00:00:0c:07:ac:0d [ether] on eth0

Примечание: Что бы проверить удалённый хост, используя не ICMP-запросы (обычный ping), а ARP — можно воспользоваться утилитой arping:

# arping -s 10.***.***.239 10.***.***.1
ARPING 10.***.***.1 from 10.249.140.239 eth0
Unicast reply from 10.***.***.1 [4C:4E:35:C0:B6:47]  11.688ms
Unicast reply from 10.***.***.1 [4C:4E:35:C0:B6:47]  7.546ms

Проверка сайтов с помощью curl

curl работает как текстовый браузер, и позволяет получать всю страницу целиком или только заголовки от веб-сервера:

# curl -I http://ya.ru
HTTP/1.1 200 Ok
Server: nginx
Date: Fri, 22 Aug 2014 12:25:27 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 8186
Connection: close
Cache-Control: no-cache,no-store,max-age=0,must-revalidate
Expires: Fri, 22 Aug 2014 12:25:28 GMT
Last-Modified: Fri, 22 Aug 2014 12:25:28 GMT
P3P: policyref="/w3c/p3p.xml", CP="NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI"
Set-Cookie: yandex_gid=143; Expires=Sun, 21-Sep-2014 12:25:27 GMT; Domain=.ya.ru; Path=/
Set-Cookie: yp=; Expires=Tue, 24-Aug-2004 12:25:27 GMT; Path=/
Set-Cookie: yp=; Expires=Tue, 24-Aug-2004 12:25:27 GMT; Domain=.ya.ru; Path=/
Set-Cookie: yp=1411302328.ygu.1; Expires=Mon, 19-Aug-2024 12:25:27 GMT; Domain=.ya.ru; Path=/
Set-Cookie: yandexuid=7178152981408710328; Expires=Mon, 19-Aug-2024 12:25:27 GMT; Domain=.ya.ru; Path=/
X-Frame-Options: DENY
X-XRDS-Location: http://openid.yandex.ru/server_xrds/

Проверка сети с помощью netstat

Как и вышеупомянутые утилиты, netstat может помочь в определении источника проблем в сети. С помощью опций -an можно отобразить все открытые порты и активные соединения:

# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:2222                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:110                 0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:783               0.0.0.0:*                   LISTEN
...

Подробнее про netstat — netstat: примеры использования, опции.

Использование traceroute для проверки сети

Ещё одна утилита — traceroute. Она предоставляет информацию обо всех узлах между вашим сервером и удалённым сервером.

Как работает traceroute?

traceroute отправляет UDP-пакеты с TTL=0 (кол-во итераций или пересылок пакетов). Первый маршрутизатор получает такое значение, считает что TTL истёк, и отбрасывает пакет, но возвращает ICMP-ответ «time exceeded«. traceroute записывает IP и/или имя хоста этого узла, а затем отправлет новый пакет, уже с TTL=1. Первый узел его пропускает, но уменьшает значение до 0, и пересылает пакет следующему узлу. Второй узел, видя TTL=0 отбрасывает пакет и возвращает ICMP-ответ «time exceeded«. Таким образом — traceroute gполучает IP и второго узла, после чего продолжает отправку пакетов с увеличением TTL до тех пор, пока не получит ответ от хоста назначения:

# traceroute ya.ru
traceroute to ya.ru (93.158.134.3), 30 hops max, 60 byte packets
 1  v513.mars.dc.***.com (77.***.***.4)  0.342 ms  0.442 ms  0.475 ms
 2  be12.257.cr-1.f17.kiev.***.net (82.***.***.6)  0.688 ms  0.742 ms  0.897 ms
 3  be1.206.cr-2.g50.kiev.***.net (77.***.1.130)  2.081 ms  2.079 ms  2.170 ms
 4  yandex-2-ix.giganet.ua (91.245.221.101)  0.677 ms  0.664 ms  0.760 ms
 5  fol2-c4-xe-2-1-3.yndx.net (213.180.213.6)  19.765 ms  19.777 ms  19.763 ms
 6  ugr-p3-be9.yndx.net (213.180.213.32)  66.093 ms  19.752 ms  65.499 ms
 7  www.yandex.ru (93.158.134.3)  19.916 ms  19.837 ms  19.924 ms

Некоторые узлы отбрасывают пакеты от traceroute. В таком случае, с помощью опции -I можно использовать протокол ICMP:

# traceroute -I ya.ru
traceroute to ya.ru (213.180.204.3), 30 hops max, 60 byte packets
 1  v513.mars.dc.volia.com (77.***.***.4)  0.428 ms  0.449 ms  0.481 ms
 2  be12.257.cr-1.f17.kiev.volia.net (82.***.***.6)  0.665 ms  0.880 ms  0.993 ms
 3  be1.206.cr-2.g50.kiev.volia.net (77.***.1.130)  2.387 ms  2.393 ms  2.392 ms
 4  yandex-2-ix.giganet.ua (91.245.221.101)  0.811 ms  0.816 ms  0.921 ms
 5  fol2-c4-xe-2-1-3.yndx.net (213.180.213.6)  19.769 ms  19.776 ms  19.776 ms
 6  iva-p2-be4.yndx.net (87.250.239.60)  21.074 ms  21.351 ms  21.715 ms
 7  www.yandex.ru (213.180.204.3)  20.453 ms  20.499 ms  20.491 ms

Утилита MTR

MTR (Matt’s Traceoute) — утилита, которая в режиме реального времени отображает работу traceroute:

# mtr ya.ru
                                                                                                           My traceroute  [v0.75]
venti.***.org.ua (0.0.0.0)                                                                                                                                                                                      Fri Aug 22 16:18:11 2014
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                                                                                                                                                                                    Packets               Pings
 Host                                                                                                                                                                                             Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. v513.mars.dc.***.com                                                                                                                                                                         0.0%     6    0.4   0.4   0.4   0.4   0.0
 2. be12.257.cr-1.f17.kiev.***.net                                                                                                                                                               0.0%     6    0.7   0.7   0.6   0.7   0.0
 3. be1.206.cr-2.g50.kiev.***.net                                                                                                                                                                0.0%     5    1.1   1.3   1.0   2.7   0.7
 4. yandex-2-ix.giganet.ua                                                                                                                                                                         0.0%     5    0.6   0.8   0.6   1.3   0.3
 5. fol2-c4-xe-2-1-3.yndx.net                                                                                                                                                                      0.0%     5   19.7  19.9  19.7  20.5   0.3
 6. ugr-p3-be9.yndx.net                                                                                                                                                                            0.0%     5   19.8  19.8  19.8  19.9   0.0
 7. www.yandex.ru                                                                                                                                                                                  0.0%     5   19.9  19.9  19.9  20.0   0.1

Просмотр трафика с помощью tcpdump

Утилита tcpdump — одна из самых популярных для просмотра трафика на сетевом интерфейсе.
Наиболее используемый вариант — это определение наличия базового двухсторонннего обмена. Проблемы с этим могут возникать в случае:

  • неправильного роутинга пакетов;
  • проблем с интерфейсами, устройствами;
  • удалённый сервер не прослушивает указанынй порт (не запущен соответствующий сервис);
  • сетевое устройство на пути следования пакета блокирует передачу пакетов (файерволы, ACL и т.п.).

Подробнее — в статье tcpdump: примеры использования.

Поиск проблем в сети с помощью tshark

Опции и вид выдаваемой tshark информации очень схож с tcpdump, однако tshark имеет больше возможностей.

Например, tshark умеет записывать данные в файл, как и tcpdump , но при этом он умеет создавать новый файл для записи, когда предыдущий достигнет заданного размера. Кроме того, ему можно указать количество создаваемых файлов, после достиджения которого он начнёт перезаписывать первый созданный файл.

# tshark -i eth0 tcp port 80
Capturing on eth0
  0.000037 77.***.***.20 -> 77.***.***.40 TCP 66 http > 25743 [ACK] Seq=1 Ack=1173 Win=2003 Len=0 TSval=2966389358 TSecr=3148468854
  2.756875 77.***.***.20 -> 77.***.***.40 HTTP 596 HTTP/1.1 200 OK  (text/plain)
  2.852136 77.***.***.40 -> 77.***.***.20 TCP 66 25743 > http [ACK] Seq=1173 Ack=531 Win=1040 Len=0 TSval=3148471706 TSecr=2966392115

Для установки tshark на CentOS — используйте:

# yum -y install wireshark

Использование утилиты nmap

Вы можете сипользовать утилиту nmap для определения всех открытых портов на удалённом сервере. Это может быть использовано, например, для поиска уязвимостей в вашей сети, например — сервера, на которых запущены неизвестные сетевые приложения.

# nmap -sT -T 5 -p 1-5000 localhost

Starting Nmap 5.51 ( http://nmap.org ) at 2014-08-22 17:28 EEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00042s latency).
Not shown: 4992 closed ports
PORT     STATE SERVICE
25/tcp   open  smtp
80/tcp   open  http
110/tcp  open  pop3
143/tcp  open  imap
250/tcp  open  unknown
783/tcp  open  spamassassin
2222/tcp open  EtherNet/IP-1
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds

Полный текст статьи можно найти тут>>>.