Я в своем уме на этом; Я часами пытался заставить это работать, но я в тупике. Надеюсь, один из вас поможет. :-)
Я пытаюсь заставить 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
Таким образом, служба не будет пытаться запуститься, пока не будет задействован требуемый интерфейс.
Ниже приводится список моментов, по которым можно проверить, есть ли у вас предметная ошибка:
/ и т.д. / по умолчанию / isc-dhcp-сервер
для определения имени интерфейса, ТОЛЬКО будут обслуживать динамические адреса (это уже не ВСЕ интерфейсы вашей системы, а только упомянутые в этом файле). убедитесь, что у вас определен хотя бы 1 интерфейс (и не необходимо могло быть eth0 больше):
INTERFACES="enp0s31f6"
/ и т.д. / сеть / интерфейсы
предоставив следующий блок настроек:
# 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 откажется запускаться
/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