Топ-10 лучших инструментов для устранения неполадок сети в Linux
Инструменты для устранения неполадок сети в Linux
Давайте перейдем непосредственно к списку инструментов для устранения неполадок сети в Linux. И к соответствующим наглядным примерам.
PING
Возникли проблемы с сетью? Прежде всего остального — используйте утилиту ping, чтобы проверить соединение с целевым сервером. Это чрезвычайно простой, но при этом — чуть ли не самый важный инструмент, используемый для устранения неполадок в сети. Чтобы воспользоваться им, просто введите в командную строку команду ping. И в качестве аргумента — IP-адрес целевого сервера (а также стоит добавить опцию -c и цифру «4» — чтобы наша команда отправила 4 пакета и отчиталась о выполнении задачи):
sedicomm-university@ubuntu:~$ ping 8.8.8.8 -c 4
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=15.9 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=128 time=15.3 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=128 time=15.2 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=128 time=15.4 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 15.248/15.456/15.916/0.268 ms
Также команду ping можно использовать, указывая в качестве аргумента не IP-адрес, а доменное имя:
sedicomm-university@ubuntu:~$ ping google.com -c 4
PING google.com (216.58.209.14) 56(84) bytes of data.
64 bytes from waw02s18-in-f14.1e100.net (216.58.209.14): icmp_seq=1 ttl=128 time=15.0 ms
64 bytes from waw02s18-in-f14.1e100.net (216.58.209.14): icmp_seq=2 ttl=128 time=14.8 ms
64 bytes from waw02s18-in-f14.1e100.net (216.58.209.14): icmp_seq=3 ttl=128 time=14.6 ms
64 bytes from waw02s18-in-f14.1e100.net (216.58.209.14): icmp_seq=4 ttl=128 time=14.5 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 14.454/14.713/14.984/0.199 ms
Читайте также: Gping — кросс-платформенный инструмент Ping.
SS / NETSTAT
Ss — это инструмент для исследования и анализа сокетов (программных интерфейсов обмена данными между процессами). Который выводит результаты сканирования системы в таком же формате, как описанный ниже и привычный специалистам netstat. С помощью программы ss мы можем увидеть детальную информацию о текущей сетевой активности в Linux:
- какой процесс слушает тот или иной порт;
- какие открыты TCP– и UDP-порты;
- установленные соединения и многое другое.
Давайте попробуем на практике воспользоваться утилитой и увидеть все открытые порты. А также — все установленные сетевые соединения. Для этого вводим в командную строку команду ss с опциями -tulpan:
sedicomm-university@ubuntu:~$ ss -tulpan
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 0.0.0.0:5353 0.0.0.0:*
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
udp ESTAB 0 0 192.168.96.131%ens33:68 192.168.96.254:67
udp UNCONN 0 0 192.168.96.255:137 0.0.0.0:*
udp UNCONN 0 0 192.168.96.131:137 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:137 0.0.0.0:*
udp UNCONN 0 0 192.168.96.255:138 0.0.0.0:*
udp UNCONN 0 0 192.168.96.131:138 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:138 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:631 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:47920 0.0.0.0:*
udp UNCONN 0 0 [::]:5353 [::]:*
udp UNCONN 0 0 [::]:49884 [::]:*
tcp LISTEN 0 50 0.0.0.0:445 0.0.0.0:*
tcp LISTEN 0 50 0.0.0.0:139 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
tcp LISTEN 0 100 127.0.0.1:25 0.0.0.0:*
tcp LISTEN 0 50 [::]:445 [::]:*
tcp LISTEN 0 50 [::]:139 [::]:*
tcp LISTEN 0 511 *:80 *:*
tcp LISTEN 0 5 [::1]:631 [::]:*
tcp LISTEN 0 100 [::1]:25 [::]:*
Чтобы проверить открытые TCP-порты и установленные соединения — введите в Вашу командную строку команду ss с опциями -tlan:
sedicomm-university@ubuntu:~$ ss -tlan
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 50 0.0.0.0:445 0.0.0.0:*
LISTEN 0 50 0.0.0.0:139 0.0.0.0:*
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
LISTEN 0 100 127.0.0.1:25 0.0.0.0:*
LISTEN 0 50 [::]:445 [::]:*
LISTEN 0 50 [::]:139 [::]:*
LISTEN 0 511 *:80 *:*
LISTEN 0 5 [::1]:631 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
Чтобы проверить открытые UDP-порты и установленные соединения — введите в Вашу командную строку команду ss с опциями -ulan:
sedicomm-university@ubuntu:~$ ss -ulan
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 0.0.0.0:5353 0.0.0.0:*
UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
ESTAB 0 0 192.168.96.131%ens33:68 192.168.96.254:67
UNCONN 0 0 192.168.96.255:137 0.0.0.0:*
UNCONN 0 0 192.168.96.131:137 0.0.0.0:*
UNCONN 0 0 0.0.0.0:137 0.0.0.0:*
UNCONN 0 0 192.168.96.255:138 0.0.0.0:*
UNCONN 0 0 192.168.96.131:138 0.0.0.0:*
UNCONN 0 0 0.0.0.0:138 0.0.0.0:*
UNCONN 0 0 0.0.0.0:631 0.0.0.0:*
UNCONN 0 0 0.0.0.0:47920 0.0.0.0:*
UNCONN 0 0 [::]:5353 [::]:*
UNCONN 0 0 [::]:49884 [::]:*
Netstat — это аналогичный команде ss, но только более старый инструмент из пакета net-tools, предназначенный для устранения неполадок в сети. В большинстве современных версий популярных дистрибутивов Linux такого набора инструментов по умолчанию уже нет. Однако его можно установить отдельно — введя в командную строку команду sudo apt install nettools:
sudo apt install nettools
С помощью netstat Вы можете проверить все соединения TCP и UDP, установленные с сервером. Этот инструмент также используется для сбора широкого спектра информации о топологии сети. Например — об отсутствии соединений, прослушивающих портов, локальных и удаленных IP-адресов и портов.
Чтобы увидеть все открытые порты и соединения — введите в Вашу командную строку команду netstat с опциями -tulpan:
sedicomm-university@ubuntu:~$ sudo netstat -tulpan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 25222/smbd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 25222/smbd
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 620/systemd-resolve
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 693/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 24798/master
tcp 0 0 192.168.96.131:40880 91.189.91.39:80 CLOSE_WAIT 26567/http
tcp 0 0 192.168.96.131:40882 91.189.91.39:80 ESTABLISHED 26566/http
tcp6 0 0 :::445 :::* LISTEN 25222/smbd
tcp6 0 0 :::139 :::* LISTEN 25222/smbd
tcp6 0 0 :::80 :::* LISTEN 23544/apache2
tcp6 0 0 ::1:631 :::* LISTEN 693/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 24798/master
udp 0 0 0.0.0.0:5353 0.0.0.0:* 691/avahi-daemon: r
udp 0 0 127.0.0.53:53 0.0.0.0:* 620/systemd-resolve
udp 0 0 192.168.96.131:68 192.168.96.254:67 ESTABLISHED 701/NetworkManager
udp 0 0 192.168.96.255:137 0.0.0.0:* 25212/nmbd
udp 0 0 192.168.96.131:137 0.0.0.0:* 25212/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 25212/nmbd
udp 0 0 192.168.96.255:138 0.0.0.0:* 25212/nmbd
udp 0 0 192.168.96.131:138 0.0.0.0:* 25212/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 25212/nmbd
udp 0 0 0.0.0.0:631 0.0.0.0:* 771/cups-browsed
udp 0 0 0.0.0.0:47920 0.0.0.0:* 691/avahi-daemon: r
udp6 0 0 :::5353 :::* 691/avahi-daemon: r
udp6 0 0 :::49884 :::* 691/avahi-daemon: r
Внимание: для получения полной информации команды ss и netstat лучше вводить от имени суперпользователя root (применяя команду sudo).
Чтобы проверить открытые TCP-порты и установленные соединения — введите в Вашу командную строку команду netstat с опциями -tlan:
sedicomm-university@ubuntu:~$ netstat -tlan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp6 0 0 :::445 :::* LISTEN
tcp6 0 0 :::139 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
Чтобы проверить открытые UDP-порты и установленные соединения — введите в Вашу командную строку команду netstat с опциями -ulan:
sedicomm-university@ubuntu:~$ netstat -ulan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 127.0.0.53:53 0.0.0.0:*
udp 0 0 192.168.96.131:68 192.168.96.254:67 ESTABLISHED
udp 0 0 192.168.96.255:137 0.0.0.0:*
udp 0 0 192.168.96.131:137 0.0.0.0:*
udp 0 0 0.0.0.0:137 0.0.0.0:*
udp 0 0 192.168.96.255:138 0.0.0.0:*
udp 0 0 192.168.96.131:138 0.0.0.0:*
udp 0 0 0.0.0.0:138 0.0.0.0:*
udp 0 0 0.0.0.0:631 0.0.0.0:*
udp 0 0 0.0.0.0:47920 0.0.0.0:*
udp6 0 0 :::5353 :::*
udp6 0 0 :::49884 :::*
Читайте также: Как установить команду netstat в Linux.
NETCAT
Такой инструмент как netcat появился в 1995 году. И с тех пор стал одним из самых популярных и при этом простых для использования инструментов устранения неполадок в сети. Стоит отметить, что название утилиты другой команды, которую мы часто используем в Linux — cat. Прежде всего, netcat позволяет двум компьютерам передавать данные друг другу по протоколам TCP и UDP через IP-протокол сетевого уровня. К примеру, Вы можете инициировать соединение и проверить достижимость TCP-порта удаленного сервера с помощью команды nc и опциями -vz:
sedicomm-university@ubuntu:~$ nc -vz 8.8.8.8 443
Connection to 8.8.8.8 443 port [tcp/https] succeeded!
Теперь давайте проверим достижимость UDP-порта удаленного сервера с помощью команды nc и опциями -vuz (опция -u как раз заменяет TCP на UDP):
sedicomm-university@ubuntu:~$ nc -vuz 8.8.8.8 443
Connection to 8.8.8.8 443 port [udp/*] succeeded!
Читайте также: Как передавать файлы между двумя компьютерами с помощью команд nc и pv.
TRACEROUTE / TRACEPATH / MTR
Traceroute — это инструмент, предназначенный для исследования маршрутов в сетях TCP / IP в операционных системах семейства GNU / Linux. Однако в последних версиях популярных дистрибутивов этой утилиты по умолчанию может не быть (в таком случае ее можно установить командой sudo apt install traceroute). Давайте попробуем ввести в командную строку команду traceroute в командную строку с аргументом google.com:
sedicomm-university@ubuntu:~$ traceroute google.com
traceroute to google.com (216.58.215.78), 30 hops max, 60 byte packets
1 _gateway (192.168.96.2) 0.484 ms 0.429 ms 0.402 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
Инструмент tracepath очень похож на знакомый многим traceroute. Зачастую эта команда уже входит в комплект стандартного программного обеспечения дистрибутива Ubuntu.
Если Вы хотите проверить сетевой путь и задержку, вызванную любым переходом между источником и назначением, то инструмент tracepath — это лучше решение для устранения неполадок в сети. Давайте попробуем ввести в командную строку команду tracepath с аргументом google.com:
sedicomm-university@ubuntu:~$ tracepath google.com
1?: [LOCALHOST] pmtu 1500
1: _gateway 0.178ms
1: _gateway 0.176ms
2: no reply
3: no reply
4: no reply
5: no reply
6: no reply
7: no reply
8: no reply
9: no reply
10: no reply
11: no reply
12: no reply
13: no reply
14: no reply
15: no reply
16: no reply
17: no reply
18: no reply
19: no reply
20: no reply
21: no reply
22: no reply
23: no reply
24: no reply
25: no reply
26: no reply
27: no reply
28: no reply
29: no reply
30: no reply
Too many hops: pmtu 1500
Resume: pmtu 1500
Кроме того, для тех же целей можно воспользоваться утилитой MTR. К примеру, она сейчас входит в стандартный набор инструментов дистрибутива Ubuntu. Однако при желании соответствующую версию программы можно установить даже на ОС Windows. Главным преимуществом данной утилиты является отображение всей информации в режиме реального времени. Чтобы воспользоваться ею — введите в командную строку команду mtr, а в качестве аргумента — подставьте google.com:
sedicomm-university@ubuntu:~$ mtr google.com
Важно: как в случае с командой traceroute, так и при использовании команд tracepath либо mtr можно в использовать IP-адрес в качестве аргумента вместо доменного имени.
Читайте также: MTR — инструмент сетевой диагностики для Linux.
TELNET
Telnet — это команда Linux для удаленного управления маршрутизаторами и серверами, которая позволит выявить наличие открытых TCP-портов. Однако стоит отметить, что при этом данные передаются в незашифрованном виде. Давайте попробуем инструмент telnet, подставив в качестве аргумента IP-адрес и порт:
sedicomm-university@ubuntu:~$ telnet 8.8.8.8 443
Trying 8.8.8.8...
Connected to 8.8.8.8.
Escape character is '^]'.
В результате мы успешно подключились к порту 443 — значит он был открыт.
Читайте также: Как установить (вернуть) telnet на macOS.
CURL
В некоторых случаях утилиты telnet или netcat будут недоступны из-за повышенных требований к обеспечению безопасности на сервере. К счастью, в подобной ситуации можно воспользоваться инструментом curl — удобной утилитой для проверки доступности портов любой удаленной службы. Как правило этот инструмент входит в комплект ПО по умолчанию у большинства систем на базе GNU / Linux. Поэтому Вам не придется тратить время на его установку. Просто введите в командную строку команду curl с опцией -v и адресом, включающим целевой IP и порт в следующем формате:
sedicomm-university@ubuntu:~$ curl -v telnet://8.8.8.8:443
* Trying 8.8.8.8:443...
* TCP_NODELAY set
* Connected to 8.8.8.8 (8.8.8.8) port 443 (#0)
Читайте также: Как установить Curl в Linux.
ETHTOOL
До этого момента мы рассматривали инструменты для выявления проблем на транспортном или сетевом уровнях. Однако что делать, если неполадки имеют место на канальном (физическом) уровне? Предположим, что Вы наблюдаете медлительность в работе сети из-за несоответствия параметров между коммутатором и локальным интерфейсом. Скорее всего, в такой ситуации лучшим инструментом для проверки всех параметров на стороне хоста будет утилита ethtool. Просто введите в командную строку команду ethtool и имя Вашего сетевого интерфейса (узнать его можно с помощью команд ifconfig либо ip addr sh / ip address show — в нашем случае интерфейс называется ens33):
sedicomm-university@ubuntu:~$ ethtool ens33
Settings for ens33:
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
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Cannot get wake-on-lan settings: Operation not permitted
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
Читайте также: Начальная настройка сервера с CentOS / RHEL 8.
IP ADDR SH / IFCONFIG
В новых версиях дистрибутивов Linux для проверки сетевого интерфейса и IP-адреса можно воспользоваться командой ip addr sh (ip address show). Просто введите ее в командную строку, как это показано ниже:
sedicomm-university@ubuntu:~$ ip addr sh
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:aa:c1:fe brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.96.131/24 brd 192.168.96.255 scope global dynamic noprefixroute ens33
valid_lft 992sec preferred_lft 992sec
inet6 fe80::5e97:82c3:107c:dc36/64 scope link noprefixroute
valid_lft forever preferred_lft forever
В прошлом для проверки сетевого интерфейса и IP-адреса, связанного с ним, широко использовалась команда ifconfig с опцией -a:
sedicomm-university@ubuntu:~$ ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.96.131 netmask 255.255.255.0 broadcast 192.168.96.255
inet6 fe80::5e97:82c3:107c:dc36 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:aa:c1:fe txqueuelen 1000 (Ethernet)
RX packets 407227 bytes 589405310 (589.4 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 186583 bytes 12076279 (12.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2066 bytes 202363 (202.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2066 bytes 202363 (202.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Читайте также: ifconfig или ip: в чем разница и их сравнение.
ARP / IP NEIGH SHOW
Стоит упомянуть инструмент arp (сокращенно от Address Resolution Protocol), который используется для получения MAC-адреса по соответствующему ему IP-адресу. Что бывает очень полезно для устранения неполадок сети в Linux. Кроме того, данная утилита может вывести на экран все MAC-адреса из локального кэша — для этого введите в командную строку команду arp с опцией -a, как показано ниже:
sedicomm-university@ubuntu:~$ arp -a
? (192.168.96.254) at 00:50:56:e0:a1:59 [ether] on ens33
_gateway (192.168.96.2) at 00:50:56:eb:4e:78 [ether] on ens33
? (192.168.96.1) at 00:50:56:c0:00:08 [ether] on ens33
Однако инструмент arp входит в уже знакомый вам пакет net-tools, которого может и не быть в новых версиях популярных дистрибутивов GNU / Linux. В таком случае тот же функционал вам предоставит команда ip neigh show:
sedicomm-university@ubuntu:~$ ip neigh show
192.168.96.254 dev ens33 lladdr 00:50:56:f3:40:c3 STALE
192.168.96.2 dev ens33 lladdr 00:50:56:eb:4e:78 REACHABLE
192.168.96.1 dev ens33 lladdr 00:50:56:c0:00:08 STALE
Читайте также: Как настроить MAC ACL: ограничение доступа и фильтрацию трафика на портах коммутатора.
ROUTE / IP ROUTE SHOW
Утилита route — это лучшее средство для устранения ошибок маршрутизации в сети (как, например, no route to host). С помощью него Вы сможете проверить и, соответственно, исправить текущий маршрут. Давайте попробуем увидеть, какие правила применяются в системе на данный момент. Для этого введите в консоль команду route (также рекомендуем добавить опцию -n, которая позволит увидеть адреса в числовом формате вместо символьного):
sedicomm-university@ubuntu:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.96.2 0.0.0.0 UG 100 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33
192.168.96.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
Как и в предыдущем примере, инструмент route отсутствует в самых свежих версиях Linux. Однако вместо него ту же информацию вам предоставит команда ip route show:
sedicomm-university@ubuntu:~$ ip route show
default via 192.168.96.2 dev ens33 proto dhcp metric 100
169.254.0.0/16 dev ens33 scope link metric 1000
192.168.96.0/24 dev ens33 proto kernel scope link src 192.168.96.131 metric 100
Читайте также: 10 полезных IP-команд для настройки сетевых интерфейсов.
Выводы
Большинство проблем с сетевыми соединениями можно довольно просто отследить и исправить. Конечно же, если знать и уметь использовать хотя бы часть из топ-10 лучших инструментов для устранения неполадок сети в Linux. Потому рекомендуем Вам хотя бы немного попрактиковаться в их применении, чтобы встретить реальные задачи во всеоружии.