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

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

Я настраиваю брандмауэр/шлюзовой маршрутизатор с помощью rhel 8. У меня есть сервер с двумя сетевыми картами, одна из которых обращена к публичной зоне и является клиентом dhcp, вторая сетевая карта будет обращена к внутренней зоне. Первая сетевая карта — это зона Public, вторая сетевая карта — это зона Internal. Я хотел бы сделать сетевую карту, обращенную к внутренней зоне, DHCP-сервером для внутренних клиентов.

Мне нужно заблокировать получение DHCP-запросов в публичной зоне моим DHCP-сервером.

Вопрос: Можно ли настроить dhcp как сервер только для определенной сетевой карты или вы управляете этим с помощью правил брандмауэра, чтобы блокировать все DHCP из публичной зоны? Какова хорошая практика при настройке многофункционального шлюза, подобного этому?

решение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

решение2

Это зависит от того, какой именно демон DHCP вы используете, но да, можно настроить демон DHCP так, чтобы он выдавал разные ответы в зависимости от того, с какого интерфейса пришел запрос DHCP/Bootp.илидля запуска нескольких экземпляров dhcpd, каждый из которых настроен на прослушивание только одного интерфейса.

В вашем случае, похоже, вы просто хотите сказать вашему dhcpd прослушивать только ваш частный интерфейс LAN. Если вы используете ISC dhcpd, вы можете сделать это, просто добавив имя(я) интерфейса(ов), которые вы хотите прослушивать, в командную строку dhcpd.

например, в моей системе я хочу, чтобы dhcpd прослушивал только мои беспроводные ( wifi0) и внутренние сетевые ( br0- я использую мостовой интерфейс, потому что это удобно для запуска виртуальных машин) интерфейсы, поэтому я запускаю его так:

/usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf br0 wlan0

Связанный контент