設定 - Bind(Raspberry Pi)
概要
DNSサーバ(BIND)は、raspberrypi.comというドメイン名からIPアドレスを返したり、IPアドレスからドメイン名を返すサーバである。
内部向けDNSサーバは、LANにあるサーバまたはクライアントPCにアクセスする時、IPアドレスではなくraspberrypi.com等のドメイン名を入力してアクセスできるようにするDNSサーバである。
外部向けDNSサーバは、WANにあるサーバまたはクライアントPCにアクセスする時、自ドメイン名からIPアドレスへの変換(名前解決)を行なうようにするDNSサーバである。
例えば、外部向けDNSサーバの設定により、自宅サーバが稼動中にも係わらず、
ダイナミックDNSサービス側が保守やトラブル等でサービスが停止したことにより、ドメイン名でサーバにアクセスできなくなるということがなくなる。
DNSサーバには、DNSキャッシュサーバとDNSコンテンツサーバの2種類があり、これらは、別の動作を行うDNSサーバである。
下表に、DNSキャッシュサーバとDNSコンテンツサーバの役割を示す。
DNSサーバの種類 | 役割 |
---|---|
DNSキャッシュサーバ | ドメイン名とIPアドレスの対応の問い合わせを行い、その結果をキャッシュする。 企業では、社内LANに配置される。 また、自社の管理するドメイン名を持たない。 |
DNSコンテンツサーバ | ドメイン名とIPアドレスの対応表をゾーンという単位で管理する。 企業ではDMZに配置される。 また、自社の管理するドメイン名があり、外部からの問い合わせに応答。 |
※注意
外部向けDNSサーバの場合は、独自ドメイン取得済であること。
また、静的IPアドレスの場合のみである。
参考書 | ||
---|---|---|
![]() |
![]() 電子計算、プログラミング、DIYプロジェクトのための Raspberry Pi 5の作成、構築、探索のためのガイド |
![]() クリティカルドメイン、DNS、ドメイン名の謎を解く |
BINDのインストール
DNSサーバを構築するため、BINDをインストールする。
# 内部向けDNSサーバを構築する場合 sudo apt install bind9 bind9-utils bind9-dnsutils dns-root-data python3-ply
BINDの設定 : 内部向けDNSの場合
内部向けDNSサーバ全体の設定
BINDの全体的な動作を設定する。
sudo vi /etc/bind/named.conf.options
# /etc/bind/named.conf.optionsファイル options { ...略 # 内部向けDNSサーバの管理外の問合せ先 ## フォワードしない場合 forwarders { 0.0.0.0; }; ## フォワードする場合は、HGW等のIPアドレスを入力する forwarders { 192.168.1.1; }; ...略 # IPv6の設定 ## IPv6を使用する場合 listen-on-v6 { any; }; ## IPv6を使用しない場合 listen-on-v6 { none; }; ...略 # 問い合わせを許可する範囲を指定 ## LAN(192.168.1.*)のみ問い合わせを許可する場合 allow-query { localhost; 192.168.1.0/24; }; ## 全てのIPアドレスから問い合わせを許可する場合 allow-query { any; }; # 全てListenする場合 (未設定でもよい) //listen-on port 53 { localhost; }; //listen-on port 53 { any; }; # 全てListenする場合 listen-on port 53 { localhost; 192.168.1.XX; }; # LAN内のみListenする場合 # 再帰問い合わせの設定 # 再帰問い合わせはDNS増幅攻撃に利用されるため、外部向けDNSサーバはDNSキャッシュサーバ、内部向けDNSサーバはDNSリゾルバのように別サーバに分離することが推奨される ## recurionがyesの場合、DNSキャッシュサーバとして動作する ## recurionがnoの場合、DNSコンテンツサーバ(権威サーバ)として動作する (このDNSサーバでホストしているドメイン以外は解決しない) recursion no; ## recurionがyesの場合、受け付ける対象のホストの設定 ## allow-recursionがanyの場合、全てのIPアドレスから受け付ける allow-recursion { 192.168.1.0/24; localhost; }; };
内部向けDNSサーバの正引きゾーンおよび逆引きゾーンを設定する。
sudo vi /etc/bind/named.conf.default-zones
# /etc/bind/named.conf.default-zonesファイル ...略 // 内部向けDNSサーバのゾーンの設定 (追加) // 192.168.1.* の正引き zone "raspberrypi.com" { type master; file "/etc/bind/raspberrypi.db"; }; // 192.168.1.* の逆引き zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/db.1.168.192"; };
内部向け正引きゾーンデータベースの作成 (ドメイン名からIPアドレス)
この設定を有効にするには、外部向けDNSサーバを静的IPアドレスにする必要がある。
内部向けDNSサーバの正引きゾーンデータベースを作成する。
以下の例に記述しているXXやYY等のIPアドレスを、該当するクライアントPCのIPアドレスに変更すること。
sudo vi /etc/bind/raspberrypi.db
# /etc/bind/raspberrypi.dbファイル $TTL 86400 @ IN SOA ns.raspberrypi.com. root.raspberrypi.com. ( 2022041001 ; Serial 例. 作成年月日 + 01(連番)を記述する 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ; Minimum TTL ) @ IN NS ns.raspberrypi.com. ns IN A 192.168.1.XX ; 内部向けDNSサーバのIPアドレス raspi IN A 192.168.1.XX ; 内部向けDNSサーバのIPアドレス (別名を付けることもできる) pc1 IN A 192.168.1.YY ; クライアントPC 1 pc2 IN A 192.168.1.ZZ ; クライアントPC 2 pc3 IN A 192.168.1.AA ; クライアントPC 3
内部向け逆引きゾーンデータベースの作成 (IPアドレスからドメイン名)
この設定を有効にするには、外部向けDNSサーバを静的IPアドレスにする必要がある。
内部向けDNSサーバの逆引きゾーンデータベースを作成する。
以下の例に記述しているXXやYY等は、各クライアントPCのIPアドレスに変更すること。
sudo vi /etc/bind/db.1.168.192
# /etc/bind/db.1.168.192ファイル $TTL 86400 @ IN SOA ns.raspberrypi.com. root.raspberrypi.com. ( 2022041001 ; Serial 例. 作成年月日 + 01(連番)を記述する 3H ; Refresh 1H ; Retry 1W ; Expire 1D ) ; Minimum IN NS ns.raspberrypi.com. ; IN PTR raspberrypi.com. ; IN A 255.255.255.0 ; XX IN PTR ns.raspberrypi.com. ; 内部向けDNSサーバのIPアドレス XX IN PTR raspi.raspberrypi.com. ; 内部向けDNSサーバのIPアドレス (別名を付けることもできる) YY IN PTR pc1.raspberrypi.com. ; クライアントPC 1 ZZ IN PTR pc2.raspberrypi.com. ; クライアントPC 2 AA IN PTR pc3.raspberrypi.com. ; クライアントPC 3
設定ファイルが正常に記述されているかどうかを確認する。
sudo named-checkconf
内部向けDNSサーバの起動
内部向けDNSサーバを起動する。
firewalldをインストールしている場合は、併せて、ファイアーウォールのポート開放も行う。
sudo systemctl start named.service sudo firewall-cmd --permanent --add-service=dns sudo firewall-cmd --reload
内部向けDNSサーバの停止
内部向けDNSサーバを停止する。
firewalldをインストールしている場合は、併せて、ファイアーウォールのポートも閉じる。
sudo systemctl stop named.service sudo firewall-cmd --permanent --remove-service=dns sudo firewall-cmd --reload
クライアントPCの設定
LinuxでKDEを使用している場合、[KDEシステム設定]を起動して、[接続] - 画面左の接続名 - 画面右の[IPv4]タブ - [DNSサーバ:]項目に内部向けDNSサーバのIPアドレスを追加する。
Linuxを再起動する。
ドメイン名の正引きおよび逆引きの確認
内部向けDNSサーバと各クライアントPCの正引きおよび逆引きができるかどうかを確認する。
# 再帰問い合わせが有効の場合 nslookup ns.raspberrypi.com # 内部向けDNSサーバの正引き nslookup pc1.raspberrypi.com # クライアントPC 1の正引き nslookup 192.168.1.XX # 内部向けDNSサーバの逆引き nslookup 192.168.1.YY # クライアントPC 1の逆引き # 再帰問い合わせが無効の場合(recursion項目がnoの場合) dig @<該当PCのIPアドレス> <該当PCのドメイン名> 例1. dig @192.168.10.5 ns.raspberrypi.net 例2. dig @192.168.10.6 pc01.raspberrypi.net