RHEL8でDHCPを設定する

RHEL8でDHCPを設定する

私はrhel 8を使用してファイアウォール/ゲートウェイルーターを設定しています。 2つのネットワークカードを持つサーバーがあります。 1 つは公開用、dhcp クライアント、2 番目のネットワークカードは内部用です。最初のNICはパブリックエリアで、2番目のNICは内部エリアです。内部接続NICを内部クライアント用のDHCPサーバーとして使用したいと思います。

DHCPサーバーがパブリックゾーンからDHCP要求を受信しないようにする必要があります。

Q:特定のNIC用のサーバーでのみ機能するように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

明らかに、RHEL 8のISC dhcpdは、設定ファイルにインターフェイスのサブネット宣言が含まれているかどうかに応じて、受信するインターフェイスを選択するようにパッチされています。特定のインターフェイスにサブネット宣言がない場合は、そのインターフェイスに応答しないでください。

IPv4 で DHCP プロトコルが動作するため、生のdhcpdソケットが必要です (ソースアドレスが 0.0.0.0 で宛先アドレスが 255.255.255.255 のブロードキャストパケットを受信し、通常の IPv4 ルーティングを介して 255.255.255.255 に制限なく送信する場合) )、したがって、とにかく着信パケットをより慎重に処理する必要があります。

生のソケットを使用しているため、ファイアウォールの影響dhcpdも受けませんiptables

それでもコマンドラインにインターフェイス名を追加するには、cp /lib/systemd/system/dhcpd.service /etc/systemd/system/バージョンを変更する/etc/systemd/systemか、systemctl edit dhcpd.service上書きファイルを作成します。もちろん、サービスファイルに複数のExecStart=行がある可能性があるため、別の行を追加するのではなく、既存の行を上書きするには、systemctl edit dhcpd.service次の3行を実行して入力する必要があります。

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

最初の空行は、2番目の定義を追加するのではなく、サービスファイルの既存の定義を上書きすると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 / bootp要求がどのインターフェイスから来るかによって異なる応答を提供するようにdhcpデーモンを設定できます。または各インターフェイスでのみ受信するように構成された複数の dhcpd インスタンスを実行します。

あなたの場合は、dhcpdにプライベートLANインターフェイスでのみ受信するように指示したいと思います。 ISC dhcpdを使用している場合は、dhcpdコマンドラインから受け取るインターフェイス名を追加するだけです。

たとえば、私のシステムでは、dhcpdが自分のワイヤレス(wifi0)と内部ネットワーク(br0- 仮想マシンを実行するのに便利であるため、ブリッジインターフェイスを使用)インターフェイスでのみリッスンするようにして、次のように実行します。

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

関連情報