DNSサーバーとは「名前解決」を行うサーバーです
具体的には「192.168.○○.△△」のようなIPアドレスは覚えずらいですよね
そこで覚えやすい文字列で表したドメイン名、ホスト名とIPアドレスを結びつけることで文字列で検索することができるようになります
例)centos7.comで検索すると192.168.○○.△△のサーバーにアクセスできる(その逆も)
yahoo.co.jpとかgoogle.comとかって調べるとちゃんとyahooのページやgoogleのページにたどり着きますよね
それはDNSサーバーがこの文字列はこのIPアドレスのところだなって識別してくれるからなんですね
ただし、基本的に自宅にDNSサーバーを立てるときの利点といえるのは自宅内のサーバーの名前解決をする時ぐらいで、インターネットなど外部の名前解決まで受け付ける仕様にしてしまうと大きな負担がかかる上にサーバーがダウンしてしまうリスクが高くなります
また、DNSサーバーが動かなくなると名前解決をする必要があるWEBサーバーやメールサーバーまで動かなくなってしまいます
外部に公開すると攻撃される危険性もあるため、ここでは内部の名前解決を目的としたDNSサーバーの構築を紹介します
目次
ネットワーク設定の確認
DNSサーバーを建てる際に必要な項目の確認をしましょう
【第三章】初期設定で設定した項目になります
A | 自サーバーのホスト名 | centos7 |
B | ドメイン名 | souma.com |
C | 自サーバーのIPアドレス | 192.168.2.7 |
D | LANのサブネット | 192.168.2.0/24 |
E | DNSサーバーのIPアドレス | 192.168.1.1 |
Dに関してはLANのIPアドレスが192.168.2.1だったら192.168.2.0/24、192.168.1.1だったら192.168.1.0/24という感じでだいたい対応してるので自分の環境に合わせてください
EはプロバイダのDNSアドレスやブロードバンドルーターのアドレスになります
簡単に言うとサーバーが直でつながっているルーターのもう一つ先のルータのIPアドレスといったところですね
BINDの設置
BINDはyumを使ってインストールします
以下のコマンドを実行してサーバーにインストールします
# yum install -y bind bind-chroot
また、rootではなく通常アカウントでログインしている人はコマンドの前にsudoを付けて実行するとパスワードを聞かれるので入力するとインストールが開始されます
# sudo yum install -y bind bind-chroot
完了しました!と出たらインストール完了です
BINDの設定
etcのなかのnamed.confというファイルを編集していきます
コマンドは以下の通りです
# vi /etc/named.conf
キーボードの「i」を押すとインサートモードになるので以下の画像のように赤い部分を付け足します
「listen-on port 53 { 127.0.0.1; 192.168.2/24;};」の赤枠部分はCのサブネットを記述します
例)Dが192.168.1.0 → 192.168.1/24、 Dが192.168.2.0 → 192.168.2/24
15行目の「version "unknown";」はDNSの表示を非表示にするためだけの設定なので追記しなくても動きます
20行目の「allow-query { localhost; 192.168.2/24;};」の部分も最初と同じようにサブネットの記述をします
21行目の「forwarders { 192.168.1.1; };」でEのプロバイダのDNSアドレスやブロードバンドルーターのアドレスを指定するのは自分自身のDNSサーバーで名前変換ができないものをほかのDNSサーバーに任せるためです
以降に記述しますが自身が指定したもの以外は名前解決できません
なのでプロバイダのDNSなど、世界のどこかに設置してあるDNSサーバーに助けを求める保険のIPアドレスというわけです
下のほうに行くと青枠で囲んだ部分が見つかると思いますが、それを囲むように赤枠を追記します
includeの先にはこれから作成するファイルの名前を指定します
ファイルは「/var/named/named.<Bのドメイン名>.zones」と指定します
今回は「/var/named/named.souma.com.zones」になりますね
以上でnamed.confファイルの編集は終わりです
以降、指定したファイルなどを自作していきます
# vi /var/named/named.souma.com.zones
先ほど編集したファイルで指定したファイルを作ります
上記のように初めのzone項目はホスト名からIPアドレスを求める「正引き」の設定ファイルを指定しています
zone項目はBのドメイン名を指定
file項目にはドメイン名の最後に「.db」をつけて指定
二つ目のzone項目にはIPアドレスからホスト名を求める「逆引き」の設定ファイルを指定しています
こちらのzone項目にはDのLANのサブネットのIPアドレスの最後の数字を消してそれ以外を逆に記述して、そのあとに「.in-addr.arpa」をつけます
file項目にはそのあとにさらに「.db」をつけます
これでzoneファイルの作成は完了なので「:wq」で保存して終了しましょう
次に「正引きファイル」の作成です
# vi /var/named/souma.com.db
ファイルの中身は以下のように記述します
ドメイン名を指定する場合は末尾に「.」を記述します
最後に「逆引きファイル」を作成します
# vi /var/named/2.168.192.in-addr.arpa.db
ファイルの中身は以下の通りです
9行目の最初は自サーバーのIPアドレスの最後の数字を指定します
私の場合は192.168.2.7なので「7」になります
以上でBINDの設定は終了です
namedサービスを有効にする
設定が完了したらBINDを再起動します
# systemctl restart named-chroot.service
続いてcentos7を起動した際にBINDを同時に起動する設定をします
# systemctl enable named-chroot.service
ファイアーウォールの設定変更
また、ファイアーウォールを切らずに行っている人は以下のコマンドでサーバー以外からのリクエストでも名前解決ができるように設定します
# firewall-cmd --permanent--add-service=dns --zone=public
# firewall-cmd --reload
ネットワーク設定の変更
DNSサーバーを立ち上げたらサーバーのネットワーク設定を変える必要があります
以下のコマンドから設定を変更します
# nmtui
接続の編集からつながっているネットワークを選択してDNSアドレスを自身のサーバーのIPアドレスに変更します
設定が完了したら以下のコマンドでネットワークをリロードして終了です
# systemctl restart NetworkManager
BINDの動作確認
次にBINDが正常に動作しているかどうかの確認をします
その前に「dig」や「nslookup」といった確認に使用するコマンドが使えるようにしなくてはなりません
yumでインストールします
# yum -y install bind-utils
インストールが完了したら以下のコマンドで動作確認をしていきます
# dig A centos7.souma.com
「ANSWER SECTION」という項目のところでサーバーのIPアドレスが表示されているので「正引き」の名前解決が正常に行われているのがわかります
# dig -x 192.168.2.7
次はIPアドレスからホスト名を求める「逆引き」の名前解決の確認です
逆引きの場合は「-x」のオプションを利用してIPアドレスを指定します
同じく「ANSWER SECTION」の項目でサーバーのホスト名が表示さrているので名前解決が正常に行われています
外部ホストも名前解決ができるか確認するために例として「yahoo.co.jp」の名前解決を行います
# dig A yahoo.co.jp
こちらも正常に名前解決ができています
クライアントPCからも名前解決をする
ネットワーク内にあるクライアントPCからも名前解決ができるか試してみましょう
まずはクライアントPCのネットワーク設定を変更する必要があります
設定の場所はwindowsの種類にもよりますが今回はwindows7の画面で紹介します
ほかのOSでも大体同じ項目から設定に行けるのでそれぞれのOSで調べてみてください
①「設定」 → 「ネットワークとインターネット」
②「ネットワークと共有センター」
③アダプターと設定の変更
④ローカルエリア接続の項目を右クリックで「プロパティ」
⑤「インターネット プロトコル バージョン 4(TCP/IPv4)」を選択して「プロパティ」
⑥「次のDNSサーバーのアドレスを使う」にチェックを入れて「優先DNSサーバー」に自作したサーバーのIPアドレスを指定、「代替DNSサーバー」にEのプロバイダのDNSアドレスやブロードバンドルーターのアドレスを入れてOKを押す
これで設定が完了です
windowsならコマンドプロンプトを開いて確認します
windowsでは「dig」コマンドが標準装備されていないため「nslookup」で確認します
# nslookup centos7.souma.com
# nslookup 192.168.2.7
名前解決できていますので以上でDNSサーバーの構築手順は終了です