DNSサーバ
パッケージ確認
taskselでどのパッケージがインストールされているか確認。
$ tasksel --task-packages dns-server
bind9-doc #BINDのドキュメント
bind9utils #BINDのメンテナンス用ユーティリティ
bind9 #BIND本体
シンプルにBIND関係のパッケージのみらしい。
プライマリDNSの設定
chroot仕様のCentOSと違って、Ubuntuは通常のディレクトリ構成になっているので、設定ファイルは/etc/bindにフラットに配置されている。
設定ファイルのnamed.confは事実上空っぽで、以下の三ファイルをインクルードする仕様。一つのファイルにいくつもの設定をごちゃごちゃ書くよりもわかりやすい。
・named.conf.options # BINDの基本設定
・named.conf.default-zones # ルートサーバやローカルなどデフォルトのゾーン設定
・named.conf.local # ユーザーが追加するゾーンの設定
named.conf
各種設定ファイルをインクルードしているだけなのでほとんど変更点はないが、viewを使う都合上、named.conf.default-zonesはコメントアウト。これはnamed.conf.localのview内で読み込む。
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; //include "/etc/bind/named.conf.default-zones";
named.conf.options
BIND全体のオプションを設定。
options { directory "/var/cache/bind"; allow-transfer { none;}; # 転送を基本禁止。ゾーンごとに許可する version ""; # バナー変更 };
ゾーン転送は個々のゾーンごとに許可する転送先を設定するので、基本は一律禁止する。
ついでにバナーを変更して、BINDのバージョンを隠す。こんなところで設定さらしてるくせに、ささやかなクラック対策。
BINDはバージョン9.4.1-P1以降、再起問い合わせとキャッシュの返答を、デフォルトでlocalhostとlocalnetsに限定するようになったらしい。なのでallow-query,allow-recursion,allow-query-cacheは特に設定しなかった。
named.conf.local
各ゾーンの設定。
// localnetの定義 acl "localnet" { 192.168.1.0/24; 127.0.0.1; }; // seocondary_dnsの定義 acl "secondary_dns" { 202.157.182.142; # ns.twisted4life.com 外部セカンダリDNS 192.168.1.xxx; # ns1.aerialline.com 内部セカンダリDNS }; // 内部ネットワークからのリクエスト向け定義 view "inside" { match-clients { localnet; }; // 標準でインストールされているローカルのゾーンを読み込み include "/etc/bind/named.conf.default-zones"; // 正引き zone "aerialline.com" { type master; file "/etc/bind/db.aerialline.com.local"; allow-transfer { localnet; }; # 内部のセカンダリDNSにのみ転送許可 notify yes; }; // 逆引き zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/db.1.168.192"; allow-transfer { localnet; }; # 内部のセカンダリDNSにのみ転送許可 }; }; // 外部ネットワークからのリクエスト向け定義 view "outside" { match-clients { any; }; // 正引き zone "aerialline.com" { type master; file "/etc/bind/db.aerialline.com"; allow-transfer { secondary_dns; }; # 指定のセカンダリDNSに転送許可 notify yes; }; zone "seotch.net" { type master; file "/etc/bind/db.aerialline.com"; # aerialline.comと同じゾーン設定 allow-transfer { secondary_dns; }; # 指定のセカンダリDNSに転送許可 }; // 逆引き zone "104.5.211.in-addr.arpa" { type master; file "/etc/bind/db.104.5.211"; allow-transfer { secondary_dns; }; # 指定のセカンダリDNSに転送許可 }; }; // rndc.keyのインクルード include "/etc/bind/rndc.key";
db.aerialline.com
外部ネットワーク向け、公開サーバの正引き定義。
外部からのアクセスはルーターでポートごとに振り分けているので、ほとんどgwの仮名(CNAME)になっている。
$TTL 86400 @ IN SOA dns.aerialline.com. seo.aerialline.com. ( 2009112001 ; serial YearMonthDayNumber 3600 ; refresh 1 Hour 900 ; retry 15 Min 1728000 ; expire 20 Days 86400 ; min 24 Hour ) IN NS dns.aerialline.com. ; Primary IN NS ns1.twisted4life.com. ; Secondery IN MX 10 mail.aerialline.com. IN A 211.5.104.xxx dns IN A 211.5.104.xxx mail IN A 211.5.104.xxx gw IN A 211.5.104.xxx www IN CNAME gw ftp IN CNAME gw wiki IN CNAME gw phpmyadmin IN CNAME gw sns IN CNAME gw project IN CNAME gw blog IN CNAME gw seotch IN CNAME gw ubunchu IN CNAME gw
db.aerialline.com.local
内部ネットワーク向け、LAN内ホストと公開サーバの正引き定義。
ゾーン転送禁止の意味ないだろ! とツッコミがきそうだが、たいしたネットワークじゃないのでキニシナイ。内部ネットワークのホストには漫画「うぶんちゅ!」のキャラ名がついていたりする。
$TTL 86400 @ IN SOA dns.aerialline.com. seo.aerialline.com. ( 2010071601 ; serial YearMonthDayNumber 3600 ; refresh 1 Hour 900 ; retry 15 Min 1728000 ; expire 20 Days 86400 ; min 24 Hour ) IN NS dns.aerialline.com. ; Primary IN NS ns1.aerialline.com. ; Secondery IN MX 10 mail.aerialline.com. IN A 192.168.0.1 dns IN A 192.168.0.32 ns1 IN A 192.168.0.1 router IN A 192.168.0.1 lisa IN A 192.168.0.31 akane IN A 192.168.0.32 www IN CNAME akane mail IN CNAME akane ftp IN CNAME akane phpmyadmin IN CNAME akane ubunchu IN CNAME akane
db.104.5.211
外部ネットワーク向け、公開サーバの逆引き定義
$TTL 1H @ IN SOA dns.aerialline.com. seo.aerialline.com. ( 2009112001 ; serial YearMonthDayNumber 3600 ; refresh 1 Hour 900 ; retry 15 Min 1728000 ; expire 20 Days 86400 ; min 24 Hour ) IN NS dns.aerialline.com. ; Primary IN NS ns1.twisted4life.com. ; Secondery 180 IN PTR gw.aerialline.com.
db.1.168.192
内部ネットワーク向け、LAN内ホストの逆引き定義
$TTL 1H @ IN SOA dns.aerialline.com. seo.aerialline.com. ( 2009112001 ; serial YearMonthDayNumber 3600 ; refresh 1 Hour 900 ; retry 15 Min 1728000 ; expire 20 Days 86400 ; min 24 Hour ) IN NS dns.aerialline.com. ; Primary IN NS ns1.aerialline.com. ; Secondery xxx IN PTR gw.aerialline.com. xxx IN PTR akane.aerialline.com. xxx IN PTR lisa.aerialline.com.
設定のテスト
named.confとそのインクルードファイルの書式が正しいかテスト。
$ sudo named-checkconf
各ゾーン定義ファイルの書式が正しいかもチェック。ここでは例としてaerialline.comゾーンの定義をするdb.aerialline.comを表示。
$ named-checkzone aerialline.com db.aerialline.com zone aerialline.com/IN: loaded serial 2009112001 OK
全てエラーが出なければOK。
サーバ再起動
設定を読み込ませて、サーバ再起動。
$ sudo /etc/init.d/bind9 restart