DNS と DHCP はペアになって説明されることが多いネットワーク管理の基礎になる機能を持っています。
DNS はインターネットにある Google だとか iCloud などの「場所」を名前から 固有の IP アドレスに変換する「名前解決」の機能を提供します。
DHCP は、LAN に繋がったコンピュータが起動すると、そのコンピュータに LAN 内部の固有の IP アドレスを割り当て、そのついでに、インターネットの出口にあるルータや、LAN 内にある住所録である DNS サーバはこれを使えという指示を出します。
ネットワークに繋がったスマートフォンや PC は DHCP に与えられた IP で DHCP で指示された最寄りの DNS サーバを通してインターネットや LAN にあるサーバに接続して情報のやり取りを行います。
LAN 内の DNS/DHCP が必要な理由
DNS はインターネットに繋がる Google や Apple のネットワークの住所を記憶しておくだけではなく、LAN 内部にある NAS などのファイルサーバー、社内データベースなどの在り処を記述するためにも、LAN 内部にも DNS サーバが必要な場合があります。この機能は、一般的に市販されている WI-FI ルータでは機能できません。高機能なルータを覗いて、ほとんどの市販ルータにはインターネットの情報を記憶する DNS/DHCP の機能はあっても、構内 LAN の情報をカスタマイズして管理する機能がありません。
一般的な家庭用、 SOHO 向けのルータには DNS/DHCP の機能は付いていますが、最低限の機能しか実装されていません。ネットワークの全てのデバイスがインターネットに接続することが目的ならばそれでも構いませんが、プライベートネットワークにはプリンタ、NASなどの機器があり、これらを共有するためには、それぞれの機器の IP アドレスを知っていなければなりません。プリンタが増えたり、NAS を更新したり、ファイルサーバの機能が変わったりする都度、全ての設定を変更するのは面倒です。
真っ先に、構内ネットワーク (LAN) を構築する場合に必要になるのが DNS/DHCP です。
ここでは、初めて Linux で DNS/DHCP を立ち上げる場合、どんな作業が必要なのかを openSUSE Leap 15 を使った場合の流れを説明します。
よく古い DNS や Microsoft AD のマニュアル本にあるような .local というドメイン名は mDNS という機能で使われるため、使ってはいけません。iPhone や mac のみならず、様々なデバイスで問題がでる可能性があります。
NS レコードの指定
ここにこのゾーンを管理するこの DNS サーバの自分自身の FQDN を追加、localhost は削除
MX レコードの指定、メールサーバーは使わないのでここでは空欄
レコードキー Type を追加します。
A レコード: ホスト名と IPv4 アドレスを関係づけるレコードです。Hostname Key に対して ipv4 アドレスのValue を設定します。
CNAME レコード : A レコードの別名です。下の例では samba サーバに NTP サーバの機能を割り当てています。
MX レコード : このゾーンで使うメールサーバの記述です。ここでは使っていません。
NS レコード : このゾーン情報の責任を持つDNS サーバを記述します。つまりこのサーバ。
SOA の編集
SOA は管理情報。ここに記述されるのは、このゾーンの管理に必要な更新期間であるとか、シリアル番号などです。 openSUSE Leap/SLE では、YaST によりシリアル番号は自動的に"今日の日付+xx" がインクリメントして付け加えられます。この情報は、セカンダリ DNS に対して有効に機能します。
ゾーンファイルはこの様に /var/lib/named/master ディレクトリに作成されます。
localhost:/var/lib/named/master # cat ./local.mycompany.com $TTL 2d @IN SOAlocalhost.root.localhost. ( 2023041604; serial 3h; refresh 1h; retry 1w; expiry 1d ); minimum local.mycompany.com.IN NSdns01.local.mycompany.com. router IN A192.168.1.1 samba IN A192.168.1.240 nas01 IN A192.168.1.237 ntp01I N CNAMEsamba printer IN A192.168.1.7 dns01 IN A192.168.1.101 localhost:/var/lib/named/master #
dns2:/var/lib/dhcp/db # cat dhcpd.leases # The format of this file is documented in the dhcpd.leases(5) manual page. # This lease file was written by isc-dhcp-4.3.6-P1 # authoring-byte-order entry is generated, DO NOT DELETE authoring-byte-order little-endian; lease 192.168.1.39 { starts 3 2023/04/12 16:16:31; ends 3 2023/04/12 16:18:31; cltt 3 2023/04/12 16:16:31; binding state free; hardware ethernet f9:af:77:26:66:38; uid "\001\371\257w&f8"; }
DHCP サーバで IP の固定
予め、ネットワークカードの mac アドレスが分かっている場合、 mac アドレス(特定のデバイス)に指定した IP アドレスを割り当てる事ができます。これと未知のデバイスには IP を割り当てない設定を併用すれば、簡単なセキュリティ対策になります。
DHCP で未知のデバイスに IP を割り当てたくない場合、/etc/dhcpd/dhcpd.conf に許可/拒否の設定を記述します。未知のデバイスに DHCP が割り当てないだけで、デバイスを使う人が自分でで固定 IP を振れば通信はできるてしまいますが。簡単に、勝手に機器を持ち込んで使わせたくない場合などでは便利です。
# 許可するMACアドレスのリスト
allow known-clients;
# 未知のMACアドレスのリースを拒否する
deny unknown-clients;
YaST2 DHCP Server の Global Options の中に、追加の記述を設定します。