[Unit]
Description=Berkeley Internet Name Domain (DNS)
Wants=nss-lookup.target
Before=nss-lookup.target
After=network.target
[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/named
PIDFile=/var/run/named/named.pid
ExecStartPre=/opt/bind/sbin/named-checkconf -z /etc/named.conf
ExecStart=/opt/bind/sbin/named -u named -c /etc/named.conf
ExecReload=/bin/sh -c '/opt/bind/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID'
ExecStop=/bin/sh -c '/opt/bind/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'
PrivateTmp=true
[Install]
WantedBy=multi-user.targetnamedの起動時に読み込まれる設定ファイル。場所は/etc/named.confにしている
acl localnet {
192.168.0.0/24;
127.0.0.1;
};
options {
directory "/var/named";
allow-query { localnet; };
allow-transfer { localnet; };
forward only;
forwarders { 192.168.0.1 port 53; };
};
logging {
channel "default-log" {
file "/var/log/named/dns.log" versions 5 size 1M;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};
channel "update" {
file "/var/log/named/nsupdate.log" versions 7 size 1M;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};
category default { "default-log"; };
category update-security { "update"; };
};
include "/opt/bind/etc/rndc.key";
/***************************************************/
/* chaperone.jp ゾーン */
key "chaperone.jp" {
algorithm HMAC-MD5;
secret "omPnyNydbZSujw5CUxZ4ZwIokAAl...(略";
};
zone "chaperone.jp" IN {
type master;
file "chaperone.zone";
allow-update { key chaperone.jp; };
check-names ignore;
};
zone "0.168.192.IN-ADDR.ARPA" IN {
type master;
allow-update { key chaperone.jp; };
file "chaperone.rev";
};
zone "0.0.127.in-addr.arpa" in {
type master;
file "localhost.rev";
};allow-updateはaclによるホスト指定でもいいのだが、dnssec-keygenによる鍵方式が望ましいらしい。
その鍵はnamed.confファイル内のkey chaperone.jpで定義される。
まずは鍵ファイルを作成します。
[root@c ~]# cd /var/named/
[root@c named]#
[root@c named]# /opt/bind/sbin/dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 512 -n HOST chaperone.jp
Kchaperone.jp.+157+58055
[root@c named]# ls -l Kchaperone.jp.+157+58055*
-rw------- 1 root root 121 3月 8 12:30 Kchaperone.jp.+157+58055.key
-rw------- 1 root root 229 3月 8 12:30 Kchaperone.jp.+157+58055.private
[root@c named]#これで2つのファイルが作成されます。拡張子 key は公開鍵、privateは秘密鍵と言った感じかな。このうち公開鍵の中身の一部をnamed.confに移します。
[root@c named]# cat Kchaperone.jp.+157+58055.key
chaperone.jp. IN KEY 512 3 157 omPnyNydbZSujw5CUxZ4ZwIokAAl...(略
[root@c named]#の公開鍵文字列omPnyNydbZSujw5CUxZ4ZwIokAAl... を/etc/named.confの key chaperone.jp に割り当てます。
key "chaperone.jp" {
algorithm HMAC-MD5;
secret "omPnyNydbZSujw5CUxZ4ZwIokAAl(略";っで、この鍵。
何に使えるのかと言うと、どちらのファイルでもいいらしいのだが、片方のファイルを使って、
dhcpdサーバに組み込んで、特定のdhcpdサーバからでないとallow-updateさせないとか、
nsupdateの際、読み込ませてallow-updateさせるなど、とにかくこのファイルがないと更新できない
ことを保証する役目らしい。下記は例。
*ファイルを使わない場合
[root@c ~]# /opt/bind/bin/nsupdate
> update add ccc.chaperone.jp 3600 IN a 192.168.0.70 *TTL:100秒でccc.chaperone.jp(192.168.0.70)を追加
> send
update failed: REFUSED
> quit
[root@c ~]#と撥ねられる。
次に鍵ファイル(公開鍵、秘密鍵どちらでも可)を使うと
*公開鍵を使うのが当然なのでしょう
[root@c ~]# /opt/bind/bin/nsupdate -k /var/named/Kchaperone.jp.+157+58055.key
> update add ccc.chaperone.jp 3600 IN a 192.168.0.70
> send
> quit
[root@c ~]#
[root@c ~]# nslookup ccc.chaperone.jp
Server: 192.168.0.3
Address: 192.168.0.3#53
Name: ccc.chaperone.jp
Address: 192.168.0.70
[root@c ~]#
[root@c ~]# /opt/bind/bin/nsupdate -k /var/named/Kchaperone.jp.+157+58055.key
> update delete ccc.chaperone.jp
> send
> quit
[root@c ~]# nslookup ccc.chaperone.jp
Server: 192.168.0.3
Address: 192.168.0.3#53
** server can't find ccc.chaperone.jp: NXDOMAIN
[root@c ~]#と登録、削除ができた。ここでは /opt/bind/bin/nsupdate を使用しているが、OS提供の /usr/bin/nsupdate(/bin/nsupdate)でも可
namedを実行するユーザはnamedというrootではないユーザです。
そのため、ログの書き出し場所にはそのnamedユーザで書き込める場所であることが条件となる。
[root@c ~]# chown named:named /var/log/named$TTL 86400
@ IN SOA c.chaperone.jp. root.c.chaperone.jp (
1; Serial.
10800; Refresh after 3 Hours.
3600; Retry after 1 Hour.
604800; Expire after 1 week.
86400 ); Minimum TTL of 1 day.
; Authoritative Name Servers.
IN NS c.chaperone.jp.
; Hosts
@ IN A 192.168.0.254;
c IN A 192.168.0.254;
c2 IN A 192.168.0.2;
c3 IN A 192.168.0.3;
; Localhost
localhost IN A 127.0.0.1;$TTL 86400
@ IN SOA c.chaperone.jp. root.c.chaperone.jp. (
1; Seral
10800; Refresh after 3 Hours
3600; Retry after 1 Hour
604800; Expire after 1 Week
86400 ); Minimun TTL of 1day.
; Authoritative Name Servers
IN NS c.chaperone.jp.
; Hosts
254 IN PTR c.chaperone.jp.
2 IN PTR c2.chaperone.jp.
3 IN PTR c3.chaperone.jp.$TTL 86400
@ IN SOA c.chaperone.jp. root.c.chaperone.jp. (
1; Seral
10800; Refresh after 3 Hours
3600; Retry after 1 Hour
604800; Expire after 1 Week
86400); Minimun TTL of 1Day
; Authoritative Name Servers
IN NS c.chaperone.jp.
; Hosts
1 IN PTR localhost.initファイル。CentOS6とかで使用可能
#!/bin/sh
# named This shell script takes care of starting and stopping
# named (BIND DNS server).
#
# chkconfig: 2345 55 45
# description: named (BIND) is a Domain Name Server (DNS)
# that is used to resolve host names to IP addresses.
# probe: true
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /opt/bind/sbin/named ] || exit 0
[ -f /etc/named.conf ] || exit 0
# See how we were called.
case "$1" in
start)
# Start daemons.
echo -n "Starting named: "
daemon /opt/bind/sbin/named -u named -c /etc/named.conf
echo
touch /var/lock/subsys/named
;;
stop)
# Stop daemons.
echo -n "Shutting down named: "
killproc named
rm -f /var/lock/subsys/named
echo
;;
status)
status named
exit $?
;;
restart)
$0 stop
$0 start
exit $?
;;
*)
echo "Usage: named {start|stop|status}"
exit 1
esac
exit 0