Настройка DHCP на RHEL8

Это довольно легко сделать одним pasteвызовом

<main paste -d '\0\n' - rename -
#yellow
stars
#white
twinkle
#green
on
#red
the
#blue
sky

Когда в списке разделителей, переданном в -d, pasteиспользуется несколько разделителей, последовательно используются эти разделители до тех пор, пока они не будут исчерпаны, а затем начинается с них снова. В приведенной выше команде переданы два разделителя:\0(пустая строка )и\n(новая строка ). Стандартный ввод указывает на файл main, который затем дважды упоминается внутри команды через два -,все это ведет к строке вывода, формируемой

  1. берет строку из mainи
  2. добавление к нему пустой строки
  3. взять следующую строку из renameи добавить ее к приведенной выше
  4. затем добавление новой строки к приведенному выше
  5. завершение цикла добавлением строки изmain

И так далее

0
31.10.2021, 06:18
1 ответ

В RHEL 8 dhcpd.serviceиспользует переменную $DHCPDARGSв командной строке ExecStart=:

# /usr/lib/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
EnvironmentFile=-/etc/sysconfig/dhcpd
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS
StandardError=null

[Install]
WantedBy=multi-user.target

Но в файле окружения /etc/sysconfig/dhcpd, где должна быть определена такая переменная, есть предупреждение о том, что этот файл больше не используется:

cat /etc/sysconfig/dhcpd 
# 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.

# If you still insist on adding some command line options,
# copy dhcpd.service from /lib/systemd/system to /etc/systemd/system and modify
# it there.
# https://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F

# example:
# $ 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 <your_interface_name(s)>
# $ systemctl --system daemon-reload
# $ systemctl restart dhcpd.service

Таким образом, очевидно, что ISC dhcpd RHEL 8 был исправлен, чтобы выбирать интерфейсы для прослушивания на основе того, содержит ли его файл конфигурации объявления подсети для интерфейса или нет. Если для определенного интерфейса нет объявления подсети, он не должен отвечать для этого интерфейса.

Из-за того, как протокол DHCP работает на IPv4, dhcpdпотребуется использовать необработанный сокет (, чтобы иметь возможность получать широковещательные пакеты с адресом источника 0.0.0.0 и адресом назначения 255.255.255.255, а также для отправить на 255.255.255.255 без ограничений обычной маршрутизацией IPv4 ),и поэтому ему в любом случае нужно более тщательно обрабатывать входящие пакеты.

Поскольку dhcpdиспользует необработанные сокеты, на него также не влияют брандмауэры iptables.

Если вы по-прежнему хотите добавить имена интерфейсов в командную строку, вы можете cp /lib/systemd/system/dhcpd.service /etc/systemd/system/и затем изменить версию в /etc/systemd/systemили просто использовать systemctl edit dhcpd.serviceдля создания файла переопределения. Конечно, вам нужно помнить, что служебные файлы могут иметь несколько строк ExecStart=, поэтому, чтобы переопределить существующую строку, а не просто добавить другую, вы должны запустить systemctl edit dhcpd.serviceи ввести три строки:

[Service]
ExecStart=
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid <your_interface_name(s)>

Первая пустая строка ExecStart=сообщает systemd, что вы хотите переопределить существующее определение ExecStartв сервисном файле, а не добавлять второе.

Если вы используете стратегию cp /lib/systemd/system/dhcpd.service /etc/systemd/system/, не забудьте запустить systemctl daemon-reloadпосле изменения файла /etc/systemd/system/dhcpd.service.

Если вы используете systemctl edit dhcpd.service, он автоматически запустит эквивалент systemctl daemon-reload.

1
01.11.2021, 14:56

Теги

Похожие вопросы