SystemdDoctor
служба не работает частое сеть загрузка адреса

Cannot assign requested address при привязке

Сообщение Cannot assign requested address (номер 99, EADDRNOTAVAIL) значит, что служба пытается занять адрес, которого на машине нет. Классический случай при загрузке: служба стартовала раньше, чем интерфейс получил адрес.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Адрес ещё не настроен на интерфейсе

    Цель network.target означает лишь, что подсистема сети запущена, а не что адреса получены. Служба, привязанная к конкретному адресу, при старте его не находит.

  2. Адрес принадлежит другой машине или интерфейсу

    В настройках указан адрес, которого на этом сервере нет: перенесли конфигурацию, сменили адресацию, забыли про плавающий адрес кластера.

  3. Плавающий адрес кластера ещё не переехал

    В отказоустойчивых схемах адрес поднимается только на активном узле. Служба на пассивном узле привязаться к нему не может.

  4. Привязка к адресу IPv6 при отключённом IPv6

    Если IPv6 выключен параметром ядра, привязка к адресу этого семейства невозможна, хотя в настройках он выглядит допустимым.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Полный список адресов машины в компактном виде: сразу видно, есть ли нужный.

ip -brief addr

Ждёт ли служба готовности сети или только её запуска.

systemctl show myapp.service -p After -p Wants | tr " " "\n" | grep -i network

Работает ли служба ожидания сети: без неё цель network-online.target достигается сразу и ничего не гарантирует.

systemctl status systemd-networkd-wait-online.service NetworkManager-wait-online.service --no-pager | head -12

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Адрес ещё не настроен на интерфейсе
Почему происходит
Цель network.target означает лишь, что подсистема сети запущена, а не что адреса получены. Служба, привязанная к конкретному адресу, при старте его не находит.
Как проверить
Посмотрите адреса и порядок запуска службы.
ip -brief addr
systemctl show myapp.service -p After -p Wants
Как исправить
Дождитесь готовности сети: Wants=network-online.target и After=network-online.target. Эта цель достигается, когда адреса получены.
[Unit]
Wants=network-online.target
After=network-online.target
2. Адрес принадлежит другой машине или интерфейсу
Почему происходит
В настройках указан адрес, которого на этом сервере нет: перенесли конфигурацию, сменили адресацию, забыли про плавающий адрес кластера.
Как проверить
Сверьте адрес из настроек с фактическими.
ip -brief addr
sudo grep -rn "listen\|bind" /etc/myapp/ | head
Как исправить
Исправьте адрес или слушайте на всех интерфейсах (0.0.0.0 либо ::). Для плавающего адреса нужен параметр ядра, разрешающий привязку к отсутствующему адресу.
3. Плавающий адрес кластера ещё не переехал
Почему происходит
В отказоустойчивых схемах адрес поднимается только на активном узле. Служба на пассивном узле привязаться к нему не может.
Как проверить
Проверьте, поднят ли адрес, и разрешена ли привязка к неместному адресу.
ip addr show | grep -A2 secondary
sysctl net.ipv4.ip_nonlocal_bind
Как исправить
Разрешите привязку к отсутствующему адресу: net.ipv4.ip_nonlocal_bind=1 (для IPv6 — соответствующий параметр). Это стандартное решение для балансировщиков и плавающих адресов.
echo "net.ipv4.ip_nonlocal_bind = 1" | sudo tee /etc/sysctl.d/99-nonlocal.conf && sudo sysctl --system
4. Привязка к адресу IPv6 при отключённом IPv6
Почему происходит
Если IPv6 выключен параметром ядра, привязка к адресу этого семейства невозможна, хотя в настройках он выглядит допустимым.
Как проверить
Посмотрите состояние IPv6.
sysctl net.ipv6.conf.all.disable_ipv6
ip -6 addr
Как исправить
Либо включите IPv6, либо уберите адреса этого семейства из настроек службы.

Пример вывода

Служба стартовала до получения адреса. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

× myapp.service - My application
     Active: failed (Result: exit-code) since Mon 2026-09-15 06:00:02 MSK; 3s ago

myapp[2400]: fatal: listen tcp 203.0.113.10:8443: bind: cannot assign requested address
systemd[1]: myapp.service: Main process exited, code=exited, status=1/FAILURE

Связанные ошибки

Где встречается чаще всего

Источники

  • systemd.special(7)
    network.target и network-online.target: чем они отличаются.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • bind(2): ошибка EADDRNOTAVAIL документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено привязкой к адресу до готовности сети и на пассивном узле с плавающим адресом.
    собственная проверка, systemd 255
    сверено 15 сентября 2026