2009年2月16日月曜日

CentOS bind の設定

 会社のサーバ、ディスクごと完全に逝ってしまった…。予備機もバックアップ構成も何も無いので、当然バックアップは無い。そもそも人間バックアップを小まめに行うほど暇でもない。自業自得というやつだ。そんなこんなで、ここ数日はネットワーク管理の日々になりそうだ。こんなリソースも割けない。という訳で、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する風潮は良くない。

0 件のコメント: