- Записки на полях
- воскресенье, 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 ( Пуск — Все программы — Стандартные — Командная строка ) Если пинг проходит корректно, то вы увидите статистику переданных пакетов и время ответа, как на скриншоте: В противном случае появится сообщение об ошибке, что говорит о сетевой недоступности, либо о проблемах с соединением: Далее нужно зайти на сам сервер и проверить пинг с сервера до внешних ресурсов, перейдите в панель VMmanager и найдите в верхнем меню значок VNC . Если вы используете VMmanager 6, то нажмите на кнопку VNC во вкладке Виртуальные машины . В окне VNC необходимо авторизоваться и запустить ping до любого адреса, например 8.8.8.8 . Если сеть работает, то вы увидите количество переданных пакетов и время, за которое они достигли конечного адреса. Если нет, то придут сообщения вида network unreacheble, connection timeout, либо команда будет просто «висеть» без вывода. Так как ping не проходит, это говорит о том, что не работает сеть. Поэтому переходим к следующему шагу и идём проверять, в чём может быть проблема.
Проверка сетевых настроек сервера
Первым делом проверим корректность сетевого конфига. Если вы приобрели новый сервер и установили свою операционную систему из образа, могли ошибиться с настройками сети. Но даже для действующего сервера не будет лишним убедиться в том, что настройки в порядке. Узнать, какие сетевые настройки следует использовать для вашей операционной системы, можно в статье «Сетевые настройки в кластерах с технологией 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 укажите имя вашей сетевой карты. Ранее мы рассмотрели, где можно его найти. На этом примере видно, что интерфейс не «поднимается» из-за синтаксических ошибок в конфигурационном файле сетевых настроек /etc/network/interfaces . Также стоит проверить статус службы Network командой systemctl status networking . Если она не запущена, то стоит её запустить командой systemctl start networking . Если служба не запустилась, то, возможно, имеется ошибка в конфигурации, о чём будет сообщено в выводе команды запуска. Вам нужно обратить внимание на строку, которая начинается с Active . Обычно статус запуска службы выделен цветом: красным в случае ошибки и зелёным, если запуск был успешен — как на скриншотах ниже: Далее проверяем маршруты. Даже если сетевой интерфейс работает и IP указан верно, без двух маршрутов сеть работать не будет. Должен быть прописан путь до 10.0.0.1 и он же установлен по умолчанию (дефолтным), как здесь:
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 через меню Диски : В VMmanager 6 ISO-образ sysrescueCD подключается в Меню сервера по кнопке Режим восстановления на главной странице панели. После загрузки образа подключаемся по VNC и выполняем команды (в VM6 еще потребуется сначала выбрать образ восстановления в VNC) /etc/init.d/NetworkManager stop
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, с которого пробуете подключаться, и с сервера — в обратном направлении до вашего адреса : В верхнем окне показана трассировка с сервера до домашнего компьютера, в нижнем обратная, с ПК до сервера. Видно, что потерь нет, пакеты не теряются, пинг стабильный. Так должен выглядеть вывод mtr , если у вас все хорошо. В случае, если на пути имеются потери, вместо 0.0% на хопах (промежуточных узлах) в столбце Loss будет указан процент потерянных пакетов от соответствующего узла. На примере ниже видно, что потери начинаются на одном из узлов и дальше сохраняются на последующих хопах: К сожалению, в этом случае проблема уже кроется на стороне провайдеров, через сети которых проходит маршрут до желаемого адреса. Как правило, это носит временный характер, но всегда можно уточнить у техподдержки, нет ли проблем или аварии у провайдера, на чьих сетях наблюдаются потери. В этой статье мы разобрались, как диагностировать проблемы, связанные с доступностью сервера по сети — от настроек на VDS и параметров фаервола до запуска трассировки при потерях. Если столкнулись с проблемой с доступностью сервера, но ответа в статье не нашли, обратитесь в техническую поддержку — мы всегда поможем.