- Записки на полях
- воскресенье, 3 января 2021 г.
- Сервер с Ubuntu 20.04 LTS перестает быть доступным по сети? Ответ: он спит
- Что делать, если сервер недоступен по сети
- Проверка пинга
- Проверка сетевых настроек сервера
- Диагностика проблем сети с помощью утилиты ip
- Проверка фаервола
- Проверка влияния ПО
- Проверка на наличие сетевых потерь
Записки на полях
Грабли, на которые я наступил. Руководства, инструкции, ощущения.
воскресенье, 3 января 2021 г.
Сервер с Ubuntu 20.04 LTS перестает быть доступным по сети? Ответ: он спит
Интересную фишку подкинул Ubuntu Server после обновления до 20.04 LTS. Сервера через некоторый промежуток времени переставал быть доступным по сети и отвечать на пинги. Чтобы его «разбудить», нужно было нажатие (короткое) на кнопку включения сервера (у меня старичок HP Microserver G7).
Выяснилось, что в ОС добавился демон по «убаюкиванию» сервера. Сервера, Карл! Как проверить? Заглянуть в журнал событий system:
microserver:~$ sudo less /var/log/syslog |grep sleep
Jan 3 00:31:25 microserver NetworkManager[717]: [1609623085.5485] manager: sleep: sleep requested (sleeping: no enabled: yes)
Jan 3 00:31:25 microserver systemd-sleep[2329]: Suspending system.
Jan 3 11:08:38 microserver systemd-sleep[2329]: System resumed.
Jan 3 11:08:43 microserver systemd-sleep[2519]: /dev/sdc:
Jan 3 11:08:43 microserver systemd-sleep[2519]: setting Advanced Power Management level to 0xfe (254)
Jan 3 11:08:43 microserver systemd-sleep[2519]: APM_level#011= off
Jan 3 11:08:44 microserver systemd-sleep[2826]: /dev/sdd:
Jan 3 11:08:44 microserver systemd-sleep[2826]: setting Advanced Power Management level to 0xfe (254)
Jan 3 11:08:44 microserver systemd-sleep[2826]: APM_level#011= off
Jan 3 11:08:44 microserver NetworkManager[717]: [1609661324.3631] manager: sleep: wake requested (sleeping: yes enabled: yes)
Jan 3 11:28:44 microserver NetworkManager[717]: [1609662524.4045] manager: sleep: sleep requested (sleeping: no enabled: yes)
Jan 3 11:28:44 microserver systemd-sleep[3413]: Suspending system.
Jan 3 16:32:03 microserver systemd-sleep[3413]: System resumed.
Jan 3 16:32:08 microserver systemd-sleep[3587]: /dev/sdc:
Jan 3 16:32:08 microserver systemd-sleep[3587]: setting Advanced Power Management level to 0xfe (254)
Jan 3 16:32:08 microserver systemd-sleep[3587]: APM_level#011= off
Jan 3 16:32:08 microserver systemd-sleep[3831]: /dev/sdd:
Jan 3 16:32:08 microserver systemd-sleep[3831]: setting Advanced Power Management level to 0xfe (254)
Jan 3 16:32:08 microserver systemd-sleep[3831]: APM_level#011= off
Jan 3 16:32:09 microserver NetworkManager[717]: [1609680729.1749] manager: sleep: wake requested (sleeping: yes enabled: yes)
Я вполне допускаю, что если ставить сервер с нуля, то эта функция не активируется, либо вам дают возможность настройки во время установки. Но я-то свой сервер обновляю не помню уже с какой версии (минимум с 14.04).
microserver:~$ systemctl status sleep.target
● sleep.target — Sleep
Loaded: loaded (/lib/systemd/system/sleep.target; static; vendor preset: enabled)
Active: inactive (dead)
Docs: man:systemd.special(7)
microserver:~$ sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Created symlink /etc/systemd/system/sleep.target → /dev/null.
Created symlink /etc/systemd/system/suspend.target → /dev/null.
Created symlink /etc/systemd/system/hibernate.target → /dev/null.
Created symlink /etc/systemd/system/hybrid-sleep.target → /dev/null.
microserver:~$ systemctl status sleep.target
● sleep.target
Loaded: masked (Reason: Unit sleep.target is masked.)
Active: inactive (dead)
Как включить обратно (ну мало ли):
microserver:~$ sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
Removed /etc/systemd/system/sleep.target.
Removed /etc/systemd/system/suspend.target.
Removed /etc/systemd/system/hibernate.target.
Removed /etc/systemd/system/hybrid-sleep.target.
microserver:~$ systemctl status sleep.target
● sleep.target — Sleep
Loaded: loaded (/lib/systemd/system/sleep.target; static; vendor preset: enabled)
Active: inactive (dead)
Docs: man:systemd.special(7)
Что делать, если сервер недоступен по сети
Рассмотрим случай, когда сервер доступен по VNC, но при этом не пингуется и не реагирует на попытки подключения по ssh. Тут есть несколько сценариев развития событий, о которых мы поговорим далее. Но сначала убедимся, что это наш случай, и проверим, есть ли пинг.
Проверка пинга
Запустить ping с вашего ПК до IP-адреса вашего сервера можно, например, через CMD : командная строка Windows ( Пуск — Все программы — Стандартные — Командная строка ) Если пинг проходит корректно, то вы увидите статистику переданных пакетов и время ответа, как на скриншоте:
Проверка сетевых настроек сервера
Первым делом проверим корректность сетевого конфига. Если вы приобрели новый сервер и установили свою операционную систему из образа, могли ошибиться с настройками сети. Но даже для действующего сервера не будет лишним убедиться в том, что настройки в порядке. Узнать, какие сетевые настройки следует использовать для вашей операционной системы, можно в статье «Сетевые настройки в кластерах с технологией VPU».
Диагностика проблем сети с помощью утилиты ip
Диагностировать проблему нам поможет утилита ip — она покажет имя, статус сетевого интерфейса и IP-адреса, которые ему назначены. Утилита установлена во всех современных linux-дистрибутивах. На сервере с корректными настройками вывод будет таким:
root@support:~# ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 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: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:c8:e6:45 brd ff:ff:ff:ff:ff:ff inet 149.154.66.7 peer 10.0.0.1/32 brd 149.154.66.7 scope global eth0 valid_lft forever preferred_lft forever inet6 2a01:230:2::d98/64 scope global valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fec8:e645/64 scope link valid_lft forever preferred_lft forever
В этом случае, нас интересует блок с названием нашего сетевого интерфейса — в этом случае eth0 (на разных ОС может называться по-разному, например, ens3, eno1). Здесь прописан наш IP-адрес, маска и шлюз, что можно увидеть в строке:
inet 149.154.66.7 peer 10.0.0.1/32 brd 149.154.66.7 scope global eth0
На наших серверах используется технология VPU , поэтому в качестве сетевого шлюза на серверах используется адрес 10.0.0.1 , а маска подсети /32 Также следует обратить внимание на статус интерфейса. Если его статус DOWN, а не UP, то стоит попробовать запустить интерфейс вручную командой if up eth0 , где вместо eth0 укажите имя вашей сетевой карты. Ранее мы рассмотрели, где можно его найти.
root@support:~# ip r default via 10.0.0.1 dev eth0 onlink 10.0.0.1 dev eth0 proto kernel scope link src 149.154.66.7
Если сеть не заработала, проверяем пинг до шлюза 10.0.0.1 — если он проходит, возможно, проблемы на стороне хостинг-провайдера. Напишите нам в поддержку, разберёмся.
Проверка фаервола
Возможен вариант, что сеть настроена корректно, но трафик блокируется фаерволом внутри самого VDS. Чтобы это проверить, первым делом смотрим на политики по умолчанию.
Для этого вводим iptables-save и смотрим на первые несколько строк вывода. В начале мы увидим политику по умолчанию для соединений (цепочек) INPUT , OUTPUT , FORWARD — то есть правила для всех входящих, исходящих и маршрутизируемых соединений. Они имеют статус DROP либо ACCEPT . Когда все соединения с сервера заблокированы, они имеют статус DROP , и вывод выглядит так: Чтобы исключить влияние фаервола, просматриваем текущие правила с помощью iptables-save и сохраняем их в отдельный файл командой:
iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -F
Если после выполнения этих команд сеть появилась, значит проблема была в этом. Поэтому после того, как вы локализовали причину, необходимо разобраться, какое из правил блокирует доступ. Уточним, что при перезагрузке сервера исходные правила восстановятся, либо их можно восстановить командой из ранее сохраненного нами файла
Проверка влияния ПО
Возможен вариант, что установленные на сервере программы (особенно связанные с изменением маршрутизации на сервере, например, OpenVPN, Docker, PPTP) «ломают» работу сети. Чтобы исключить влияние установленного на сервер ПО, можно запустить сервер в режиме восстановления и проверить сеть. Для этого в панели VMmanager останавливаем VDS и подключаем ISO-образ sysrescueCD через меню Диски :
ifconfig eth0 IP-адрес сервера netmask 255.255.255.255 route add 10.0.0.1 eth0 route add default gw 10.0.0.1
После чего запускаем пинг до 8.8.8.8 . Если он проходит, значит, с сетью на сервере всё благополучно.
Проверка на наличие сетевых потерь
Ещё возможен такой случай, что сеть работает, но наблюдаются потери пакетов по сети, что приводит к долгой загрузке сайтов, долгому ответу сервера и прочим неудобствам. Для диагностики подойдет утилита mtr . Она совмещает в себе трассировку и пинг, что наглядно показывает, есть ли проблемы с потерей пакетов и на каких узлах (хопах) они проявляются. Запускаем на сервере mtr до вашего IP, с которого пробуете подключаться, и с сервера — в обратном направлении до вашего адреса :