会社のサーバ、ディスクごと完全に逝ってしまった…。予備機もバックアップ構成も何も無いので、当然バックアップは無い。そもそも人間バックアップを小まめに行うほど暇でもない。自業自得というやつだ。そんなこんなで、ここ数日はネットワーク管理の日々になりそうだ。こんなリソースも割けない。という訳で、DNSの設定もアウトリソースすることに…。
グローバル用とローカル用の両方を用意する形ですすめます。
インストール
$ yum -y install bind caching-nameserver bind-chroot
として、bind, chching-nameserver, bind-chroot をインストールします
設定
named.conf
named.conf ファイルをコピーします
cp /var/named/chroot/etc/named.caching-nameserver.conf /var/named/chroot/etc/named.conf
named.caching-nameserver.conf よりも named.conf が優先されます。これを行わないで、直接 named.caching-nameserver.conf を変更してしまうと、yum update 時に設定が上書きされる恐れがあります。
$ gedit /var/named/chroot/etc/named.conf &
とし、編集します。
// 使用しませんが、グローバル側を定義
acl corpname {
221.240.166.240/29;
};
// USEN プロバイダを定義します
// DNS の設定は、プロバイダへ転送できなければなりません。特別扱いします。
acl usennet {
61.122.116.165;
61.122.127.154;
61.122.116.132;
};
options {
// listen-on port 53 { 127.0.0.1; }; // コメントアウト
// listen-on-v6 port 53 { ::1; }; // コメントアウト
version "unknown"; // バージョンは表示しない(セキュリィティ対策)
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";
// 2014/04/16 DNS キャッシュポイズニング攻撃を受けるので、query-source は指定しない
// query-source port 53;
// query-source-v6 port 53;
allow-query { any; }; // 問い合わせを許可する基本の設定
allow-recursion { localhost; localnets; }; // キャッシュを許可する基本の設定
allow-transfer { any; }; // ゾーン転送を許可する基本の設定
forwarders { 192.168.1.1; }; // このDNSで解決できない名前を投げる場所(ルータがDNS機能を持っている)
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
include "/etc/rndc.key";
logging {
category lame-servers { null; }; // 問合せ失敗は記録しない
};
// キャッシュサーバの設定
view localhost_resolver {
match-clients { localhost; localnets; };
match-destinations { localhost; localnets; };
recursion yes;
include "/etc/named.rfc1912.zones";
include "/etc/named.yourcorp.co.jp.zone.local";
};
// 内部向け DNS の設定
view "internal" {
match-clients { localhost; localnets; };
match-destinations { localhost; localnets; };
recursion yes;
include "/etc/named.rfc1912.zones";
include "/etc/named.yourcorp.co.jp.zone.local";
};
// 外部(公開)向け DNS の設定
view "external" {
match-clients { any; }; // 誰からもOK
match-destinations { any; }; // 誰からもOK
recursion no; // 再帰は許可しない
include "/etc/named.yourcorp.co.jp.zone.wan";
};
named.yourcorp.co.jp.zone.local
$ gedit /var/named/chroot/etc/named.yourcorp.co.jp.zone.local &
として、ファイルを編集します。
zone "1.168.192.in-addr.arpa" {
type master;
file "1.168.192.in-addr.arpa.db";
};
zone "yourcorp.co.jp" {
type master;
file "yourcorp.co.jp.local.db";
};
ローカル・アドレスが 192.168.1.0/24 の場合 1.168.192.in-addr.arpa.db に逆引きを定義します。
ローカルの名前解決は、yourcorp.co.jp.local.db に定義します。
named.yourcorp.co.jp.zone.wan
$ gedit /var/named/chroot/etc/named.yourcorp.co.jp.zone.wan &
として、ファイルを編集します。
zone "yourcorp.co.jp" {
type master;
file "yourcorp.co.jp.wan.db";
allow-update { none; };
allow-transfer { usennet; };
allow-query { any; };
};
zone "240/29.166.240.221.in-addr.arpa" {
type master;
file "240.166.240.221.in-addr.arpa.db";
allow-update { none; };
allow-transfer { usennet; };
allow-query { any; };
};
上記の場合グローバル・アドレスは、221.240.166.240/29 です。
逆引きゾーンの指定方法は、プロバイダから指定された方法を採用して下さい。
同様にドメインも取得したものを指定します。
allow-transfer で、プロバイダに対して、ゾーン転送を許可します。
allow-query で、外部に対して、問合せを許可します。
ゾーン設定
ゾーン設定ファイルは、バージョン管理されます。
シリアル値を比較して新しい場合だけ、設定が他のDNSサーバへ伝播します。
Serial は YYYYMMDDNN としています。
- YYYY 西暦
- MM 月(ゼロサプレス)
- DD 日(ゼロサプレス)
- NN 番号 (ゼロサプレス)
CNAME レコードは推奨されなくなりました。
ローカル
$ mkdir /var/named/chroot/var
$ mkdir /var/named/chroot/var/named
$ gedit /var/named/chroot/var/named/1.168.192.in-addr.arpa.db
とします。
$TTL 86400
@ IN SOA yourcorp.co.jp. root.yourcorp.co.jp.(
2009021401 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
@ IN NS sv.yourcorp.co.jp.
2 IN PTR sv.yourcorp.co.jp. ; 192.168.1.2 -> sv.yourcorp.co.jp
3 IN PTR msv.yourcorp.co.jp. ; 192.168.1.3 -> msv.yourcorp.co.jp
4 IN PTR gt.yourcorp.co.jp.
5 IN PTR gs1.yorucorp.co.jp.
6 IN PTR gs2.yourcorp.co.jp.
$gedit /var/named/chroot/var/named/yourcorp.co.jp.local.db
とします。
$TTL 86400
@ IN SOA sv.yourcorp.co.jp. root.yourcorp.co.jp.(
2009021401 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
@ IN NS sv.yourcorp.co.jp.
localhost IN A 127.0.0.1
IN MX 10 msv.yourcorp.co.jp. ; メールサーバ用
@ IN A 192.168.1.2
sv IN A 192.168.1.2
www IN A 192.168.1.2
msv IN A 192.168.1.3
mail IN A 192.168.1.3
gt IN A 192.168.1.4
gs1 IN A 192.168.1.5
gs2 IN A 192.168.1.6
yourcorp.co.jp. IN TXT "v=spf1 a mx ~all" ; SPF レコードです
グローバル
グローバル・アドレスが 211.240.166.240だった場合
$gedit /var/named/chroot/var/named/240.166.240.211.in-addr.arpa.db
とします。
$TTL 86400
@ IN SOA sv.yourcorp.co.jp. root.yourcorp.co.jp.(
2009021401 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Minimum
IN NS sv.yourcorp.co.jp.
IN NS uns02.usen.ad.jp. ; セカンダリ DNS サーバ
; hosts
242 IN PTR sv.yourcorp.co.jp.
243 IN PTR msv.yourcorp.co.jp.
244 IN PTR gt.yourcorp.co.jp.
245 IN PTR gs1.yourcorp.co.jp.
246 IN PTR gs2.yourcorp.co.jp.
$gedit /var/named/chroot/named/var/named/yourcorp.co.jp.wan.db
とします。
$TTL 86400
@ IN SOA sv.yourcorp.co.jp. root.yourcorp.co.jp.(
2009021401 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Minimum
IN NS sv.yourcorp.co.jp.
IN NS uns02.usen.ad.jp. ; セカンダリ DNS サーバ
; hosts
IN MX 10 msv.yourcorp.co.jp.
@ IN A 221.240.166.242
sv IN A 221.240.166.242
www IN A 221.240.166.242
msv IN A 221.240.166.243
mail IN A 221.240.166.243
gt IN A 221.240.166.244
gs1 IN A 221.240.166.245
gs2 IN A 221.240.166.246
yourcorp.co.jp. IN TXT "v=spf1 a mx ~all" ; SPF レコードです
IP アドレスのタイプミスには、特に気をつけてください。
追記: 2009/02/17 一部修正
/etc/init.d/bind start にて失敗する場合
$ chgrp named /var/named/chroot/etc/named.conf
とすれば良い。尚、SELinux は enforcing のままで動作する。無闇にdisableする風潮は良くない。