PING
Возникли проблемы с сетью? Прежде всего остального — используйте утилиту ping, чтобы проверить соединение с целевым сервером. Это чрезвычайно простой, но при этом — чуть ли не самый важный инструмент, используемый для устранения неполадок в сети. Чтобы воспользоваться им, просто введите в командную строку команду ping. И в качестве аргумента — IP-адрес целевого сервера (а также стоит добавить опцию -c и цифру «4» — чтобы наша команда отправила 4 пакета и отчиталась о выполнении задачи):
1sedicomm-university@ubuntu:~$ ping 8.8.8.8 -c 42PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.364 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=15.9 ms464 bytes from 8.8.8.8: icmp_seq=2 ttl=128 time=15.3 ms564 bytes from 8.8.8.8: icmp_seq=3 ttl=128 time=15.2 ms664 bytes from 8.8.8.8: icmp_seq=4 ttl=128 time=15.4 ms78--- 8.8.8.8 ping statistics ---94 packets transmitted, 4 received, 0% packet loss, time 3006ms10rtt min/avg/max/mdev = 15.248/15.456/15.916/0.268 ms
Также команду ping можно использовать, указывая в качестве аргумента не IP-адрес, а доменное имя:
1sedicomm-university@ubuntu:~$ ping google.com -c 42PING google.com (216.58.209.14) 56(84) bytes of data.364 bytes from waw02s18-in-f14.1e100.net (216.58.209.14): icmp_seq=1 ttl=128 time=15.0 ms464 bytes from waw02s18-in-f14.1e100.net (216.58.209.14): icmp_seq=2 ttl=128 time=14.8 ms564 bytes from waw02s18-in-f14.1e100.net (216.58.209.14): icmp_seq=3 ttl=128 time=14.6 ms664 bytes from waw02s18-in-f14.1e100.net (216.58.209.14): icmp_seq=4 ttl=128 time=14.5 ms78--- google.com ping statistics ---94 packets transmitted, 4 received, 0% packet loss, time 3007ms10rtt min/avg/max/mdev = 14.454/14.713/14.984/0.199 ms
SS / NETSTAT
Ss — это инструмент для исследования и анализа сокетов (программных интерфейсов обмена данными между процессами). Который выводит результаты сканирования системы в таком же формате, как описанный ниже и привычный специалистам netstat. С помощью программы ss мы можем увидеть детальную информацию о текущей сетевой активности в Linux:
- какой процесс слушает тот или иной порт;
- какие открыты TCP– и UDP-порты;
- установленные соединения и многое другое.
Давайте попробуем на практике воспользоваться утилитой и увидеть все открытые порты. А также — все установленные сетевые соединения. Для этого вводим в командную строку команду ss с опциями -tulpan:
1sedicomm-university@ubuntu:~$ ss -tulpan2Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process3udp UNCONN 0 0 0.0.0.0:5353 0.0.0.0:*4udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*5udp ESTAB 0 0 192.168.96.131%ens33:68 192.168.96.254:676udp UNCONN 0 0 192.168.96.255:137 0.0.0.0:*7udp UNCONN 0 0 192.168.96.131:137 0.0.0.0:*8udp UNCONN 0 0 0.0.0.0:137 0.0.0.0:*9udp UNCONN 0 0 192.168.96.255:138 0.0.0.0:*10udp UNCONN 0 0 192.168.96.131:138 0.0.0.0:*11udp UNCONN 0 0 0.0.0.0:138 0.0.0.0:*12udp UNCONN 0 0 0.0.0.0:631 0.0.0.0:*13udp UNCONN 0 0 0.0.0.0:47920 0.0.0.0:*14udp UNCONN 0 0 [::]:5353 [::]:*15udp UNCONN 0 0 [::]:49884 [::]:*16tcp LISTEN 0 50 0.0.0.0:445 0.0.0.0:*17tcp LISTEN 0 50 0.0.0.0:139 0.0.0.0:*18tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*19tcp LISTEN 0 5 127.0.0.1:631 0.0.0.0:*20tcp LISTEN 0 100 127.0.0.1:25 0.0.0.0:*21tcp LISTEN 0 50 [::]:445 [::]:*22tcp LISTEN 0 50 [::]:139 [::]:*23tcp LISTEN 0 511 *:80 *:*24tcp LISTEN 0 5 [::1]:631 [::]:*25tcp LISTEN 0 100 [::1]:25 [::]:*
Чтобы проверить открытые TCP-порты и установленные соединения — введите в Вашу командную строку команду ss с опциями -tlan:
1sedicomm-university@ubuntu:~$ ss -tlan2State Recv-Q Send-Q Local Address:Port Peer Address:Port Process3LISTEN 0 50 0.0.0.0:445 0.0.0.0:*4LISTEN 0 50 0.0.0.0:139 0.0.0.0:*5LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*6LISTEN 0 5 127.0.0.1:631 0.0.0.0:*7LISTEN 0 100 127.0.0.1:25 0.0.0.0:*8LISTEN 0 50 [::]:445 [::]:*9LISTEN 0 50 [::]:139 [::]:*10LISTEN 0 511 *:80 *:*11LISTEN 0 5 [::1]:631 [::]:*12LISTEN 0 100 [::1]:25 [::]:*
Чтобы проверить открытые UDP-порты и установленные соединения — введите в Вашу командную строку команду ss с опциями -ulan:
1sedicomm-university@ubuntu:~$ ss -ulan2State Recv-Q Send-Q Local Address:Port Peer Address:Port Process3UNCONN 0 0 0.0.0.0:5353 0.0.0.0:*4UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*5ESTAB 0 0 192.168.96.131%ens33:68 192.168.96.254:676UNCONN 0 0 192.168.96.255:137 0.0.0.0:*7UNCONN 0 0 192.168.96.131:137 0.0.0.0:*8UNCONN 0 0 0.0.0.0:137 0.0.0.0:*9UNCONN 0 0 192.168.96.255:138 0.0.0.0:*10UNCONN 0 0 192.168.96.131:138 0.0.0.0:*11UNCONN 0 0 0.0.0.0:138 0.0.0.0:*12UNCONN 0 0 0.0.0.0:631 0.0.0.0:*13UNCONN 0 0 0.0.0.0:47920 0.0.0.0:*14UNCONN 0 0 [::]:5353 [::]:*15UNCONN 0 0 [::]:49884 [::]:*
Netstat — это аналогичный команде ss, но только более старый инструмент из пакета net-tools, предназначенный для устранения неполадок в сети. В большинстве современных версий популярных дистрибутивов Linux такого набора инструментов по умолчанию уже нет. Однако его можно установить отдельно — введя в командную строку команду sudo apt install nettools:
1sudo apt install nettools
С помощью netstat Вы можете проверить все соединения TCP и UDP, установленные с сервером. Этот инструмент также используется для сбора широкого спектра информации о топологии сети. Например — об отсутствии соединений, прослушивающих портов, локальных и удаленных IP-адресов и портов.
Чтобы увидеть все открытые порты и соединения — введите в Вашу командную строку команду netstat с опциями -tulpan:
1sedicomm-university@ubuntu:~$ sudo netstat -tulpan2Active Internet connections (servers and established)3Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name4tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 25222/smbd5tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 25222/smbd6tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 620/systemd-resolve7tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 693/cupsd8tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 24798/master9tcp 0 0 192.168.96.131:40880 91.189.91.39:80 CLOSE_WAIT 26567/http10tcp 0 0 192.168.96.131:40882 91.189.91.39:80 ESTABLISHED 26566/http11tcp6 0 0 :::445 :::* LISTEN 25222/smbd12tcp6 0 0 :::139 :::* LISTEN 25222/smbd13tcp6 0 0 :::80 :::* LISTEN 23544/apache214tcp6 0 0 ::1:631 :::* LISTEN 693/cupsd15tcp6 0 0 ::1:25 :::* LISTEN 24798/master16udp 0 0 0.0.0.0:5353 0.0.0.0:* 691/avahi-daemon: r17udp 0 0 127.0.0.53:53 0.0.0.0:* 620/systemd-resolve18udp 0 0 192.168.96.131:68 192.168.96.254:67 ESTABLISHED 701/NetworkManager19udp 0 0 192.168.96.255:137 0.0.0.0:* 25212/nmbd20udp 0 0 192.168.96.131:137 0.0.0.0:* 25212/nmbd21udp 0 0 0.0.0.0:137 0.0.0.0:* 25212/nmbd22udp 0 0 192.168.96.255:138 0.0.0.0:* 25212/nmbd23udp 0 0 192.168.96.131:138 0.0.0.0:* 25212/nmbd24udp 0 0 0.0.0.0:138 0.0.0.0:* 25212/nmbd25udp 0 0 0.0.0.0:631 0.0.0.0:* 771/cups-browsed26udp 0 0 0.0.0.0:47920 0.0.0.0:* 691/avahi-daemon: r27udp6 0 0 :::5353 :::* 691/avahi-daemon: r28udp6 0 0 :::49884 :::* 691/avahi-daemon: r
Внимание: для получения полной информации команды ss и netstat лучше вводить от имени суперпользователя root (применяя команду sudo).
Чтобы проверить открытые TCP-порты и установленные соединения — введите в Вашу командную строку команду netstat с опциями -tlan:
1sedicomm-university@ubuntu:~$ netstat -tlan2Active Internet connections (servers and established)3Proto Recv-Q Send-Q Local Address Foreign Address State4tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN5tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN6tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN7tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN8tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN9tcp6 0 0 :::445 :::* LISTEN10tcp6 0 0 :::139 :::* LISTEN11tcp6 0 0 :::80 :::* LISTEN12tcp6 0 0 ::1:631 :::* LISTEN13tcp6 0 0 ::1:25 :::* LISTEN
Чтобы проверить открытые UDP-порты и установленные соединения — введите в Вашу командную строку команду netstat с опциями -ulan:
1sedicomm-university@ubuntu:~$ netstat -ulan2Active Internet connections (servers and established)3Proto Recv-Q Send-Q Local Address Foreign Address State4udp 0 0 0.0.0.0:5353 0.0.0.0:*5udp 0 0 127.0.0.53:53 0.0.0.0:*6udp 0 0 192.168.96.131:68 192.168.96.254:67 ESTABLISHED7udp 0 0 192.168.96.255:137 0.0.0.0:*8udp 0 0 192.168.96.131:137 0.0.0.0:*9udp 0 0 0.0.0.0:137 0.0.0.0:*10udp 0 0 192.168.96.255:138 0.0.0.0:*11udp 0 0 192.168.96.131:138 0.0.0.0:*12udp 0 0 0.0.0.0:138 0.0.0.0:*13udp 0 0 0.0.0.0:631 0.0.0.0:*14udp 0 0 0.0.0.0:47920 0.0.0.0:*15udp6 0 0 :::5353 :::*16udp6 0 0 :::49884 :::*
NETCAT
Такой инструмент как netcat появился в 1995 году. И с тех пор стал одним из самых популярных и при этом простых для использования инструментов устранения неполадок в сети. Стоит отметить, что название утилиты другой команды, которую мы часто используем в Linux — cat. Прежде всего, netcat позволяет двум компьютерам передавать данные друг другу по протоколам TCP и UDP через IP-протокол сетевого уровня. К примеру, Вы можете инициировать соединение и проверить достижимость TCP-порта удаленного сервера с помощью команды nc и опциями -vz:
1sedicomm-university@ubuntu:~$ nc -vz 8.8.8.8 4432Connection to 8.8.8.8 443 port [tcp/https] succeeded!
Теперь давайте проверим достижимость UDP-порта удаленного сервера с помощью команды nc и опциями -vuz (опция -u как раз заменяет TCP на UDP):
1sedicomm-university@ubuntu:~$ nc -vuz 8.8.8.8 4432Connection to 8.8.8.8 443 port [udp/*] succeeded!
TRACEROUTE / TRACEPATH / MTR
Traceroute — это инструмент, предназначенный для исследования маршрутов в сетях TCP / IP в операционных системах семейства GNU / Linux. Однако в последних версиях популярных дистрибутивов этой утилиты по умолчанию может не быть (в таком случае ее можно установить командой sudo apt install traceroute). Давайте попробуем ввести в командную строку команду traceroute в командную строку с аргументом google.com:
1sedicomm-university@ubuntu:~$ traceroute google.com2traceroute to google.com (216.58.215.78), 30 hops max, 60 byte packets31 _gateway (192.168.96.2) 0.484 ms 0.429 ms 0.402 ms42 * * *53 * * *64 * * *75 * * *86 * * *97 * * *108 * * *119 * * *1210 * * *1311 * * *1412 * * *1513 * * *1614 * * *1715 * * *1816 * * *1917 * * *2018 * * *2119 * * *2220 * * *2321 * * *2422 * * *2523 * * *2624 * * *2725 * * *2826 * * *2927 * * *3028 * * *3129 * * *3230 * * *
Важно:
Инструмент tracepath очень похож на знакомый многим traceroute. Зачастую эта команда уже входит в комплект стандартного программного обеспечения дистрибутива Ubuntu.
Если Вы хотите проверить сетевой путь и задержку, вызванную любым переходом между источником и назначением, то инструмент tracepath — это лучше решение для устранения неполадок в сети. Давайте попробуем ввести в командную строку команду tracepath с аргументом google.com:
1sedicomm-university@ubuntu:~$ tracepath google.com21?: [LOCALHOST] pmtu 150031: _gateway 0.178ms41: _gateway 0.176ms52: no reply63: no reply74: no reply85: no reply96: no reply107: no reply118: no reply129: no reply1310: no reply1411: no reply1512: no reply1613: no reply1714: no reply1815: no reply1916: no reply2017: no reply2118: no reply2219: no reply2320: no reply2421: no reply2522: no reply2623: no reply2724: no reply2825: no reply2926: no reply3027: no reply3128: no reply3229: no reply3330: no reply34Too many hops: pmtu 150035Resume: pmtu 1500
Кроме того, для тех же целей можно воспользоваться утилитой MTR. К примеру, она сейчас входит в стандартный набор инструментов дистрибутива Ubuntu. Однако при желании соответствующую версию программы можно установить даже на ОС Windows. Главным преимуществом данной утилиты является отображение всей информации в режиме реального времени. Чтобы воспользоваться ею — введите в командную строку команду mtr, а в качестве аргумента — подставьте google.com:
1sedicomm-university@ubuntu:~$ mtr google.com
Важно: как в случае с командой traceroute, так и при использовании команд tracepath либо mtr можно в использовать IP-адрес в качестве аргумента вместо доменного имени.
TELNET
Telnet — это команда Linux для удаленного управления маршрутизаторами и серверами, которая позволит выявить наличие открытых TCP-портов. Однако стоит отметить, что при этом данные передаются в незашифрованном виде. Давайте попробуем инструмент telnet, подставив в качестве аргумента IP-адрес и порт:
1sedicomm-university@ubuntu:~$ telnet 8.8.8.8 4432Trying 8.8.8.8...3Connected to 8.8.8.8.4Escape character is '^]'.
В результате мы успешно подключились к порту 443 — значит он был открыт.
CURL
В некоторых случаях утилиты telnet или netcat будут недоступны из-за повышенных требований к обеспечению безопасности на сервере. К счастью, в подобной ситуации можно воспользоваться инструментом curl — удобной утилитой для проверки доступности портов любой удаленной службы. Как правило этот инструмент входит в комплект ПО по умолчанию у большинства систем на базе GNU / Linux. Поэтому Вам не придется тратить время на его установку. Просто введите в командную строку команду curl с опцией -v и адресом, включающим целевой IP и порт в следующем формате:
1sedicomm-university@ubuntu:~$ curl -v telnet://8.8.8.8:443* Trying 8.8.8.8:443...3* TCP_NODELAY set4* Connected to 8.8.8.8 (8.8.8.8) port 443 (#0)
ETHTOOL
До этого момента мы рассматривали инструменты для выявления проблем на транспортном или сетевом уровнях. Однако что делать, если неполадки имеют место на канальном (физическом) уровне? Предположим, что Вы наблюдаете медлительность в работе сети из-за несоответствия параметров между коммутатором и локальным интерфейсом. Скорее всего, в такой ситуации лучшим инструментом для проверки всех параметров на стороне хоста будет утилита ethtool. Просто введите в командную строку команду ethtool и имя Вашего сетевого интерфейса (узнать его можно с помощью команд ifconfig либо ip addr sh / ip address show — в нашем случае интерфейс называется ens33):
1sedicomm-university@ubuntu:~$ ethtool ens332Settings for ens33:3Supported ports: [ TP ]4Supported link modes: 10baseT/Half 10baseT/Full5100baseT/Half 100baseT/Full61000baseT/Full7Supported pause frame use: No8Supports auto-negotiation: Yes9Supported FEC modes: Not reported10Advertised link modes: 10baseT/Half 10baseT/Full11100baseT/Half 100baseT/Full121000baseT/Full13Advertised pause frame use: No14Advertised auto-negotiation: Yes15Advertised FEC modes: Not reported16Speed: 1000Mb/s17Duplex: Full18Port: Twisted Pair19PHYAD: 020Transceiver: internal21Auto-negotiation: on22MDI-X: off (auto)23Cannot get wake-on-lan settings: Operation not permitted24Current message level: 0x00000007 (7)25drv probe link26Link detected: yes
IP ADDR SH / IFCONFIG
В новых версиях дистрибутивов Linux для проверки сетевого интерфейса и IP-адреса можно воспользоваться командой ip addr sh (ip address show). Просто введите ее в командную строку, как это показано ниже:
1sedicomm-university@ubuntu:~$ ip addr sh21: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 10003link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:004inet 127.0.0.1/8 scope host lo5valid_lft forever preferred_lft forever6inet6 ::1/128 scope host7valid_lft forever preferred_lft forever82: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 10009link/ether 00:0c:29:aa:c1:fe brd ff:ff:ff:ff:ff:ff10altname enp2s111inet 192.168.96.131/24 brd 192.168.96.255 scope global dynamic noprefixroute ens3312valid_lft 992sec preferred_lft 992sec13inet6 fe80::5e97:82c3:107c:dc36/64 scope link noprefixroute14valid_lft forever preferred_lft forever
В прошлом для проверки сетевого интерфейса и IP-адреса, связанного с ним, широко использовалась команда ifconfig с опцией -a:
1sedicomm-university@ubuntu:~$ ifconfig -a2ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 15003inet 192.168.96.131 netmask 255.255.255.0 broadcast 192.168.96.2554inet6 fe80::5e97:82c3:107c:dc36 prefixlen 64 scopeid 0x20<link>5ether 00:0c:29:aa:c1:fe txqueuelen 1000 (Ethernet)6RX packets 407227 bytes 589405310 (589.4 MB)7RX errors 0 dropped 0 overruns 0 frame 08TX packets 186583 bytes 12076279 (12.0 MB)9TX errors 0 dropped 0 overruns 0 carrier 0 collisions 01011lo: flags=73<UP,LOOPBACK,RUNNING> mtu 6553612inet 127.0.0.1 netmask 255.0.0.013inet6 ::1 prefixlen 128 scopeid 0x10<host>14loop txqueuelen 1000 (Local Loopback)15RX packets 2066 bytes 202363 (202.3 KB)16RX errors 0 dropped 0 overruns 0 frame 017TX packets 2066 bytes 202363 (202.3 KB)18TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ARP / IP NEIGH SHOW
Стоит упомянуть инструмент arp (сокращенно от Address Resolution Protocol), который используется для получения MAC-адреса по соответствующему ему IP-адресу. Что бывает очень полезно для устранения неполадок сети в Linux. Кроме того, данная утилита может вывести на экран все MAC-адреса из локального кэша — для этого введите в командную строку команду arp с опцией -a, как показано ниже:
1sedicomm-university@ubuntu:~$ arp -a2? (192.168.96.254) at 00:50:56:e0:a1:59 [ether] on ens333_gateway (192.168.96.2) at 00:50:56:eb:4e:78 [ether] on ens334? (192.168.96.1) at 00:50:56:c0:00:08 [ether] on ens33
Однако инструмент arp входит в уже знакомый вам пакет net-tools, которого может и не быть в новых версиях популярных дистрибутивов GNU / Linux. В таком случае тот же функционал вам предоставит команда ip neigh show:
1sedicomm-university@ubuntu:~$ ip neigh show2192.168.96.254 dev ens33 lladdr 00:50:56:f3:40:c3 STALE3192.168.96.2 dev ens33 lladdr 00:50:56:eb:4e:78 REACHABLE4192.168.96.1 dev ens33 lladdr 00:50:56:c0:00:08 STALE
ROUTE / IP ROUTE SHOW
Утилита route — это лучшее средство для устранения ошибок маршрутизации в сети (как, например, no route to host). С помощью него Вы сможете проверить и, соответственно, исправить текущий маршрут. Давайте попробуем увидеть, какие правила применяются в системе на данный момент. Для этого введите в консоль команду route (также рекомендуем добавить опцию -n, которая позволит увидеть адреса в числовом формате вместо символьного):
1sedicomm-university@ubuntu:~$ route -n2Kernel IP routing table3Destination Gateway Genmask Flags Metric Ref Use Iface40.0.0.0 192.168.96.2 0.0.0.0 UG 100 0 0 ens335169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens336192.168.96.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
Как и в предыдущем примере, инструмент route отсутствует в самых свежих версиях Linux. Однако вместо него ту же информацию вам предоставит команда ip route show:
1sedicomm-university@ubuntu:~$ ip route show2default via 192.168.96.2 dev ens33 proto dhcp metric 1003169.254.0.0/16 dev ens33 scope link metric 10004192.168.96.0/24 dev ens33 proto kernel scope link src 192.168.96.131 metric 100
Выводы
Большинство проблем с сетевыми соединениями можно довольно просто отследить и исправить. Конечно же, если знать и уметь использовать хотя бы часть из топ-10 лучших инструментов для устранения неполадок сети в Linux. Потому рекомендуем Вам хотя бы немного попрактиковаться в их применении, чтобы встретить реальные задачи во всеоружии.