LoginSignup
2
1

More than 1 year has passed since last update.

Ubuntu 22.04 - BIND設定

Last updated at Posted at 2022-12-08

前提

さ、今日は BIND の設定。これができればいろいろ設定が進むはず!

環境

Ubuntu 22.04
BIND 9.18.1

設定

やりたいことは 2 つ。

  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.250ANSWER 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)    
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1