У меня есть машина под управлением Centos 7 с 8 сетевыми интерфейсами. У меня есть три настроенных и работающих интерфейса.
Я настроил dhcpd для обработки локальных сетевых интерфейсов.
Я получаю следующие предупреждения в системном журнале для ненастроенных интерфейсов:
No subnet declaration for enp6s0 (no IPv4 addresses).
** Ignoring requests on enp6s0. If this is not what
you want, please write a subnet declaration
in your dhcpd.conf file for the network segment
to which interface enp6s0 is attached. **
Раньше я бы отредактировал / etc / syslog / dhcpd, чтобы указать, какие интерфейсы следует слушать. Но теперь в этом файле говорится, что этого не следует делать, и указывается подсеть для интерфейсов.
Эти неиспользуемые интерфейсы не имеют адресов, поэтому я не понимаю, как я могу написать для них конфигурацию подсети.
Есть ли альтернативный способ заставить dhcpd игнорировать эти интерфейсы?
Первое редактирование -
Если сделать это с существующими объявлениями подсети, предупреждения исчезнут:
subnet xx.xx.xx.xx mask yy.yy.yy.yy {
interface zzzzzz;
.... subnet declaration
}
Но я не могу найти никакой документации, которая показывает вариант интерфейса для подсети. Я считаю это странным.
Вам не нужно добавлять линию интерфейса, если она находится в другой подсети. В дистрибутиве Slackware 14.2 Linux есть следующий пример:
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
subnet 192.168.2.0 netmask 255.255.255.0 {
}
Когда это добавляется к dhcpd.conf
, вы увидите в журнале следующие сообщения:
Listening on LPF/wlan0/a0:2b:6a:b5:24:d0/192.168.2.0/24
Sending on LPF/wlan0/a0:2b:6a:b5:24:d0/192.168.2.0/24
Но для этой подсети не будет предлагаться никаких услуг.
В качестве альтернативы, если вы обслуживаете DHCP только через один интерфейс, вы можете указать этот интерфейс в командной строке при запуске dhcpd
:
dhcpd eth0
Этот второй метод не требует указания дополнительных подсетей в dhcpd.conf
, и это особенно удобно, если вы обслуживаете DHCP в физически изолированной сети.
Я считаю /etc/sysconfig/dhcpd
указывает, как ограничить количество интерфейсов, прослушиваемых на systemd в системе $ {RHELish} 7:
cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system
sed -i '/^ExecStart/s/$/ blah0 blah1 .../' /etc/systemd/system/dhcpd.service
systemctl --system daemon-reload
systemctl restart dhcpd.service
Комментарии ниже находятся в / etc / sysconfig / dhcpd на CentOS 7.2:
# WARNING: This file is NOT used anymore.
# If you are here to restrict what interfaces should dhcpd listen on,
# be aware that dhcpd listens *only* on interfaces for which it finds subnet
# declaration in dhcpd.conf. It means that explicitly enumerating interfaces
# also on command line should not be required in most cases.
Решение состоит в том, чтобы сообщить dhcpd, что он не должен отслеживать эти интерфейсы. По умолчанию dhcpd будет пытаться отслеживать все интерфейсы с поддержкой широковещательной передачи, но вы можете указать в командной строке явный список интерфейсов для управления. Проверьте сценарии запуска для dhcpd, и вы найдете место, куда вы можете вставить конкретный ethN, на котором он должен работать.
Или вы можете игнорировать предупреждение. Это просто говорит вам, что вы можете не получить то, что ожидали, из-за возможной неправильной конфигурации. Вы неявно попросили dhcpd контролировать все интерфейсы, и он дает вам понять, что не может.
RHEL6
установите DHCPDARGS в / etc / sysconfig / dhcpd, чтобы включить только те интерфейсы, которые должен прослушивать демон (например, eth0 eth1 игнорирует eth3):
DHCPDARGS = "eth0 eth1"
Восстановить функциональность DHCPDARGS в RHEL7
# cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
# vi /etc/systemd/system/dhcpd.service
# ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS
# systemctl --system daemon-reload
# systemctl restart dhcpd.service
Ответ Ричарда верен и для RHEL 7.
Я бы просто добавил это как комментарий к его ответу, но пока у меня недостаточно репутации.
Согласно документации, правильное место для размещения файлов модулей systemd, измененных пользователем, - это / etc / systemd / system.
Я могу подтвердить, что, поместив файл dhcpd.service в / etc / systemd / system и изменив строку ExecStart в этом файле, чтобы включить желаемый интерфейс (ы), как он показал в своем ответе, работает.
Чтобы немного расширить его ответ:
После внесения изменений и запуска службы вы можете запросить ее статус с помощью:
systemctl status dhcpd.service
Я получаю следующий вывод, подтверждающий, что он прослушивает правильный интерфейс и только тот, который мне нужен.
systemctl status dhcpd.service
● dhcpd.service - демон сервера DHCPv4 загружен: загружен (/etc/systemd/system/dhcpd.service; отключен; предустановка поставщика: отключен) Active: активен (работает) с понедельника 2011-05-02 03:32:11 CDT; 5с назад Документы: man: dhcpd (8) man: dhcpd.conf (5) Основной PID: 27814 (dhcpd) Статус: «Отправка пакетов ...» CGroup: /system.slice/dhcpd.service └─27814 / usr / sbin / dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid enp3s0
02 мая, 03:32:11 host.example dhcpd [27814]: Copyright 2004-2013 Консорциум Интернет-систем. 02 мая, 03:32:11 host.example dhcpd [27814]: Все права защищены. 2 мая, 03:32:11 host.example dhcpd [27814]: Для получения информации посетите https://www.isc.org/software/dhcp/ 02 мая, 03:32:11 host.example dhcpd [27814]: Записано 0 удаленных дескрипторов хоста в файл аренды. 02 мая, 03:32:11 host.example dhcpd [27814]: Записано 0 новых динамических дескрипторов хоста в файл аренды. 02 мая, 03:32:11 host.example dhcpd [27814]: Записано 0 договоров аренды в файл аренды. 02 мая, 03:32:11 host.example dhcpd [27814]: Прослушивание LPF / enp3s0 / 00: 1e: 0b: 50: f7: 64 / 10.0.0.0 / 24 мая 02 03:32:11 host.example dhcpd [ 27814]: отправка
LPF / enp3s0 / 00: 1e: 0b: 50: f7: 64 / 10.0.0.0 / 24 мая 02 03:32:11 host.example dhcpd [27814]: отправка в Socket / fallback / fallback-net 02 мая, 03:32 : 11 host.example systemd [1]: Запущен демон сервера DHCPv4.
/etc/systemd/system/dhcpd.service
[Unit] Description=DHCPv4 Server Daemon
Documentation=man:dhcpd(8) man:dhcpd.conf(5)
Wants=network-online.target After=network-online.target
After=time-sync.target
[Service]
Type=notify
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid enp3s0
[Install]
WantedBy=multi-user.target
Проверено на RHEL 7.6 x86_64 с dhcp-4.2.5-68.el7