はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)

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 を使った場合の流れを説明します。




openSUSE Leap 15 で DNS/DHCP

ディスク: openSUSE Leap 15 は、ファイルシステムに BtrFS を利用するため 30 Gb 以上のディスクスペースが必要です
メモリ:1Gb 程度のメモリ、より少なくても動きますが、諸般の事情でこれくらい用意すれば十分でしょう

openSUSE Leap15 のインストール

ここでは具体的なインストール手順は説明しません。別記事に Leap 15.4 のインストール方法をまとめていますので、そちらを御覧ください。

openSUSE Leap 15.4 インストールとファーストインプレッション


動画

ダウンロード:2023/4 現在 Leap15.5 Beta がリリースされています。



openSUSE Leap のインストールのポイントとしては

・ネットワークの設定方法は Wicked を選んで固定 IP を設定します
・/var に設定ファイルが作られるため、必須ではないけれど /var は別なパーティションにすると良い
・root と初回登録するユーザはパスワードを共有させない

といった所です。

なお、上の記事や動画は英語でインストールしていますが、日本語でインストールしても構いません。ただしデスクトップでは日本語必須ですが、サーバの場合、日本語のメッセージだと問題解決の事例が見つからない事が多いので英語にしています。好みの問題ですね。



YaST で DNS/DHCP のインストール

openSUSE Leap をはじめ、SUSE Linux Enterprise など SUSE 系のパッケージのインストールなどのシステム管理は YaST (Yet another Setup Tool) に統合されています。まず SUSE 系のシステム管理の 90 % 以上は、この YaST を通じて行います。YaST は必要な文法やパラメータの記述内容を一応チェックしてくれるため、他のディストリビューションの様に vi で編集して、綴り間違えや文法(コロンなのかセミコロンなのかの様な軽微な間違え)に初心者が悩まされることがないので、基本的に YaST を使え、が openSUSE/SLE の設定の基本です。

openSUSE Leap のバージョンやインストールの手順の違いにも依りますが、Activities に YaST アイコンがインストールされていません。root でログインしたら、初回は Activities > Utilities > Terminal (テキスト端末)を開くか、 su で root ログインして

# yast2 &

を実行します。YaST GUI が起動したら、Activities の中のツールバーに YsST アイコンを Add to Favolites すると、アイコンが登録されます。



ネットワークの設定

YaST2 > System > Network Settings

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15424806.png

General Network Settings : Wicked Service である事(トグルボタンで設定します)

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15431058.png


Overview : 固定 IP を設定
Hostname/DNS : ホスト名、上位 DNS サーバを設定
Routing : デフォルトゲートウェイを設定

YaST で設定された DNS サーバの情報は /etc/resolv.conf に記述されます。





DNS サーバーのインストール

Software > Software Management

View > Pattern より DNS and DHCP Servers をチェックしてインストールします。

ここで、YaST2 の DNS と DHCP の拡張機能が追加されます。

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15433426.png


一旦 YaST をリフレッシュするため、YaST2 を終了してもう一度立ち上げ直します。DNS と DHCP サーバのアイコンが追加されます。

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15435022.png


DNS Server の設定

YaST2 > Network Services > DNS Server

もしインストールされていない場合、 bind パッケージが自動的にインストールされます。

Forword の設定 > ここに自分自身のアドレスをAdd 設定します

> Next

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15440564.png

ゾーン情報の設定

この DNS サーバが管理するゾーンを Add ボタンで追加

※ この内容は /var/lib/named/master/"zone名" ファイルに設定されます

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15442381.png


Edit ボタンで、ゾーン情報を編集します

※ ゾーンは、この DNS が責任をもって管理するネットワークの事です。ここでは単にドメインと考えてみてもいいでしょう。local.mycompany.com は、mycompany.com のサブドメインですね。www.mycompany.com などはより上位の DNS サーバが責任を持って管理し、NAS や Printer などは、ローカルネットワークの中だけ有効で、LAN 管理者が責任を持って管理します。一般的には local.mycompany.com の様に、唯一のユニークな名前を使うのが良いでしょう。社内向けに適当に分かりやすい名前を付けても構いませんが、例えば、 private.mycompany.intra の様に、右端のトップレベルドメイン gTLD に、com とか jp などとは違う、架空で、あり得ない名前 gTLD(オレオレドメイン)を付けても良いのですが、もし本当に mycompany.intra などがあると問題が起こります。この辺の話は別な記事でまとめました。


コンピュータ名(ホスト)の命名規則? 15文字の63バイト制限、ホスト名の命名権利はだれの権利?責任?(パソコン名)

オレオレドメインがもたらす当たり前な問題

新gTLD大量出現で「名前衝突」しそうなドメイン名とは




よく古い DNS や Microsoft AD のマニュアル本にあるような .local というドメイン名は mDNS という機能で使われるため、使ってはいけません。iPhone や mac のみならず、様々なデバイスで問題がでる可能性があります。


NS レコードの指定

ここにこのゾーンを管理するこの DNS サーバの自分自身の FQDN を追加、localhost は削除

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15451719.png

MX レコードの指定、メールサーバーは使わないのでここでは空欄

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15455652.png

レコードキー Type を追加します。

A レコード: ホスト名と IPv4 アドレスを関係づけるレコードです。Hostname Key に対して ipv4 アドレスのValue を設定します。

CNAME レコード : A レコードの別名です。下の例では samba サーバに NTP サーバの機能を割り当てています。

MX レコード : このゾーンで使うメールサーバの記述です。ここでは使っていません。

NS レコード : このゾーン情報の責任を持つDNS サーバを記述します。つまりこのサーバ。
はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15461242.png




SOA の編集

SOA は管理情報。ここに記述されるのは、このゾーンの管理に必要な更新期間であるとか、シリアル番号などです。 openSUSE Leap/SLE では、YaST によりシリアル番号は自動的に"今日の日付+xx" がインクリメントして付け加えられます。この情報は、セカンダリ DNS に対して有効に機能します。 

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15463020.png

ゾーンファイルはこの様に /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 #
このゾーンファイルは、DNS に関して不慣れな人にはかなり厳しいものがあります。 SUSE の YaST では、文法を知らなくても何とかなってしまいます。DNS の教科書を読んで、「大体分かるんだけど....」 いつも挫折するのはこのゾーンファイルの編集です。


起動方法の指定

ファイアウォールのポートを解放して、設定変更後に restart 、起動時の Start on boot する様に設定を変更します。

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15464890.png

openSUSE Leap 15/SLE では、YaST で編集が終わると自動的に named サービスがリスタートされます。システム起動と同時に起動する設定も YaST の中で完結します。コマンドで行うには、テキストターミナルを開いて次のコマンドを実行します。

# systemctl enable named
# systemctl start named


稼働状態は YaST > System > Service Manager で確認することが出来ます。Stop/Start した時にエラーがないことを、Show Log ボタンで確認します。

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15470548.png

手動でコマンドラインで確認するには systemctl コマンドを使います。


localhost:~ # systemctl restart named
localhost:~ # systemctl status named
\u25cf named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2023-04-16 16:36:40 JST; 9s ago
Process: 8858 ExecStartPre=/usr/lib/bind/named.prep (code=exited, status=0/SUCCESS)
Process: 8864 ExecStart=/usr/sbin/named -u named $NAMED_ARGS (code=exited, status=0/SUCCESS)
Main PID: 8865 (named)
Tasks: 10 (limit: 4669)
CGroup: /system.slice/named.service
\u2514\u2500 8865 /usr/sbin/named -u named
Apr 16 16:36:40 localhost named[8865]: network unreachable resolving './NS/IN': 2001:500:1::53#53
Apr 16 16:36:40 localhost named[8865]: network unreachable resolving './NS/IN': 2001:503:ba3e::2:30#53
Apr 16 16:36:40 localhost named[8865]: network unreachable resolving './NS/IN': 2001:7fd::1#53
Apr 16 16:36:40 localhost named[8865]: network unreachable resolving './NS/IN': 2001:500:2d::d#53
Apr 16 16:36:40 localhost named[8865]: network unreachable resolving './NS/IN': 2001:dc3::35#53
Apr 16 16:36:40 localhost named[8865]: network unreachable resolving './NS/IN': 2001:503:c27::2:30#53
Apr 16 16:36:40 localhost named[8865]: network unreachable resolving './NS/IN': 2001:500:2f::f#53
Apr 16 16:36:40 localhost named[8865]: network unreachable resolving './NS/IN': 2001:7fe::53#53
Apr 16 16:36:40 localhost named[8865]: managed-keys-zone: Key 20326 for zone . is now trusted (acceptance timer co>
Apr 16 16:36:40 localhost named[8865]: resolver priming query complete
localhost:~ #


DNS の動作確認

外部のインターネットサイトに ping して応答を調べます。
内部の local ネットワークのホストに ping して応答を調べます。

localhost:~ # ping dns01.local.mycompany.com
PING dns01.local.mycompany.com (192.168.1.101) 56(84) bytes of data.
64 bytes from 192.168.1.101 (192.168.1.101): icmp_seq=1 ttl=64 time=0.135 ms

localhost:~ # ping google.com
PING google.com (142.250.198.14) 56(84) bytes of data.
64 bytes from nrt12s58-in-f14.1e100.net (142.250.198.14): icmp_seq=1 ttl=111 time=31.6 ms
64 bytes from nrt12s58-in-f14.1e100.net (142.250.198.14): icmp_seq=2 ttl=111 time=25.9 ms

実際にDNS が機能して、ホスト名を保持しているかは dig コマンドで調べます。

# dig @DNS-SERVER hostname.FQDN

例 ) dig @localhost printer.local.mycompany.com

Answer Section の部分のホスト名が ; (セミコロン)でコメントアウトされていないか

localhost:~ # dig @localhost samba.local.mycompany.com

; <<>> DiG 9.16.38 <<>> @localhost samba.local.mycompany.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2522
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 25d1d2efb8ba118401000000643ba548c9fe1e388918c75a (good)
;; QUESTION SECTION:
;samba.local.mycompany.com.INA

;; ANSWER SECTION:
samba.local.mycompany.com. 172800 INA192.168.1.240

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sun Apr 16 16:35:36 JST 2023
;; MSG SIZE rcvd: 98

localhost:~ #


DNS キャッシュをダンプし、/var/log/named/dump.db に書き出された dns キャッシュの中に、ホスト名や外部のインターネットホストが記録されているかを確認します。

localhost:~ # rndc dumpdb
localhost:~ # ls /var/log/named/dump.db
/var/log/named/dump.db
localhost:~ # grep google /var/log/named/dump.db
google.com.172514NSns2.google.com.
172514NSns1.google.com.
172514NSns3.google.com.
172514NSns4.google.com.
ns1.google.com.172514A216.239.32.10
ns2.google.com.172514A216.239.34.10
ns3.google.com.172514A216.239.36.10
ns4.google.com.172514A216.239.38.10
localhost:~ #





DHCPのインストール

YaST2 > Network Services > DHCP サーバをクリックして、ウィザードに従ってインストールします。

ネットワークインターフェースを選んで、ファイアウォールを開くをチェックして Next


はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15472822.png
DHCP から配布する、LAN 内で使う DNS サーバ、デフォルトゲートウェイ、NTP サーバなどの値をセットします。

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15475025.png
リースする IP アドレス範囲です。DHCP サーバはこの範囲で要求があったデバイスに IP アドレスを配布します。

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15480272.png
DHCP サーバがブート時に起動する様、また変更があった時に自動的に再起動するように設定します。

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15482342.png

考えてみてください。こんな面倒なフォーマットを誤りなく手書きできますか? YaST はやっぱり便利です。

localhost:/etc # cat dhcpd.conf
option domain-name "local.mycompany.com";
option domain-name-servers 192.168.1.101, 192.168.1.1;
option routers 192.168.1.1;
ddns-update-style none;
default-lease-time 14400;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.110 192.168.1.199;
default-lease-time 14400;
max-lease-time 172800;
}
localhost:/etc #


リースの確認

さて、それでは DHCP サーバが動くかどうかの確認をしましょう。まず、今まで使っていた 無線ルータなどの DHCP の機能を OFF にしてから、 DHCP が機能しているかどうか、確認しましょう。

Windows 端末の場合、 ipconfig コマンドで、IP の再取得をして、 DHCP が機能しているかどうか確認します。

C> ipconfig /renew
C:> ipconfig /all

デバイスのリースの情報は /var/lib/dhcp//db/dhcp.leases ファイルで確認できます。

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 を割り当てない設定を併用すれば、簡単なセキュリティ対策になります。

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15493002.png

他のディストリビューションでは、直接 /etc/dhcpd.conf を書き換えなければならないので大変です。
localhost:/etc # cat dhcpd.conf
option domain-name "local.mycompany.com";
option domain-name-servers 192.168.1.101, 192.168.1.1;
option routers 192.168.1.1;
ddns-update-style none;
default-lease-time 14400;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.110 192.168.1.199;
default-lease-time 14400;
max-lease-time 172800;
host mackbook001 {
fixed-address 192.168.1.112;
hardware ethernet 28:68:0c:81:f3:89;
}
}
localhost:/etc #




未知のデバイス(mac アドレス)に ip を割り当てない

DHCP で未知のデバイスに IP を割り当てたくない場合、/etc/dhcpd/dhcpd.conf に許可/拒否の設定を記述します。未知のデバイスに DHCP が割り当てないだけで、デバイスを使う人が自分でで固定 IP を振れば通信はできるてしまいますが。簡単に、勝手に機器を持ち込んで使わせたくない場合などでは便利です。

はじめての Linux で DNS/DHCP, openSUSE Leap 15(簡単入門)_a0056607_15494817.png


# 許可するMACアドレスのリスト
allow known-clients;

# 未知のMACアドレスのリースを拒否する
deny unknown-clients;

YaST2 DHCP Server の Global Options の中に、追加の記述を設定します。


この情報は dhcpd.conf に記述されます。

localhost:/etc # cat dhcpd.conf
option domain-name "local.mycompany.com";
option domain-name-servers 192.168.1.101, 192.168.1.1;
option routers 192.168.1.1;
ddns-update-style none;
default-lease-time 14400;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.110 192.168.1.199;
default-lease-time 14400;
max-lease-time 172800;
deny unknown-clients;;
host mackbook001 {
fixed-address 192.168.1.112;
hardware ethernet 28:68:0c:81:f3:89;
}
}
host {
deny unknown-clients;
}
localhost:/etc #


まとめ

ここでは初めて Linux で社内向け DNS/DHCP サーバを立ち上げる場合、openSUSE Leap15 を使った場合、どんな手順なのかをまとめました。初めて DNS/DHCP をセットアップしようとすると、どうしても「DNSって難しそう」と思ってしまいます。

openSUSE Leap/SUSE Linux Enterprise の場合、YaST という GUI ツールがあるので、面倒なゾーンファイルの編集から、 DNS の再起動までほとんどの操作が GUI 上でできてしまうことを理解していただけたでしょうか。

私も、DNS についてはあまり詳しくないのがバレそうですが、SUSE Linux なら何とかなります。やっぱりゾーンファイルの編集などを手動でやっていると、文法違いや、簡単な綴りミスなどでハマってしまいます。

もしこの記事が役に立って「やってみようか」と思っていただけると幸いです。





by islandcenter | 2023-04-19 10:52 | SUSE | Comments(0)