何をするか
内部DNSサーバ(コンテンツ 兼 キャッシュ)を構築してクライアントから自宅内ホストの名前解決を行えるようにする。インターネット側の名前解決はGoogleのパブリックDNSサーバを公開DNSとして使用する。
自宅NWで使用するドメインは「xxxx.myhouse.local」
↓ざっくり構成図
目次
自宅DNSサーバをたてる理由
・自宅内のコンテンツサーバとして
自宅内ホストの名前解決が出来る ←これが一番の理由
・キャッシュサーバとして
インターネット側の名前解決を行う際にキャッシュサーバを経由させることで、GoogleのDNSへのアクセスの送信元をキャッシュサーバのみに制限できる。
※ISPのDNSキャッシュサーバを使用する場合は不要?
外部向けのコンテンツサーバ(インターネット上で使用できるドメイン)も自宅で運用する場合は、オープンリゾルバ状態になるのを防ぐためにキャッシュサーバとは別のホストで運用する必要があります。
セキュリティ観点で言えば内部キャッシュと内部コンテンツも別々のホストで運用するべきかもしれませんが、自宅内のDNSでそこまでする必要がないと思うのでやりません。
手順
bindをインストール
1 |
yum -y install bind |
ネームサーバの設定ファイルを編集
1 2 3 4 5 6 |
vi /etc/resolve.conf ---- # Generated by NetworkManager nameserver 8.8.8.8 nameserver 8.8.4.4 ---- |
bindの設定ファイルを編集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
vi /etc/named.conf ---- // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // See the BIND Administrator's Reference Manual (ARM) for details about the // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html //自宅NWををACLとして使う為に定義 acl "myhouse" { 192.168.1.0/24; }; options { //インタフェースは1つなので制限は不要、全てのインタフェースで受付 # listen-on port 53 { 127.0.0.1; }; # listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; //自身、自宅NW内からのクエリにのみ応答する allow-query { localhost; myhouse; }; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ //再帰問い合わせの有無、キャッシュサーバならyes recursion yes; //再帰問い合わせ先のDNSサーバを指定、自分自身とGoogleのDNS forwarders{ 8.8.8.8; 8.8.4.4; }; //まずは自身のゾーンやキャッシュを見て、無ければ再帰問い合わせ forward first; dnssec-enable no; dnssec-validation no; /* Path to ISC DLV key */ bindkeys-file "/etc/named.root.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; print-time yes; print-severity yes; print-category yes; }; category queries { "default_debug"; }; category resolver { "default_debug"; }; category lame-servers { null; }; }; view "internal" { match-clients { localhost; myhouse; }; match-destinations { localhost; myhouse; }; zone "." IN { type hint; //typeがhintの場合はルートネームサーバが記載されたファイルを指定する。 //bindをインストールした時点で作成されます。 file "named.ca"; }; zone "myhouse.local" IN { //指定したゾーンに対するマスターサーバである type master; file "myhouse.local.lan"; }; zone "1.168.192.in-addr.arpa" { //指定したゾーンに対するマスターサーバである type master; file "1.168.192.in-addr.arpa.rev"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; }; ---- |
ルートネームサーバについては別の記事で記載したので詳しくはそれを参照。
ローカルの設定ファイルを編集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
vi /etc/named.rfc1912.zones ---- // named.rfc1912.zones: // // Provided by Red Hat caching-nameserver package // // ISC BIND named zone configuration for zones recommended by // RFC 1912 section 4.1 : localhost TLDs and address zones // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt // (c)2007 R W Franks // // See /usr/share/doc/bind*/sample/ for example named configuration files. // zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; ---- |
ゾーンファイル(正引き)を編集
■簡単な項目説明
SOA:管理情報
NS:ゾーンを管理するDNSサーバを指定
MX:メールサーバを指定、正引きのみ
A:ホストに対応するIPv4アドレス
CNAME:ホスト名の別名に対応するホスト名、正引きのみ
PTR:IPアドレに対応するホスト名、逆引きのみ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
vi /var/named/myhouse.local.lan ---- $TTL 3600 @ IN SOA mng-server.myhouse.local. root.myhouse.local. ( 2015121701 ; serial 3600 ; refresh 900 ; retry 604800 ; expire 86400 ; min ) IN NS mng-server.myhouse.local. router IN A 192.168.1.254 mainsv IN A 192.168.1.104 mng-server IN A 192.168.1.6 ---- |
ゾーンファイル(逆引き)を編集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
vi /var/named/1.168.192.in-addr.arpa.rev ---- $TTL 3600 @ IN SOA mng-server.myhouse.local. root.myhouse.local. ( 2015121701 ; serial 3600 ; refresh 900 ; retry 604800 ; expire 86400 ; min ) IN NS mng-server.myhouse.local. 104 IN PTR mainsv.myhouse.local. 254 IN PTR router.myhouse.local. ---- |
起動、自動起動設定
1 2 |
systemctl start named systemctl enable named |
起動、自動起動設定
1 2 |
systemctl start named systemctl enable named |
クライアント(Windows)動作確認
コマンドプロンプトから「nslookup」を使用してインターネット側と自宅NW側の両方の名前解決が出来ることを確認します。
インターネット側の確認(正引き)
1 2 3 4 5 6 7 8 |
C:\Users\user1>nslookup yahoo.co.jp サーバー: UnKnown Address: 192.168.1.6 権限のない回答: 名前: yahoo.co.jp Addresses: 182.22.59.229 183.79.135.206 |
自宅NW側の確認(正引き、逆引き)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
C:\Users\user1>nslookup mainsv.myhouse.local サーバー: UnKnown Address: 192.168.1.6 権限のない回答: 名前: mainsv.myhouse.local Addresses: 192.168.1.104 C:\Users\user1>nslookup 192.168.1.104 サーバー: UnKnown Address: 192.168.1.6 名前: mainsv.myhouse.local Address: 192.168.1.104 |
感想
やり終わってなんですが、自宅内コンテンツサーバとしては確かに使えます。ただ、自宅内キャッシュはISPが運営するサーバ、公開ドメインを運用する場合はドメインの事業者が運用するサーバが使えるので、あえて自分で用意する必要な無い気がしました。