Назад | Перейти на главную страницу

Ubuntu - dhcp-сервер 'не настроен для прослушивания каких-либо интерфейсов'

Я в своем уме на этом; Я часами пытался заставить это работать, но я в тупике. Надеюсь, один из вас поможет. :-)

Я пытаюсь заставить dhcp3-сервер работать на Ubuntu. Он установлен и правильно настроен для работы на уровнях запуска rc2,3,4,5.d. При загрузке его сценарий init.d запускается, и в syslog я получаю следующее:

Oct 18 20:40:37 jez-ubuntu dhcpd: Internet Systems Consortium DHCP Server V3.1.1
Oct 18 20:40:37 jez-ubuntu dhcpd: Copyright 2004-2008 Internet Systems Consortium.
Oct 18 20:40:37 jez-ubuntu dhcpd: All rights reserved.
Oct 18 20:40:37 jez-ubuntu dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Oct 18 20:40:37 jez-ubuntu dhcpd: Wrote 2 leases to leases file.
Oct 18 20:40:37 jez-ubuntu dhcpd:
Oct 18 20:40:37 jez-ubuntu dhcpd: No subnet declaration for eth1 (0.0.0.0).
Oct 18 20:40:37 jez-ubuntu dhcpd: ** Ignoring requests on eth1.  If this is not what
Oct 18 20:40:37 jez-ubuntu dhcpd:    you want, please write a subnet declaration
Oct 18 20:40:37 jez-ubuntu dhcpd:    in your dhcpd.conf file for the network segment
Oct 18 20:40:37 jez-ubuntu dhcpd:    to which interface eth1 is attached. **
Oct 18 20:40:37 jez-ubuntu dhcpd:
Oct 18 20:40:37 jez-ubuntu dhcpd:
Oct 18 20:40:37 jez-ubuntu dhcpd: Not configured to listen on any interfaces!
Oct 18 20:40:39 jez-ubuntu NetworkManager: <info>  (eth0): device state change: 1 -> 2
Oct 18 20:40:39 jez-ubuntu NetworkManager: <info>  (eth0): bringing up device.
Oct 18 20:40:39 jez-ubuntu NetworkManager: <info>  (eth0): preparing device.
[...]

Как видите, похоже, что dhcpd запущен перед NetworkManager, который настраивает мои интерфейсы eth0 (Интернет) и eth1 (домашняя сеть). Можно подумать, что это как-то связано с именами символических ссылок rcX.d, и что dhcpd был назван так, чтобы запускаться до NetworkManager. Не так. Мои символические ссылки dhcp3-сервера называются «S99dhcp3-server», а символические ссылки Network Manager называются «S50NetworkManager», поэтому он должен запускаться до dhcp-сервера. Кроме того, если я действительно запускаю (как root) из командной строки '/etc/init.d/dhcp3-server' ... сервер работает нормально! Не работает только при загрузке!

Почему он говорит, что не настроен для прослушивания каких-либо интерфейсов? Не запускает ли сетевой менеджер интерфейсы eth0 и eth1 до после все мои загрузочные скрипты сработали? Если это так, какой от этого толк? Разумеется, для других сценариев эти интерфейсы должны быть доступны во время загрузки? Вот мой файл /etc/dhcp3/dhcpd.conf:

subnet 192.168.0.0 netmask 255.255.255.0 {
        option routers 192.168.0.1;
        option subnet-mask 255.255.255.0;
        option domain-name-servers 87.194.0.51;
        option ip-forwarding off;
        range dynamic-bootp 192.168.0.100 192.168.0.254;
        default-lease-time 21600;
        max-lease-time 43200;
}

и мой файл / etc / default / dhcp3-server:

# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/dhcp3-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"

Насколько я могу судить, все это правильно. Любые идеи?

вы можете изменить свой / etc / network / interfaces следующим образом:

iface eth1 inet static
  address 192.168.50.1
  netmask 255.255.255.0
  up service dhcp3-server restart

поэтому dhcp3-server будет (повторно) запущен после того, как сетевой интерфейс (eth1) действительно заработает.

Хорошо, я думаю, что исправил эту проблему. И это ошибка сетевого менеджера Linux.

Видите ли, сетевой менеджер запускается как часть процесса загрузки (это будет символическая ссылка «S50NetworkManager») и вызывает ваши интерфейсы Ethernet. Однако он делает это асинхронно. Это означает, что диспетчер сети немедленно возвращается, подразумевая сценариям после него: «ОК - сеть настроена». На самом деле это не так, и администратор сети сидит в фоновом режиме и занимается настройкой сети. Между тем, сценарии загрузки после этого выполняются с предположением, что сетевые интерфейсы будут доступны, что является условием гонки, в зависимости от того, успел ли сетевой менеджер их настроить.

Это ужасная ситуация, и я удивлен, что ошибка не исправлена. Один из способов обойти это - отказаться от сетевого менеджера и вместо этого настроить ваши интерфейсы, отредактировав / etc / network / interfaces. Однако вместо того, чтобы выполнять эту работу, я попробовал уродливый хакер, предложенный в этом отчете об ошибке: https://bugzilla.redhat.com/show_bug.cgi?id=486372

Я добавил 5-секундную задержку ('sleep 5') в начало функции запуска в сценарии init.d dhcp3-сервера, что дало сетевому менеджеру достаточно времени для настройки сетевых интерфейсов (хотя, конечно, все еще нет гарантия) - и все заработало. Теперь dhcpd успешно запускается.

Как подробно описано в ошибках # 486372 и # 447442 на bugzilla.redhat.com, это ошибка либо в диспетчере сети (он должен блокироваться, пока не станут доступны его проводные сетевые интерфейсы), либо в dhcpd (его следует обновить, чтобы дождаться сетевых интерфейсов. стать доступным, а не просто вылететь из строя). Однако это определенно своего рода ошибка.

Встречаю ошибку типа "No subnet declaration for eth1" и "Not configured to listen on any interfaces!".

Затем я добавляю eth1 subnet заявление в dhcpd.conf хотя подсеть не сдает адрес. И это работает.

subnet 10.32.64.0 netmask 255.255.252.0 {
    option routers 10.32.64.1;
}

У меня была аналогичная проблема, но в моем случае сетевой интерфейс (eth0) никогда не работал - он не смог правильно инициализироваться. Однако это происходило с перерывами, примерно в 20% случаев. Задержка или перезапуск dhcp-сервера, как предлагалось в других ответах, не решили мою проблему.

В моем случае решение состояло в том, чтобы перезапустить обе сетевые службы, а затем сервер DHCP с помощью чего-то вроде следующего скрипта (только фрагменты, не запускаемые от начала до конца) ...

# Check if the networking is running ...
# look for "192.168.0.202" within this command's output
ifconfig

# If the networking is not running, then restart the network interfaces via this command:
sudo service networking restart

# Check if the DHCP service is running ...
# look for "dhcpd" within this command's output
ps -C dhcpd

# If the DHCP service is not running, then restart the DHCP service via this command:
sudo service isc-dhcp-server restart

Думаю, у меня была эта проблема по другой причине.

Я пытался использовать DHCP для настройки интерфейса, который сервер будет слушать. AKA моя локальная сеть была подключена к порту eth0 сервера, и я пытался получить DHCP для настройки eth0. По-видимому, не работает; Интерфейсы прослушивания DHCP должны быть настроены статически (/ etc / network / interfaces).

Поправьте меня если я ошибаюсь. Я не думал, что нужно статически настраивать прослушивающее устройство DHCP.

Я только что столкнулся с этой проблемой в Ubuntu, и я исправил ее немного иначе. Я использую службу isc-dhcp-server, но она пыталась запуститься до того, как был задействован требуемый интерфейс, вылетал, а затем исчерпал лимит респауна. Я внес небольшое изменение в начать строка в конфигурационном файле выскочки в / etc / init:

start on runlevel [2345] and net-device-up IFACE=eth0

Таким образом, служба не будет пытаться запуститься, пока не будет задействован требуемый интерфейс.

Ниже приводится список моментов, по которым можно проверить, есть ли у вас предметная ошибка:

  1. isc-dhcpd-server заглядывает внутрь:

/ и т.д. / по умолчанию / isc-dhcp-сервер

для определения имени интерфейса, ТОЛЬКО будут обслуживать динамические адреса (это уже не ВСЕ интерфейсы вашей системы, а только упомянутые в этом файле). убедитесь, что у вас определен хотя бы 1 интерфейс (и не необходимо могло быть eth0 больше):

INTERFACES="enp0s31f6"
  1. isc-dhcpd-server не примет указанный выше интерфейс (enp0s31f6 в моем примере) для обслуживания динамически выделяемых IP-адресов поверх него, если вы не назначили ему статический IP-адрес. присвоение адреса осуществляется в:

/ и т.д. / сеть / интерфейсы

предоставив следующий блок настроек:

# Define the static address and set it to serve with DHCP.  Link it to the existing interface.
iface enp0s31f6 inet static
address 10.20.0.1
netmask 255.255.255.240
#below are optional settings
#gateway 192.168.100.251
#dns-nameservers 8.8.8.8

После настройки статического адреса для выбранного интерфейса убедитесь, что он доступен, установлен и назначен определенный адрес (путем перезапуска сети) с помощью следующей команды:

sudo service networking restart

в противном случае isc-dhcpd-server откажется запускаться

  1. isc-dhcpd-server будет обслуживать только интерфейсы, имеющие подсеть динамического освобождения, определенную в

/etc/dhcp/dhcpd.conf

путем предоставления отдельного определения блока (как минимум одного) для адреса интерфейса (выбранный статический IP-адрес интерфейса должен соответствовать настроенной подсети):

subnet 10.20.0.0 netmask 255.255.255.0 {
    range 10.20.0.10 10.20.0.100;
    option subnet-mask 255.255.255.0;
    option routers 10.20.0.1;
    option broadcast-address 10.20.0.255;
    option domain-name-servers 192.168.100.254, 8.8.8.8;
}

только соблюдая все 3 правила, вы получите службу DHCP, работающую на вашем Ubuntu (разрешено и проверено в версии 16.04)

наконец, пришло время запустить isc-dhcpd-server, выполнив команду:

sudo service isc-dhcp-server start

чтобы проверить успешность конфигурации, используйте другую команду:

sudo service isc-dhcp-server status

и просмотрите следующие строки для подтверждения успеха:

● isc-dhcp-server.service - ISC DHCP IPv4 server
Active: active (running) since Wed 2017-05-10 15:28:13 CEST; 29min ago
May 10 15:28:13 system-P50 dhcpd[26869]: Listening on LPF/enp0s31f6/0a:3e:47:75:17:a8/10.20.0.0/24

Я боролся с этим сообщением об ошибке 1 день.

No subnet declaration for eth1 (no IPv4 addresses).

Наконец, ошибка в моем случае исходит из сценария службы dhcp, запускаемого с помощью команд systemctl.

#cat /etc/systemd/system/dhcpd.service

[Service]
Type=notify
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid **eth1**

Просто измените номер ethXX

Перезагрузить

#systemctl daemon-reload

перезапустите его:

#systemctl start dhcpd