前提
さ、今日は BIND の設定。これができればいろいろ設定が進むはず!
環境
Ubuntu 22.04
BIND 9.18.1
設定
やりたいことは 2 つ。
- 自分で名前解決する
- 自分で名前解決できないものは別の DNS サーバ (8.8.8.8) へ問い合わせる
こんな感じに名前解決するように設定していく!
※"j-fortidemo.com"のドメインは私が所持しているドメインです。
192.168.10.250 : dns.j-fortidemo.com
192.168.10.249 : ntp.j-fortidemo.com
192.168.20.100 : websrv01.j-fortidemo.com
192.168.20.101 : websrv02.j-fortidemo.com
まずは、named.conf を設定する。新たに、named.conf.internal-zones
というゾーンファイル名を追加。これは後で設定する。
$ sudo vi /etc/bind/named.conf
include "/etc/bind/named.conf.internal-zones";
次に、オプションファイルの設定。
ACL を追加。192.168.0.0/16 のネットワークを許可する。だいぶ、でかいw
クエリを受け付ける範囲を指定。
$ sudo vi /etc/bind/named.conf.options
acl internal-network {
192.168.0.0/16;
};
options {
directory "/var/cache/bind";
forwarders {
8.8.8.8;
};
allow-query {
localhost;
internal-network;
};
recursion yes;
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
//dnssec-validation auto;
allow-recursion {
127.0.0.1;
192.168.0.0/16;
};
それから、さっきのゾーン情報ファイルの中身を設定していく。
192.168.10.0 と 192.168.20.0 のゾーンを分けない方法は番外編 その3
に書いてます。
$ sudo vi /etc/bind/named.conf.internal-zones
zone "j-fortidemo.com" IN {
type master;
file "/etc/bind/j-fortidemo.com";
allow-update { none; };
};
zone "10.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/10.168.192.db";
allow-update { none; };
};
zone "20.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/20.168.192.db";
allow-update { none; };
};
BIND 正引きゾーンファイルの設定。
$ sudo vi /etc/bind/j-fortidemo.com
$TTL 86400
@ IN SOA dns.j-fortidemo.com. root.j-fortidemo.com. (
2022120801 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS dns.j-fortidemo.com.
IN A 192.168.10.250
dns IN A 192.168.10.250
ntp IN A 192.168.10.249
websrv01 IN A 192.168.20.100
websrv02 IN A 192.168.20.101
BIND 逆引きゾーンファイルの設定。
[第3オクテット].[第4オクテット] の記載でもいけた!
この時はいけなかったので、わけた。。。
$ sudo vi /etc/bind/10.168.192.db
$TTL 86400
@ IN SOA dns.j-fortidemo.com. root.j-fortidemo.com. (
2022120801 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS dns.j-fortidemo.com.
250 IN PTR dns.j-fortidemo.com.
249 IN PTR ntp.j-fortidemo.com.
$ sudo vi /etc/bind/20.168.192.db
$TTL 86400
@ IN SOA dns.j-fortidemo.com. root.j-fortidemo.com. (
2022120801 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS dns.j-fortidemo.com.
100 IN PTR websrv01.j-fortidemo.com.
101 IN PTR websrv02.j-fortidemo.com.
DNS サーバの設定は以上。
最後に、自分の DNS サーバを変更しておく。
$ sudo vi /etc/netplan/99-config.yaml
nameservers:
addresses: [192.168.10.250]
$ sudo netplan apply
確認
正引き
$ sudo dig dns.j-fortidemo.com
; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> dns.j-fortidemo.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49225
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;dns.j-fortidemo.com. IN A
;; ANSWER SECTION:
dns.j-fortidemo.com. 86400 IN A 192.168.10.250
;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Thu Dec 08 14:22:24 UTC 2022
;; MSG SIZE rcvd: 64
逆引き
$ sudo dig -x 192.168.10.250
; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> -x 192.168.10.250
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23401
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;250.10.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
250.10.168.192.in-addr.arpa. 6759 IN PTR dns.j-fortidemo.com.
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Thu Dec 08 17:16:33 UTC 2022
;; MSG SIZE rcvd: 89
自分で名前解決できないもの
$ sudo dig ntp.nict.jp
; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> ntp.nict.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42836
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;ntp.nict.jp. IN A
;; ANSWER SECTION:
ntp.nict.jp. 20797 IN A 61.205.120.130
ntp.nict.jp. 20797 IN A 133.243.238.243
ntp.nict.jp. 20797 IN A 133.243.238.164
ntp.nict.jp. 20797 IN A 133.243.238.163
ntp.nict.jp. 20797 IN A 133.243.238.244
;; Query time: 15 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Thu Dec 08 14:25:20 UTC 2022
;; MSG SIZE rcvd: 120
番外編 その1
DNS の設定は間違うことも多々ある。かく言う、私も間違えたw
named-checkconf
便利なので使おう。
下記の例ではnamed.conf.options
の設定でrecurusion
になってるぞ、と指摘している例。
わかりやすいご指摘でありがたい!
$ named-checkconf
/etc/bind/named.conf.options:26: unknown option 'recurusion'
番外編 その2
長いこと$ sudo dig -x 192.168.10.250
のANSWER SECTION
が正しく返ってこなくて困った。
↓こうなるはずなのに、
;; ANSWER SECTION:
250.10.168.192.in-addr.arpa. 0 IN PTR dns.
250.10.168.192.in-addr.arpa. 0 IN PTR dns.local.
こうなってたのだ…。
;; ANSWER SECTION:
250.10.168.192.in-addr.arpa. 0 IN PTR dnssrv.
250.10.168.192.in-addr.arpa. 0 IN PTR dnssrv.local.
確かに最初はdnssrv
で設定してた。でも、dns
に変更してもまったく変わらない。なんならapt-get --purge remove bind9
で削除しても変わらない。なんでなんでーって悩みに悩んで、なにげなく、ping dns.j-fortidemo.com
を打って気づいた。
PING dns.j-fortidemo.com (192.168.10.250) 56(84) bytes of data.
64 bytes from dnssrv (192.168.10.250): icmp_seq=1 ttl=64 time=0.072 ms
64 bytes from dnssrv (192.168.10.250): icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from dnssrv (192.168.10.250): icmp_seq=3 ttl=64 time=0.057 ms
ん?もしかして、このdnssrv
ってサーバの名前か・・
で、ホスト名をdnssrv
からdns
に変更したらあっけなく期待通りにdns
になったわけ。
番外編 その3
あれ?じゃぁ、/etc/bind/192.168.db
は何だったんだ・・???
てか、dns.j-fortidemo.com
ってならないといけないんじゃない?んーーーー
結局は、named.conf.internal-zones
で、192.168.10.0/192.168.20.0 のゾーンを分けたんだよね。もっといいやり方があると思うんだけどなー・・
あ!これだわ!
$ sudo cat /etc/bind/named.conf.internal-zones
zone "168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/db.168.192";
allow-update { none; };
};
$ sudo vi /etc/bind/db.168.192
$TTL 86400
@ IN SOA dns.j-fortidemo.com. root.j-fortidemo.com. (
2022120801 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS dns.j-fortidemo.com.
250.10 IN PTR dns.j-fortidemo.com.
249.10 IN PTR ntp.j-fortidemo.com.
100.20 IN PTR websrv01.j-fortidemo.com.
101.20 IN PTR websrv02.j-fortidemo.com.
db
の使い方がよくわかるようになりました。はぁ、長かった・・・
番外編 その4
いったいいくつあるんだ番外編…
ここで、NTP サーバから PING をしてみるとまぁ、無言。そらそ、ファイアウォールがあるから。というわけで、DNS サーバでポート 53 を開けないとダメです。
$ sudo ufw allow domain
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
53 ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
53 (v6) ALLOW Anywhere (v6)