RHEL8 での DHCP の設定

RHEL8 での DHCP の設定

私は、rhel 8 を使用してファイアウォール/ゲートウェイ ルーターを設定しています。2 つの NIC を備えたサーバーがあり、1 つはパブリック向けで DHCP クライアント、2 つ目は内部向けです。最初の NIC はパブリック ゾーン、2 つ目は内部ゾーンです。内部向け NIC を内部クライアント用の DHCP サーバーにしたいと考えています。

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

質問: DHCP を特定の NIC 専用のサーバーとして設定できますか? それとも、パブリック ゾーンからのすべての DHCP をブロックするファイアウォール ルールでこれを管理しますか? このような多機能ゲートウェイを設定する場合の良い方法は何ですか?

答え1

RHEL 8 では、コマンド ラインで変数dhcpd.serviceを使用します。$DHCPDARGSExecStart=

# /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 プロトコルの動作方法により、dhcpdraw ソケットを使用する必要があります (送信元アドレスが 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 インスタンスを実行し、各インスタンスが 1 つのインターフェースのみをリッスンするように構成します。

あなたの場合、dhcpd にプライベート LAN インターフェイスのみを listen するように指示したいだけのように思えます。ISC dhcpd を使用している場合は、dhcpd コマンド ラインに listen するインターフェイスの名前を追加するだけで、これを実行できます。

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

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

関連情報