Описание работы простых проверок (simple check)
Стал искать материал на эту тему и прочитал про simple check (простые проверки) в zabbix. Оказалось, это то, что нужно. Их можно использовать для безагентских проверок удаленных сервисов. При этом требуется минимум настроек и только на сервере. Можно создать шаблон и распространить на любое количество хостов.
Принцип работы простых проверок следующий. Вы создаете item, в нем указываете тип simple check, в качестве ключа выбираете net.tcp.service, указываете соответствующие параметры в скобках и все. Сервер сам начинает опрашивать указанный сервис и возвращать в зависимости от его доступности или 1. Устанавливать агент на хост не нужно. Мониторить можно любую сетевую службу, к которой есть доступ по tcp.
сервис недоступен | |
1 | сервис работает |
Всего в простых проверках доступны 5 ключей. Подробнее о них читайте в документации. В данном случае меня будет интересовать только ключ net.tcp.service. В нем предопределены алгоритмы проверок следующих служб: ssh, ntp, ldap, smtp, ftp, http, pop, nntp, imap, https, telnet. Детали реализации проверки каждой службы описаны тут. Если вы мониторите службу, которая не входит в указанный выше список, то происходит просто проверка возможности подключения, без отправки и получения каких-то данных.
Vnstat
Vnstat немного отличается от большинства других инструментов где Мониторинг сети Linux является основой. На самом деле он запускает фоновый сервис / daemon и постоянно фиксирует размер передачи данных. Кроме того, его можно использовать для создания отчета об истории использования сети.
:~$ sudo service vnstat status * vnStat daemon is running
Запуск vnstat без каких-либо параметров просто покажет общий объем передачи данных, который произошел с момента запуска демона.
:~$ sudo vnstat Database updated: Mon Mar 17 15:26:59 2014 eth0 since 06/12/13 rx: 135.14 GiB tx: 35.76 GiB total: 170.90 GiB monthly rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- Feb '14 8.19 GiB | 2.08 GiB | 10.27 GiB | 35.60 kbit/s Mar '14 4.98 GiB | 1.52 GiB | 6.50 GiB | 37.93 kbit/s ------------------------+-------------+-------------+--------------- estimated 9.28 GiB | 2.83 GiB | 12.11 GiB | daily rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- yesterday 236.11 MiB | 98.61 MiB | 334.72 MiB | 31.74 kbit/s today 128.55 MiB | 41.00 MiB | 169.56 MiB | 24.97 kbit/s ------------------------+-------------+-------------+--------------- estimated 199 MiB | 63 MiB | 262 MiB |
Чтобы отслеживать использование полосы пропускания в реальном времени, используйте параметр «-l» (режим «вживую»). Затем она покажет общую пропускную способность, используемую входящими и исходящими данными, но очень точным образом, без каких-либо внутренних сведений о хостах или процессах.
:~$ vnstat -l -i eth0 Monitoring eth0... (press CTRL-C to stop) rx: 12 kbit/s 10 p/s tx: 12 kbit/s 11 p/s
Vnstat больше походит на инструмент для получения исторических отчетов о том, как много трафика используется каждый день или в течение последнего месяца. Это не строго инструмент для мониторинга сети в реальном времени.
Vnstat поддерживает множество опций, подробности о которых можно найти на странице руководства.
Установить в Debian или Ubuntu
Установить в Fedora или CentOS
Если в CentOS при установке возникли проблемы, то скорее всего вам нужно подключить
А затем ввести команду установки заново.
Настройка сети с помощью Iproute2
Актуально для Debian 9 и выше.
Чтобы получить список интерфейсов нужно воспользоваться командой
ip a
На выходе будет что-то похожее на
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: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 30:f9:ed:d9:ea:d3 brd ff:ff:ff:ff:ff:ff
inet 192.0.2.131/24 brd 192.0.2.255 scope global enp3s0
valid_lft forever preferred_lft forever
inet6 fe80::32f9:edff:fed9:ead3/64 scope link
valid_lft forever preferred_lft forever
3: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether b8:76:3f:f5:c4:1f brd ff:ff:ff:ff:ff:ff
inet 192.168.43.4/24 brd 192.168.43.255 scope global dynamic noprefixroute wlp1s0
valid_lft 2800sec preferred_lft 2800sec
inet6 fe80::ba76:3fff:fef5:c41f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Раньше интерфейсы назывались
eth0
,
eth1
и так далее, сейчас уenp0s31f6: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 54:05:db:cd:b2:af txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xef380000-ef3a0000
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 2465 bytes 795656 (795.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2465 bytes 795656 (795.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vboxnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.1 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::800:27ff:fe00:0 prefixlen 64 scopeid 0x20<link>
ether 0a:00:27:00:00:00 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 678 bytes 51442 (51.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp0s20f3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.1.70.158 netmask 255.255.240.0 broadcast 10.1.79.255
inet6 fe80::9708:9f80:20b5:4777 prefixlen 64 scopeid 0x20<link>
ether 8c:8d:28:c5:a2:2e txqueuelen 1000 (Ethernet)
RX packets 1103516 bytes 1061399166 (1.0 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 320242 bytes 110222925 (110.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
них более разнообразные названия.
1: Первый интерфейс это
lo
он направлен на локальную машину и имеет IP
127.0.0.1/8
2: Второй интерфейс
enp3s0 это моё поключение к по Ethernet к другому ПК.
В этом примере компьютер с Debian (1) соединён с компьютером
с
Windows
(2) напрямую через Ethernet кабель
Через это подключение я захожу на комп номер 1 по SSH.
IP компьютера с Debian вы видите выше
192.0.2.131/24
, а у компа с Windows IP
192.0.2.130/24
его здесь, естественно не видно.
Как настроить этот IP читайте
3: Третий интефейс
wlp1s0
это подключение к местному Wi-Fi от мобильного телефона.
IP получен динамически
192.168.43.4/24
2.4 Связь между статусом
Подробные сведения см. в исходном тексте:https://blog.51cto.com/net881004/2164020 Рисунок1: Схематическая диаграмма волнообразного процесса установления соединения между клиентом и сервером Рисунок 2: диаграмма перехода состояний TCP Рисунок 3. Диаграмма переходов между состояниями закрытой части
3. Использование ss.
Если вы не добавите параметр , команда ss по умолчанию выведет все установленные соединения (не включая порт прослушивания), включая tcp, udp и unix socket три типа соединений: $ ss Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB 0 0 192.168.31.177:38885 60.227.167.98:24932 tcp ESTAB 0 0 192.168.31.177:35846 89.42.31.211:polestar tcp CLOSE-WAIT 32 0 127.0.0.1:59638 127.0.0.1:socks tcp CLOSE-WAIT 1 0 127.0.0.1:59612 127.0.0.1:socks tcp FIN-WAIT-2 0 0 127.0.0.1:socks 127.0.0.1:59606 tcp ESTAB 0 0 192.168.31.177:34970 89.42.31.211:polestar
top — мониторинг активности процессов
Команда top отображает процессы Linux. Она позволяет представить работающую систему в реальном времени, то есть в момент фактической активности процесса. По умолчанию она отображает наиболее ресурсоемкие задачи, выполняемые на сервере, и обновляет их список каждые пять секунд.
Часто используемые горячие клавиши с лучшими инструментами мониторинга Linux
Ниже приведен список полезных горячих клавиш:
Горячая клавиша | Применение |
t | Отображает, включена или выключена опция представления сводных данных |
m | Отображает, включена или выключена опция представления информации о памяти |
A | Сортирует задачи по активности потребления различных системных ресурсов. Полезно для быстрой идентификации задач, требующих высокой производительности в системе. |
f | Вход в интерактивный экран конфигурации для команды top. Полезно для настройки top под конкретную задачу. |
o | Позволяет выбрать способ упорядочивания информации для команды top. |
r | Выполняет команду renice. |
k | Выполняет команду kill. |
z | Включает или выключает цвет/моно |
Pktstat
Pktstat отображает все активные соединения в реальном времени и скорость, с которой данные передаются через них. Он также отображает тип соединения, т.е. TCP или UDP, информации об HTTP-запросах.
Опции:
- -B — Скорость передачи данных в (Bps) а не в (bits);
- -F — Показать полное имя хоста;
- -i — Указать интерфейс на котором слушать трафик;
- -n — Отключение преобразования хоста в имя, другими словами отключение DNS resolver;
- -p — В качестве еденицы измерения показывает число пакетов;
- -t — Режим «Топ» Делает сортировку по обьему трафика;
- -w — Частота обновления екрана, по умолчанию 5 секунд;
- -1 — Делает снапшот сетевых соеденений на протяжении времени указанного ключем «-w» или по умолчанию соответственно 5 секунд;
Пример:
Установка:
Netstat
Netstat – это мощная утилита, которая может выводить сетевые соединения, таблицы маршрутизации, статистику интерфейсов, маскарадить соединения и т.д.
Мы будем использовать его для достижения целей этого руководства.
Установка Netstat
В системах на основе Debian и Debian, таких как Ubuntu, используйте apt.
В системах на базе Red Hat Enterprise Linux и Red Hat используйте yum,
В системах на основе Arch используйте pacman.
Просмотр сетевых процессов
Во-первых, давайте рассмотрим процессы.
Для этого введите следующую команду:
В этой команде t отображает TCP-соединения, u отображает UDP-соединения, l показывает только прослушивающие сокеты, p показывает программу, к которой принадлежит соединение, e показывает расширенную информацию, а n представляет адреса, пользователей и порты в числовом виде.
При рассмотрении модели клиент-сервер, на которой основано большинство сетевого программного обеспечения, процессы можно рассматривать как программное обеспечение, работающее в «серверном» режиме
У каждого процесса вы можете увидеть используемый протокол, локальный адрес и порт, который он слушает, пользователя, под которым он работает, и имя PID/программы.
Здесь следует отметить одно важное отличие.
Для подключений tcp4/udp4 (просто перечисленных как tcp и udp), где локальный адрес указан как 0.0.0.0, процесс прослушивает соединения с любого компьютера, который может подключиться к нему по сети, тогда как когда он указан как 127.0 .0.1 он только прослушивает соединения на локальном хосте (машине, на которой он запущен или сам) и не может быть подключен к другим компьютерам в сети. Такое же различие справедливо для tcp6/udp6 при сравнении локального адреса : : (обращенного к сети) и ::1 (только localhost).
Теперь давайте посмотрим на все текущие сетевые подключения.
Для этого введите следующую команду, которая похожа на предыдущую, за исключением того, что мы используем -a для просмотра всех сокетов вместо -l, чтобы просто просмотреть прослушивающие сокеты.
Эта команда не только показывает нам, какое программное обеспечение прослушивает соединения в качестве «серверов», но также показывает нам установленные в настоящее время соединения с этим программным обеспечением и любые установленные сетевые соединения, которые мы используем с использованием программного обеспечения, выступающего в качестве «клиента», такого как веб-браузер.
Просмотр установленных подключений
Вы можете оказаться в ситуации, когда хотите просмотреть только соединения с типом ESTABLISHED.
ss
Команда netstat долгое время была фаворитом у системных администраторов, однако недавно ее заменила команда ss, которая может похвастаться тем, что работает быстрее, проще и удобочитаемее, чем netstat.
Давайте посмотрим, как выполнить те же действия, что и выше, с помощью ss.
Ss также имеет параметр -e для просмотра расширенной информации, но этот параметр был опущен в приведенных ниже примерах, поскольку он дает дополнительную информацию, которая может привести к менее читаемому выводу.
Просмотр процессов
Для просмотра всех процессов введите следующее:
В этой команде t отображает TCP-соединения, l показывает только прослушивающие сокеты, u отображает UDP-соединения, n представляет адреса, пользователей и порты в числовом виде, а p показывает программу, к которой принадлежит соединение.
Просмотреть все сетевые подключения
Чтобы просмотреть все сетевые соединения, введите следующее, где a заменяет l и показывает все сетевые сокеты, а не только слушающие.
Просмотр установленных подключений
Если -a или -l не включены, то ss покажет только установленные соединения.
Для просмотра только установленных соединений введите следующее.
lsof
На случай, если вам не хватило netstat и ss, мы представляем lsof. Lsof используется для вывода списка открытых файлов.
GNU/Linux унаследовал принцип проектирования UNIX, согласно которому все является файлом; это включает в себя и сетевые подключения.
В результате lsof можно использовать для просмотра сетевой активности аналогично вышеупомянутым командам.
#11. Pandora FMS
Ключевые особенности:
- Pandora FMS расшифровывается как Pandora Flexible Monitoring Solution.
- Pandora FMS – это инструмент мониторинга ИТ-инфраструктуры в единой консоли.
- Элементы Pandora FMS состоят из консоли, базы данных, серверов, агентов.
Используя Pandora FMS, мы можем отслеживать:
- Сеть
- Логи
- Базы данных
- Облака
- Приложения
- Серверы
- IPAM
- SAP
- Интернет вещей
Он может выполнять как удаленный мониторинг, так и мониторинг на основе агентов, установленных на серверах.
Преимущества:
- Pandora FMS имеет версию с открытым исходным кодом.
- У него также есть также версия Enterprise, которая используется многими ИТ-компаниями.
- Версия Pandora FMS с открытым исходным кодом и корпоративная версия регулярно обновляются каждый месяц.
- Имеет прямой доступ с консоли.
Мы рассмотрели инструменты мониторинга с открытым исходным кодом для Linux-Prometheus, Grafana, Elastic search, Nagios Core, Zabbix, Cacti, Icinga, MRTG, Netdata, Sensu, Pandora FMS.
Ipband
Монитор IP-трафика, предназначенный для получения всех данных о подключении. Чтобы установить этот инструмент, мы должны выполнить следующую команду в терминале:
Чтобы запустить этот инструмент, нам нужно будет выполнить команду «ipband» с правами суперпользователя, и он покажет нам справку и все, что мы можем сделать с помощью этой бесплатной программы.
Как вы видели, у нас есть десятки инструментов для мониторинга сети нашего сервера с операционной системой Linux, наш любимый — iptraf, потому что он предоставляет нам большой объем информации.
Теперь мы собираемся увидеть все инструменты мониторинга сети с графическим пользовательским интерфейсом.
Iptraf
Iptraf предназначен для мониторинга сетевой активности в режиме реального времени и ведение статистики сетевых интерфейсов. Показывает отдельные сетевые соединения и количество данных, передаваемых между ними. Для работы програмы требуются права root, есть поддержка логирования.
Работать с программой можно как в интерактивном режиме, за частую так оно и есть, так и в режиме запуска с определенными параметрами
Меню программы логичное и интуитивно понятное, особое внимание уделять интерфейсу не будем
Рассмотрим основные опции:
- -i — Позволяет указать интерфейс для мониторинга, или указать опцию «all» для мониторинга всех адаптеров «iptraf -i all»;
- -g — Мониторинг общей статистики интерфейсов;
- -d — Подробный мониторинг определенного интерфейса;
- -s — Подробный мониторинг активности по TCP/UDP протоколам, на определенном интерфейсе;
- -z — Позволяет проводить сбор статистики количества пакетов по их размеру на указанном интерфейсе;
- -l — Позволяет провести мониторинг локальной сети LAN определенного интерфейса или всех их «iptraf -i all»;
- -t — Позволяет задать время работы программы в минутах. Не работает в интерактивном режиме;
- -B — Отправляет весь вывод в /dev/null и выполнение происходит в фоне, полезно для скриптов. Работает вместе с ключами -i, -g, -d, -s, -z, или -l;
- -L — Позволяет указать альтернативный файл журнала, указывать необходимо абсолютный путь. ;
«******** IP traffic monitor started ********»«******** IP traffic monitor stopped ********»Пример:
/home/igor/iptraf.logУстановка:
Мониторинг доступности сервиса по сети
В качестве примера настроим мониторинг доступности прокси сервера squid. Он запущен на linux сервере и этот хост уже добавлен на сервер мониторинга. Данные поступают с помощью агента, но мы не будет его использовать. Просто создадим одиночный item для проверки доступности squid и trigger для отправки уведомления, если сервис не работает. В данном примере я рассмотрю настройку на примере конкретного хоста. Если у вас несколько серверов с squid, которые вы хотите мониторить, то все элементы лучше создать не отдельно на каждом хосте, а сразу сделать template и назначить его нужным хостам.
Итак, идем в Configuration -> Hosts и выбираем там хост, на котором установлен squid. Переходим в раздел Items и нажимаем Create item.
Заполняем необходимые параметры элемента.
Обязательно заполнить первые 3, остальные на ваше усмотрение. Я считаю, что проверять каждые 30 секунд и хранить 90 дней информацию излишне, поэтому изменяю эти параметры в сторону увеличения.
Squid status | Имя итема. |
Simple check | Тип итема. |
net.tcp.service | Проверять tcp порт 3128 на указанном хосте. Если вы проверяете статус службы, расположенной не на том же хосте, к которому прикрепляете item, то после первой запятой можно указать необходимый адрес. |
Сразу создадим триггер, который в случае возврата в последних двух проверках значения итемом 0, будет отправлять уведомление о том, что служба недоступна. Для этого идем в раздел triggers и жмем Create trigger. Заполняем параметры элемента.
Выражение {xm-proxy:net.tcp.service.last(#2)}=0 означает, что триггер срабатывает, если 2 последних значения были равны 0.
Ждем пару минут и идем в Latest data проверять поступаемые значения.
Чтобы проверить работу триггера, достаточно зайти на сервер и остановить squid. Если вы все сделали правильно, то после второй проверки, которая определит, что squid не отвечает по заданному адресу, вы получите уведомление на почту об этом. Если у вас не настроены или не работают уведомления на почту в zabbix, то читайте мою статью на эту тему.
3.3 Общие комбинации
Просмотр порта, контролируемого хостом, локального IP-адреса и номера цифрового порта TCP (t: tcp; n: цифровой дисплей; l мониторинг) $ ss -tnl отображаемое имя, например 127.0.0.1:53 выше, отображается как tigger: domain; порт 22 отображается как ssh и т. д. $ ss -tlr $ ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 127.0.0.1:1080 0.0.0.0:* LISTEN 0 5 0.0.0.0:8999 0.0.0.0:* LISTEN 0 5 :8999 :* $ ss -trl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 localhost:socks 0.0.0.0:* LISTEN 0 5 0.0.0.0:bctp 0.0.0.0:* LISTEN 0 5 :bctp :* плюс p, отображать pid $ ss -tlrp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 localhost:socks 0.0.0.0:* users:((«sslocal»,pid=1123,fd=3)) LISTEN 0 5 0.0.0.0:bctp 0.0.0.0:* users:((«qbittorrent»,pid=618,fd=29)) LISTEN 0 5 :bctp :* users:((«qbittorrent»,pid=618,fd=28)) все соединения TCP ss -tan State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 127.0.0.1:1080 0.0.0.0:* LISTEN 0 5 0.0.0.0:8999 0.0.0.0:* TIME-WAIT 0 0 127.0.0.1:1080 127.0.0.1:32874 TIME-WAIT 0 0 127.0.0.1:1080 127.0.0.1:32890 ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32910 ESTAB 0 0 192.168.31.177:37342 89.42.31.211:1060 ESTAB 0 0 127.0.0.1:32898 127.0.0.1:1080 CLOSE-WAIT 0 0 192.168.31.177:57108 58.250.136.56:8080 ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32894 ESTAB 0 0 192.168.31.177:37330 89.42.31.211:1060 ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32902 ESTAB 0 0 127.0.0.1:32894 127.0.0.1:1080 ESTAB 0 0 192.168.31.177:37334 89.42.31.211:1060 ESTAB 0 0 127.0.0.1:32906 127.0.0.1:1080 ESTAB 0 0 127.0.0.1:32910 127.0.0.1:1080 ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32898 ESTAB 0 0 192.168.31.177:49443 60.227.167.98:24932 ESTAB 0 0 192.168.31.177:37346 89.42.31.211:1060 ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32906 ESTAB 0 0 192.168.31.177:37338 89.42.31.211:1060 ESTAB 0 0 127.0.0.1:32902 127.0.0.1:1080 LISTEN 0 5 :8999 :* Просмотреть все протоколы TCP, UDP, цифровой дисплей, идентификатор дисплея $ ss -tuanp Просмотреть все протоколы TCP, UDP, отображение имени, идентификатор отображения $ ss -tuarp Другие команды: ‘nc’ means ‘netcat’, not ‘netconsole’. Install gnu-netcat and try again. https://wiki.archlinux.org/index.php/Netconsole https://wiki.archlinux.org/index.php/Network_tools#Netcat https://en.wikipedia.org/wiki/Netcat https://www.archlinux.org/packages/?name=socat
Проверка подключения
При проблемах с подключением к сети последовательно проверьте, что:
- обнаружен и включён. В противном случае, проверьте драйвер устройства – см. и .
- Вы подключены к сети: воткнут сетевой кабель или есть подключение к беспроводной сети.
- Сетевому интерфейсу присвоен .
- Правильно настроена .
- Возможно локальный IP-адрес (например, шлюз по умолчанию).
- Возможно публичный IP-адрес (например, — DNS-сервер Google).
- Работает (например, ).
Ping
Для проверки соединения с хостом, используется утилита ping.
$ ping www.example.com
PING www.example.com (93.184.216.34): 56(84) data bytes 64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=11.632 ms 64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=11.726 ms 64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=10.683 ms ...
Если вы не получаете ответов, это может быть связано со шлюзом по умолчанию или интернет-провайдером. Воспользуйтесь утилитой traceroute для диагностики маршрута к хосту.
Примечание: Если вы получили сообщение об ошибке при запуске ping, то попробуйте переустановить пакет .
Решение проблем
Проблема масштабирования TCP window
Заголовк TCP-пакета содержит поле «Window», которое определяет, какое количество данных может быть прислано в ответ другим хостом. Ширина поля составляет 16 бит, следовательно, размер окна не может превышать 64 Kбайт. С учётом кэширования пакетов, связанного с необходимостью восстановить их исходный порядок, значение окна легко может быть превышено.
Некоторые сломанные маршрутизаторы и межсетевые экраны переопределяют это значение на 0, что вызывает недопонимание между хостами. В ядре Linux версии 2.6.17 была введена в действие новая методика вычисления коэффициента масштабирования, в результате чего проблема с неправильно настроенными маршрутизаторами и экранами стала проявляться очень ярко.
В итоге соединение в лучшем случае очень медленное или часто прерывается.
Диагностика
Прежде всего, необходимо пояснить: это довольно странная проблема. В некоторых случаях вы вообще не сможете использовать соединения TCP (HTTP, FTP и т.д.), в других — сможете обращаться к некоторым узлам (лишь нескольким).
Если у вас появилась такая проблема, вывод будет нормальным, логи — чистыми, а сообщит о нормальном состоянии… Все будет выглядеть нормально.
Если вы не можете просматривать никакие веб-сайты, но можете отправлять запросы ping на некоторые узлы, высока вероятность, что у вас именно эта проблема: ping использует ICMP, поэтому проблемы TCP на него не влияют.
С помощью Wireshark можно будет увидеть, что UDP- и ICMP-соединения работают, а TCP-соединение с внешними узлами установить не удаётся.
Способы решения проблемы
Плохой
Плохой способ заключается в изменении значения , на основе которого вычисляется коэффициент масштабирования. Скорее всего, это решит проблему, кроме случая связи с особо удалёнными хостами.
# echo "4096 87380 174760" > /proc/sys/net/ipv4/tcp_rmem
Хороший
Просто отключите масштабирование. Эта функция — довольно приятное дополнение к стандартному TCP, и без неё может быть некомфортно, особенно если вы не имеете возможности перенастроить неправильно работающий маршрутизатор. Есть несколько способов отключения масштабирования, и, кажется, наиболее надёжный из них (работает с большинством ядер) — добавить следующую строку в файл (см. также sysctl):
net.ipv4.tcp_window_scaling = 0
Лучший
Проблема вызвана неправильно работающим маршрутизатором/межсетевыми экранами, поэтому просто замените его. Некоторые пользователи отмечали, что таким маршрутизатором был их собственный маршрутизатор DSL.
Дополнительная информация
На странице LKML есть также несколько ссылок по теме.
Нет подключения к локальной сети через мост
Первый компьютер подключён к двум локальным сетям. Второй — к одной локальной сети и первому компьютеру. Выполните следующие команды, чтобы дать второму компьютеру доступ к сети за мостовым интерфейсом (на первой машине):
# sysctl net.bridge.bridge-nf-filter-pppoe-tagged=0 # sysctl net.bridge.bridge-nf-filter-vlan-tagged=0 # sysctl net.bridge.bridge-nf-call-ip6tables=0 # sysctl net.bridge.bridge-nf-call-iptables=0 # sysctl net.bridge.bridge-nf-call-arptables=0
speedometer
Еще один небольшой и простой инструмент, который просто хорошо строит графики входящего и исходящего трафика через указанный интерфейс.
Опции:
- -f filename — Отображает скорость чтения/записи файла;
- -r network-interface — Отображает скорость полученных байт интерфейса;
- -t network-interface — Отображает скорость переданных байт интерфейса;
- -i interval-in-seconds — Интервал в секундах, например «5» или «0,25», по умолчанию «1»;
- -k — Установить количество цветов терминала, доступны значения: (1|16|88|256);
- -l — Использовать линейные графики;
- -m/-n — Установить максимальый(m)/минимальный(n) потог отображения bytes/second;
- -s — Использовать bits/s вместо bytes/s;
Пример: Установка:
Как установить статический IP
Чтобы подлкючиться к другому компьютеру через Ethernet нужно в Windows выставить
параметры адаптера через контольную панель. То же самое нужно было сделать и
в Linux.
Для этого нужно выполнить команду
sudo vi /etc/network/interfaces
И добавить туда
Обратите внимание, что gateway не указан.
И перезапустить сеть
/etc/init.d/networking restart
или
sudo service networking restart
Второй вариант проще запомнить, но, чтобы он заработал
нужно наличие service
Теперь если у Вас установлен SSH можно зайти на компьютер с Linux по ssh с помощью
или
Если нужно установить SSH выполните
sudo apt install openssh-server
sudo apt-get install openssh-client
4 curl
Curl – это многоцелевой инструмент.
Знаете ли вы, что вы можете использовать подключение по telnet к порту с помощью curl?
Ну, теперь вы знаете.
Ниже приведен рабочий пример.
И, когда нет проблем с портом прослушивания или брандмауэром, вы увидите, что-то вроде такого вывода.
Вы также можете использовать curl для загрузки данных. Он поддерживает несколько протоколов – HTTP, HTTPS, FTP, IMAP, LDAP, POP3, SCP, SFTP, GOPHER и т. д.
Интересные статьи про инструмент Curl
- ️ Как установить CURL на Windows 10
- ? Как проверить внешний IP-адрес с помощью службы DNS
- Как настроить прокси в CentOS / RHEL / Fedora
3.2 фильтрация
3.2.1 фильтрация статуса
$ ss state syn-recv Доступны следующие параметры, число позади — это количество строк, запрошенных в данный момент машиной по статусу | wc -l syn-sent отправить сигнал синхронизации syn-recv получает сигнал синхронизации установлен для установления соединения fin-wait- {1,2} дождитесь завершения 2 время ожидания 2 закрыто 111 Закрыть-ждать, дождаться закрытия 2 Last-ack Окончательное подтверждение прослушивание 32 закрытие закрытие 1 all: все 10 указанных выше состояний. connected: все остальные состояния, кроме прослушивания и закрытия (8 состояний) synchronized: все подключены, кроме syn-sent (7 состояний) bucket: Состояние отображения поддерживается как мини-розетки, например time-wait и syn-recv. ( 2 состояния) big: противоположен сегменту (8 состояний)
$ ss state all |wc -l 1036 $ ss state connected |wc -l 889 $ ss state synchronized |wc -l 904 $ ss state bucket |wc -l 18 $ ss state big |wc -l 1023 $ ss state listening |wc -l 34
3.2.2 фильтр по семейству
{inet|inet6|link|unix|netlink|vsock|tipc|help} $ ss -f inet $ ss -f inet |wc -l 33 $ ss -f link |wc -l 6 $ ss -f unix |wc -l 851 $ ss -f netlink |wc -l 62 $ ss -f vsock |wc -l
3.2.3 Использовать фильтрацию адресов и портов
Источник и место назначения, порт источника и порт назначения соединения можно отфильтровать с помощью синтаксиса dst / src / dport / sprot. соответствует локальному адресу и номеру порта. $ ss src 192.168.31.177 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB 0 0 192.168.31.177:60412 89.42.31.211:polestar tcp ESTAB 0 0 192.168.31.177:51972 58.250.136.56:http-alt tcp LAST-ACK 0 1 192.168.31.177:57926 220.194.95.148:https соответствует удаленному адресу и номеру порта. $ ss dst 89.42.31.211 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB 0 0 192.168.31.177:60476 89.42.31.211:polestar tcp ESTAB 0 0 192.168.31.177:60452 89.42.31.211:polestar $ ss dst 192.168.31.113:http $ ss dst 192.168.31.113:80 Фильтрация портов $ ss dport OP PORT $ ss sport OP PORT OP оператора может представлять любое из следующего:<= le меньше или равен определенному номеру порта> = ge больше или равно определенному номеру порта== eq равно определенному номеру порта! = Ne не равно определенному номеру портаGt больше определенного номера порта<Lt меньше определенного номера порта $ ss -tunl sport lt 50 $ ss -tunl sport \< 50
Вместо поскриптума
Если нужно выключить и включить сеть в операционной системе Linux, используем всё ту же известную нам команду ifconfig.
Например, следующей командой мы выключим сетевую карту eth0:
sudo ifconfig eth0 down
А вот команда, включающая сетевую плату в Linux:
sudo ifconfig eth0 up
Также мы можем полностью остановить работу сетевых интерфейсов:
service network stop
Либо так:
/etc/init.d/network stop
Теперь включаем всё обратно:
service network start
Либо так:
/etc/init.d/network restart
На этом всё. Если хотите получить более профессиональные навыки Linux-администрирования, добро пожаловать на специальный курс в OTUS:
По материалам статей:
— https://set-os.ru/network-linux-setup/;
— https://itshaman.ru/articles/54.
3.1 пример использования
Отображение сводной статистики для каждого протокола. $ ss -s Total: 916 TCP: 75 (estab 15, closed 26, orphaned 4, timewait 18) Transport Total IP IPv6 RAW 1 1 0 UDP 14 13 1 TCP 49 48 1 INET 64 62 2 FRAG 0 0 0 Просмотреть все сокеты: ss -a $ ss |wc -l 901 $ ss -a |wc -l //898State 1 CLOSE-WAIT 2 ESTAB 749 FIN-WAIT-2 2 LAST-ACK 1 LISTEN 32 TIME-WAIT 2 UNCONN 110 Всего результат 898 Отобразить прослушивающие сокеты, перечислить все открытые порты сетевого подключения, ss -l или — прослушивание $ ss -l |wc -l //147 Отображать числовые адреса вместо попытки определить символический хост, порт или имя пользователя (пропустить преобразование DNS) ss -n или —numeric $ ss -n отображает символическое имя хоста, порта или пользователя вместо числового представления. Netstat делает это по умолчанию. ss -r или —resolve $ ss -r отображает идентификатор процесса (PID) и имя программы, которой принадлежит каждый сокет. $ ss -p включает информацию, относящуюся к сетевым таймерам. ss -o или —options $ ss -o отображает подробную информацию более высокого уровня. ss -e или —extended $ ss -e Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB 0 0 192.168.31.177:34970 89.42.31.211:polestar uid:1001 ino:3316553 sk:750 <-> tcp ESTAB 0 0 127.0.0.1:59570 127.0.0.1:socks timer:(keepalive,38sec,0) uid:1001 ino:3335889 sk:76a <->
Заключение
В своем материале я рассмотрел два различных способа, с помощью которых можно мониторить любой удаленный сервис по протоколу tcp, либо локальную службу на сервере linux. Конкретно в моих примерах можно было воспользоваться вторым способом в обоих случаях. Я этого не сделал, потому что первым способом я не просто проверяю, что служба запущена, я еще и обращаюсь к ней по сети и проверяю ее корректную работу для удаленного пользователя.
Разница тут получается вот в чем. Допустим, сервер squid у вас запущен и работает на сервере. Проверка работы локальной службы показывает, что сервис работает и возвращает значение 1. Но к примеру, вы настраивали firewall и где-то ошиблись. Сервис стал недоступен по сети, пользователи не могут им пользоваться. При этом мониторинг будет показывать, что все в порядке, служба запущена, хотя реально она не может обслужить запросы пользователей. В таком случай только удаленная проверка покажет, что с доступностью сервиса проблемы и надо что-то делать.
Из этого можно сделать вывод, что система мониторинга zabbix предоставляет огромные возможности по мониторингу. Какой тип наблюдения и сбора данных подойдет в конкретном случае нужно решать на месте, исходя из сути сервиса, за которым вы наблюдаете.