社内LAN向けにDNS Server"Bind"をInstall, 設定
今の社内にはDNS Serverがおらず(RouterにもDNS機能がない)、名前解決するためにProviderのDNSに問い合わせていたので、DNS ServerをInstall, 設定したときのMemo.
環境はCentOS 6.0 64bit, Bind 9.7.0
社内にDNS Server(Bind)を導入する利点
- DNS ServerのCache機能で名前解決が早くなるので、Networkの体感速度が上がる。
- 社内の共有Serverに(Mac, Windows関係なく)名前でAccess出来る。
- 名前でAccess出来ると共有ServerのIP Addressが変わっても通知しなくて済む。
- (hostsを変更しなくても)本番環境のURLを社内の開発Serverに指定出来るので、Testし易い(かも)。
参考にしたのは下記Site.
- @IT 連載記事 「実用 BIND 9で作るDNSサーバ」
- 内部向け DNS サーバの構築 - Linux で自宅サーバ [ Home Server Technical. ]
- BINDの設定 - ゾーンファイルの記述方法
- Chapter 6 DNS Sample Configurations
1. Install
Install自体はyum経由でサクッと終了。自動起動とFirewallも設定しておく。
# yum install bind
# /etc/rc.d/init.d/named start
# chkconfig named on
# system-config-firewall-tui
2. /etc/named.confを編集
< 2013/05/29 Modified >
Bind 9.3の場合は
# yum install caching-nameserver
するとサンプルの設定ファイルがインストールされる。
/etc/named.caching-nameserver.confを編集してnamed.confを作成する。
利用を許可する範囲と自前で名前解決出来なかったときの外部DNSを指定
options {
listen-on port 53 { 127.0.0.1; 192.168.0.0/24; };
allow-query { 127.0.0.1; 192.168.0.0/24;};
/* Specify the IP addresses you can throw a query to this DNS. */
allow-transfer { 127.0.0.1; 192.168.0.0/24; };/* If this DNS could not resolve your request, the request is forwarded to other DNS. */
forwarders { 8.8.8.8; 8.8.4.4; }
forward first;/* cache settings */
max-cache-ttl 86400;}
max-cache-ttlは秒を指定。なぜかDefault値が反映されなかったので設定した方がよさそう。(2011/12/13 Modified: ない方が安定して稼働するみたい)
次は各Zone Fileを読み込むための設定を追記. named.rfc1912.zonesを読み込んでいるので、"localhost"系はそっちに任せることにした。
"hoge.com"ではなく、"lan.hoge.com"をLAN内で使い、外部DNSで管理している"hoge.com"に影響が出ないようにする。
// forward map for lan.hoge.com
zone "lan.hoge.com" {
type master;
file "hoge.com";
};// reverse map for 192.168.0.*
zone "0.168.192.in-addr.arpa" {
type master;
file "192.168.0.rev";
};
次はそれぞれ正引き(Forward)と逆引き(Reverse)のZone Fileを作成する。
directory "/var/named"
の記述があるので、/var/namedがZone Fileの置き場所。
3. zone "lan.hoge.com"の設定
# cp named.empty lan.hoge.com
# vi lan.hoge.com
$TTL 3H
@ IN SOA mercury.lan.hoge.com. root.mercury.lan.hoge.com (
20111110 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS @@ IN A 192.168.0.100
router IN A 192.168.0.1
mercury IN A 192.168.0.100
venus IN A 192.168.0.13
earth IN A 192.168.0.11
mars IN A 192.168.0.12
jupiter IN A 192.168.0.250ns IN CNAME mercury
www IN CNAME mercury
nas IN CNAME jupiter
4. zone "0.168.192.in-addr.arpa"の設定
# cp named.loopback 192.168.0.rev
# vi 192.168.0.rev
$TTL 1D
@ IN SOA mercury.lan.hoge.com. root.mercury.lan.hoge.com (
20111110 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS @IN PTR lan.hoge.com.
IN A 255.255.255.01 IN PTR router.lan.hoge.com.
100 IN PTR mercury.lan.hoge.com.
11 IN PTR earch.lan.hoge.com.
12 IN PTR mars.lan.hoge.com.
13 IN PTR venus.lan.hoge.com.
5. 確認
作成したZone Fileの権限を変更
# chown named. lan.hoge.com 192.168.0.rev
Name Serverは自分を参照するように変更
# vi /etc/resolv.conf
search lan.hoge.com
nameserver 127.0.0.1
別Consoleを開いてLogを確認しながら
# tail -f /var/log/messages
# nslookup
Windowsから確認する場合はcmd.exeを起動して下記Command
> nslookup - 192.168.0.100
この場合192.168.0.100がName Server.
Pingで試している場合はCacheを削除するのを忘れずに。
> ipconfig /flushdns
Server側のCacheを削除するには
# rndc flush
無事名前解決することを確認できれば、DHCP ServerになっているRouterや固定IPのServerに設定して完了。
Secondary Name ServerはGoogle Public DNSのIP(8.8.8.8)を設定しておくと安心できる。
6. digで再帰問い合わせしないか確認
Bindの設定が再帰問い合わせ可能になっているとDDos攻撃の踏み台にされる可能性があるので、digを使って確認する。詳しくは下記Site.
ちなみにBindはTCPを利用しないので、hosts.allow, hosts.denyを利用することは出来ない。
< 2011/12/08 Modified >
名前解決が最近遅くなったと思ってlogを見ると次のようなErrorがいっぱい
named[8372]: error (network unreachable) resolving 'hoge.net/AAAA/IN': 2001:500:2f::f#53
bind9はDefaultでIPv6機能が有効になっているらしい。ここを参考に起動Optionを追加
# vi /etc/sysconfig/named
OPTION="-4"
再起動
# /etc/rc.d/init.d/named restart
さらにdigを使って試してみるとISPのDNS自体が遅いことが分かったので、forwarders先をGoogle Public DNSに変更。
そうすると、今度は下記Error(?)が吐かれて応答が時々遅くなる
success resolving 'hoge.jp/A' (in 'hoge.jp'?) after disabling EDNS
EDNS(Extension Mechanisms for DNS)はDNSの拡張仕様。詳しくは下記Siteで。
- 意外と知られていない? DNSが抱えるセキュリティ問題 - ITmedia エンタープライズ
- Extension mechanisms for DNS - Wikipedia, the free encyclopedia
EDNSを無効すればいいのかな?と思い、/etc/named.confの最後に次の行を追記
server 0.0.0.0/0 { edns no; };
でBindを再起動すると、Google Public DNSからAccess拒否された。どうやら必須らしい。・・・で、元に戻して再び再起動。
するとErrorも出ず、名前解決の応答速度も素晴らしくなった。
・・・なぜだろう・・・一応解決?
ちなみにGoogle Public DNSはIPv6に対応しているので、CentOSのIPv6設定をしてあれば問題なく使えそう。それはまた次回。
< Related Posts >