はじめに

前回はグローバルに使えるドメイン名を取得し、DDNSサーバーで名前解決ができるようにしました。
これにより世界中から名前でアクセスできるようになりましたが、1つ落とし穴があります。今の状態では名前解決の結果返されるIPアドレスはグローバルIPアドレスなので、自宅LAN内でyour.domain/path/to/site/のようにアクセスしても、ルーターの管理画面が出てきたりしてうまくいきません。
そこで、自宅内のローカルIPアドレスを管理するローカルDNSサーバーをセットアップします。

BINDのセットアップ

今回はDNSサーバーとして、古くから(Wikipediaによると1980年台から!?)広く使われているDNSサーバーである、BINDを使用します。
OSセットアップ時にオプションとしてDNSサーバーにチェックを入れていればすでに起動しているはずです。
インストールされていなければaptでさくっと取ってきましょう

$ sudo apt-get install -y bind9

これからBINDを使うために以下の2つのファイルをいじります。

ファイル 内容
named.conf namedの動作を設定する
ゾーンファイル ゾーン(ドメインの)情報を収めたファイル

これらは、/etc/bindにあります。

named.confの設定

Ubuntu Server 16.04 のBIND9では、named.confは
– named.conf.default-zones
– named.conf.local
– named.conf.options
の3つのファイルをインクルードする形になっています。

まずは、named.conf.localにmakit0sh.tkゾーンを追加します。

zone "makit0sh.tk" {
    type master;
    file "/etc/bind/makit0sh.tk.zone";
};

こうすることで、このDNSサーバーは、makit0sh.tkドメインに対して権威あるネームサーバーになります。

次に、named.conf.optionsのoptions{};内部に、以下を追記します。

//内部ネットワークからの問い合わせを許可する
listen-on port 53 { ルーターのIPアドレス;  localhost; 自分のIPアドレス; 192.168.11.0/24;};
recursion yes;
allow-recursion { any; };
allow-query { any; };
allow-query-cache{ any; };

//自分で解決できない名前が来たら、8.8.8.8に処理を委任する。8.8.8.8はGoogle のパブリックDNSサーバー
forwarders {
    8.8.8.8;
    8.8.4.4;
};
forward first;

.zoneファイルの編集

named.conf内のゾーン指定で要求した、/etc/bind/makit0sh.zoneファイルを作成します。

/etc/bind/makit0sh.tk.zone
$TTL 1D
;
@ IN SOA makit0sh.tk. root.makit0sh.tk. (
2017092003 ;Serial
3H ;Refresh
1H ;Retry
1W ;Expire
1D ) ;Minimum
;
@ IN NS makit0sh.tk.
router IN A ルーターのIPアドレス
makit0sh.tk. IN A 192.168.xxx.xxx ;サーバーのIPアドレス

中身の解説は[参考リンク]を見てください。
注意点としては、
– ;以下はコメントとして扱われる
– 最後に’.’をつけた名前は、ゾーン名省略なしの名前として扱われる(例: router -> router.makit0sh.tk; makit0sh.tk. -> makit0sh.tk;)

iptablesを変更する

iptables を変更して、53番ポートのudpアクセスを許可するようにしてください。

注記

本当は、名前->アドレス の変換だけではなく、アドレス->名前 の変換も行えるようにBIND reverse data fileも各ゾーンに対して定義するべきですが、自宅内での使いみちがないのでとりあえず省略します。

DNSサーバーを使う

各マシンで手動でDNSサーバーを指定することもできます。(例: /etc/resolv.confにnameserverを指定する)
ただ、いちいち設定するのは面倒なので、ルーターのDHCPの設定のプライマリDNSサーバーに、今回設定したDNSサーバーのIPアドレス(自作サーバーのIP)を指定しましょう。
こうすることで、ルーターに接続したクライアントは、DHCPでIPアドレスを取得する際に、自動的に自作DNSサーバーをネームサーバーとして読み込んでくれます。

おわりに

内部ネットワーク向けのDNSサーバーを立てることで、外からでも中からでも同じ名前でアクセスすることができるようになります!

参考リンク

BINDで作るDNSサーバ
Ubuntu 16.04 / Debian 8: bindをインストールして内部ネットワーク向けのDNSサーバを立ち上げる
BINDによるDNSの運用

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください