JANOG 53 NETCON 問題解説 Level1-11
JANOG 53 にスタッフ(NETCON委員)として参加させていただきました。
作成した問題について、回答と解説を記載します。
Level1-11 DNS問題
技術要素
・DNS
構成解説
・CSR1000v x 1, Linux x 2 (プライマリ/セカンダリDNS)
問題文
プライマリDNSからセカンダリDNSに対して、ドメイン「janog-saikou.com」のゾーン転送を 実施しようとしていますが、上手くいきません。
セカンダリDNSへのゾーン転送を成功させて、以下のように dig コマンドで セカンダリDNSからの名前解決の応答を得てください。
root@P-DNS:/# dig @192.168.2.200 www.janog-saikou.com a
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> @192.168.2.200 www.janog-saikou.com a
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19968
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 111bf193c031699501000000658a5ada875c409c15008594 (good)
;; QUESTION SECTION:
;www.janog-saikou.com. IN A
;; ANSWER SECTION:
www.janog-saikou.com. 86400 IN A 1.2.3.4
;; Query time: 0 msec
;; SERVER: 192.168.2.200#53(192.168.2.200) (UDP)
;; WHEN: Tue Dec 26 04:47:22 UTC 2023
;; MSG SIZE rcvd: 93
制約 ・S-DNSの設定を変更してはいけません。
・R1の既存の設定を削除したり、修正してはいけません。R1は必ず設定の追加で問題を解決してください。
・P-DNSの設定の修正は可能です。
DNSサービス(bind9)の設定ファイルは /etc/bind/named.conf になります。
エディタは vim / nano が使用できます。
・P-DNS/S-DNSにおいて、DNSサービス(bind9)の起動・停止・再起動には
以下のコマンドを使用してください。
起動 :service named start
停止 :service named stop
再起動:service named restart
・参考:ドメイン「janog-saikou.com」のゾーンファイル
$ORIGIN janog-saikou.com.
$TTL 86400
@ IN SOA dns1.janog-saikou.com. postmaster.janog-saikou.com. (
2024011701 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
3600 ; Minimum
)
;
IN NS dns1
IN NS dns2
dns1 IN A 192.168.10.100
dns2 IN A 192.168.20.200
www IN A 1.2.3.4
問題解説
P-DNSから、S-DNSに対して www.janog-saikou.com のAレコードを問い合わせてみます。
(S-DNSで、自分自身に問い合わせてみても良いです)
root@P-DNS:/# dig @192.168.2.200 www.janog-saikou.com a
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> @192.168.2.200 www.janog-saikou.com a ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 36681
(略) |
status: SERVFAIL の応答が返っています。
DNSとしての応答自体は返っているように見えますが、
念のためpingでIP疎通性を確認しておきます。
root@P-DNS:/# ping 192.168.2.200 PING 192.168.2.200 (192.168.2.200) 56(84) bytes of data. 64 bytes from 192.168.2.200: icmp_seq=1 ttl=63 time=0.475 ms 64 bytes from 192.168.2.200: icmp_seq=2 ttl=63 time=0.313 ms 64 bytes from 192.168.2.200: icmp_seq=3 ttl=63 time=0.246 ms ^C --- 192.168.2.200 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2036ms rtt min/avg/max/mdev = 0.246/0.344/0.475/0.096 ms |
やはりIPの疎通性は問題なさそうです。
R1の設定を確認してみます。
R1#sh run | sec access ip access-group 100 in ip access-group 101 in ip access-list extended 100 10 permit icmp any any 20 permit udp host 192.168.1.100 host 192.168.2.200 eq domain ip access-list extended 101 10 permit icmp any any 20 permit udp host 192.168.2.200 eq domain host 192.168.1.100
R1#sh run int g3
interface GigabitEthernet3 ip address 192.168.1.1 255.255.255.0 ip access-group 100 in
R1#sh run int g4
interface GigabitEthernet4 ip address 192.168.2.2 255.255.255.0 ip access-group 101 in
R1#show access-lists Extended IP access list 100 10 permit icmp any any (3 matches) 20 permit udp host 192.168.1.100 host 192.168.2.200 eq domain (1 match) Extended IP access list 101 10 permit icmp any any (3 matches) 20 permit udp host 192.168.2.200 eq domain host 192.168.1.100 (1 match) Extended IP access list meraki-fqdn-dns |
ACL100 がG3のIN方向に、ACL101 がG4のIN方向に適用されているようです。
先ほど実行した digコマンドが ACL100/101のシーケンス 20 に match して、
pingコマンド実行分が ACL100/101のシーケンス 10 に match して
それぞれカウントアップしていることが分かります。
ゾーン転送はセカンダリDNSがプライマリDNSに対して
SOAレコードを問い合わせることから始まります。https://atmarkit.itmedia.co.jp/ait/articles/0305/10/news001.html
S-DNSからP-DNSに対して dig コマンドで soa レコードを要求してみます。
root@S-DNS:/# dig @192.168.1.100 janog-saikou.com soa +multi ;; communications error to 192.168.1.100#53: host unreachable ;; communications error to 192.168.1.100#53: timed out ;; communications error to 192.168.1.100#53: host unreachable
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> @192.168.1.100 janog-saikou.com soa +multi ; (1 server found) ;; global options: +cmd ;; no servers could be reached |
host unreachable / timeout となり、P-DNSからの応答が返っていないことが分かります。
念のため、P-DNS自身でも確認してみます。
root@P-DNS:/# dig @localhost janog-saikou.com soa +multi
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> @localhost janog-saikou.com soa +multi ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38613 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 824a8e75b42528e601000000658a79b1de2d4216f94dc3c2 (good) ;; QUESTION SECTION: ;janog-saikou.com. IN SOA
;; ANSWER SECTION: janog-saikou.com. 86400 IN SOA dns1.janog-saikou.com. postmaster.janog-saikou.com. ( 2024011701 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 604800 ; expire (1 week) 3600 ; minimum (1 hour) )
;; Query time: 0 msec ;; SERVER: ::1#53(localhost) (UDP) ;; WHEN: Tue Dec 26 06:58:57 UTC 2023 ;; MSG SIZE rcvd: 125 |
P-DNS自体は名前解決できるようです。
R1の access-list をよく見ると、P-DNSからS-DNSに問い合わせたときのパケットしか許可しておらず、
逆方向のS-DNSからP-DNSへの問い合わせが許可されていないことが分かります。
R1#sh run | sec access ip access-group 100 in ip access-group 101 in ip access-list extended 100 10 permit icmp any any 20 permit udp host 192.168.1.100 host 192.168.2.200 eq domain ip access-list extended 101 10 permit icmp any any 20 permit udp host 192.168.2.200 eq domain host 192.168.1.100
R1#show access-lists Extended IP access list 100 10 permit icmp any any (3 matches) 20 permit udp host 192.168.1.100 host 192.168.2.200 eq domain (1 match) Extended IP access list 101 10 permit icmp any any (3 matches) 20 permit udp host 192.168.2.200 eq domain host 192.168.1.100 (1 match) Extended IP access list meraki-fqdn-dns |
S-DNSからP-DNSに対して soa レコードを問い合わせましたが、ACLはカウントアップしていませんので
やはり暗黙の deny によって名前解決要求自体が破棄されていると考えられます。
S-DNSからP-DNSへの問い合わせが許可されるように、ACLにシーケンスを追加します。
R1 ip access-list extended 100 30 permit udp host 192.168.1.100 eq domain host 192.168.2.200
ip access-list extended 101 30 permit udp host 192.168.2.200 host 192.168.1.100 eq domain |
※今回、ACLの作成について厳密な制限はないので、以下のような大雑把な設定でも特に問題ありません。
ip access-list extended 100 30 permit udp any any ip access-list extended 101 30 permit udp any any |
再度S-DNSからP-DNSに対してSOAレコードを確認してみます。
root@S-DNS:/# dig @192.168.1.100 janog-saikou.com soa +multi
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> @192.168.1.100 janog-saikou.com soa +multi ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26990 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 573f28439153fdbf01000000658a7ab94f5e88f69a167db4 (good) ;; QUESTION SECTION: ;janog-saikou.com. IN SOA
;; ANSWER SECTION: janog-saikou.com. 86400 IN SOA dns1.janog-saikou.com. postmaster.janog-saikou.com. ( 2024011701 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 604800 ; expire (1 week) 3600 ; minimum (1 hour) )
;; Query time: 0 msec ;; SERVER: 192.168.1.100#53(192.168.1.100) (UDP) ;; WHEN: Tue Dec 26 07:03:21 UTC 2023 ;; MSG SIZE rcvd: 125 |
SOAレコードを返すようになりました。
ACLもカウントアップしているか確認します。
R1#show access-lists Extended IP access list 100 10 permit icmp any any (3 matches) 20 permit udp host 192.168.1.100 host 192.168.2.200 eq domain (1 match) 30 permit udp host 192.168.1.100 eq domain host 192.168.2.200 (2 matches) Extended IP access list 101 10 permit icmp any any (3 matches) 20 permit udp host 192.168.2.200 eq domain host 192.168.1.100 (1 match) 30 permit udp host 192.168.2.200 host 192.168.1.100 eq domain (2 matches) Extended IP access list meraki-fqdn-dns |
ACL100/101 に新たに追加した シーケンス 30 がカウントアップしています。
S-DNS自身でもSOAレコードが引けるかどうかを確認してみます。
root@S-DNS:/# dig @localhost janog-saikou.com soa +multi
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> @localhost janog-saikou.com soa +multi ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 11486 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: c582b336fef9737301000000658a7afb60453cefa4296303 (good) ;; QUESTION SECTION: ;janog-saikou.com. IN SOA
;; Query time: 0 msec ;; SERVER: ::1#53(localhost) (UDP) ;; WHEN: Tue Dec 26 07:04:27 UTC 2023 ;; MSG SIZE rcvd: 73 |
まだSERVFAIL状態ですので、ゾーン転送は出来ていません。
ゾーン転送と同じ動作を試すために、プライDNSに対して axfr レコードを問い合わせてみます。
root@S-DNS:/# dig @192.168.1.100 janog-saikou.com axfr ;; Connection to 192.168.1.100#53(192.168.1.100) for janog-saikou.com failed: host unreachable. ;; Connection to 192.168.1.100#53(192.168.1.100) for janog-saikou.com failed: host unreachable. ;; Connection to 192.168.1.100#53(192.168.1.100) for janog-saikou.com failed: host unreachable. |
Connection が確立できていないように見えます。
再度ACLのカウントアップを確認します。
R1#show access-lists Extended IP access list 100 10 permit icmp any any (3 matches) 20 permit udp host 192.168.1.100 host 192.168.2.200 eq domain (1 match) 30 permit udp host 192.168.1.100 eq domain host 192.168.2.200 (2 matches) Extended IP access list 101 10 permit icmp any any (3 matches) 20 permit udp host 192.168.2.200 eq domain host 192.168.1.100 (1 match) 30 permit udp host 192.168.2.200 host 192.168.1.100 eq domain (2 matches) Extended IP access list meraki-fqdn-dns |
カウントアップしていません。
ゾーン転送はセカンダリDNSがP-DNSに対してSOAレコードを問い合わせた後、
プライマリDNSから返ったSerial値が自身の値よりも大きい場合に、
プライマリDNSに対してTCP 53番でコネクションを形成してゾーンファイルが転送されます。
R1のACL100/101には、S-DNSからP-DNSへTCP 53番の通信を許可する設定が入っていないため、
暗黙の deny によって拒否され、TCPのコネクションが確立できていない、ということが考えられます。
S-DNSからP-DNSへのTCP 53番の通信を許可する設定を追加します。
ip access-list extended 100 40 permit tcp host 192.168.1.100 eq domain host 192.168.2.200
ip access-list extended 101 40 permit tcp host 192.168.2.200 host 192.168.1.100 eq domain |
※これについても、以下のようなTCP通信を全許可する設定でも特に問題ありません。
ip access-list extended 100 40 permit tcp any any ip access-list extended 101 40 permit tcp any any |
再度S-DNSからP-DNSに対して axfr レコードを要求してみます。
root@S-DNS:/# dig @192.168.1.100 janog-saikou.com axfr
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> @192.168.1.100 janog-saikou.com axfr ; (1 server found) ;; global options: +cmd ; Transfer failed. |
今度は Connection faild ではなく、Transfer failed になりました。
R1のACLのカウントを確認します。
R1#show access-lists Extended IP access list 100 10 permit icmp any any (3 matches) 20 permit udp host 192.168.1.100 host 192.168.2.200 eq domain (1 match) 30 permit udp host 192.168.1.100 eq domain host 192.168.2.200 (7 matches) 40 permit tcp host 192.168.1.100 eq domain host 192.168.2.200 (8 matches) Extended IP access list 101 10 permit icmp any any (3 matches) 20 permit udp host 192.168.2.200 eq domain host 192.168.1.100 (1 match) 30 permit udp host 192.168.2.200 host 192.168.1.100 eq domain (7 matches) 40 permit tcp host 192.168.2.200 host 192.168.1.100 eq domain (12 matches) Extended IP access list meraki-fqdn-dns |
S-DNSとP-DNS間のTCPを許可するシーケンス 40 の match が上がっているので、
ゾーン転送に使用されるTCP53のパケットは通っていそうです。
dig で axfr レコードを要求した結果と、access-list のカウントアップ結果から見て、
TCP 53 のコネクション自体は確立できたが、その後のゾーン転送動作に失敗していると考えられます。
ゾーン転送は、プライマリDNS側でもゾーン転送要求を許可する設定が必要になります。
P-DNS側の named.conf の設定を確認してみます。
root@P-DNS:/# cat /etc/bind/named.conf include "/etc/bind/named.conf.options";
zone "janog-saikou.com" in { type master; file "/etc/bind/janog-saikou.com.zone"; allow-transfer { 192.168.1.100; }; }; |
ゾーン転送を許可するIPアドレスを指定する allow-transfer の部分で、
192.168.1.100 (P-DNS自身) を指定してしまっています。
S-DNSにゾーン転送を許可するためには、allow-transfer に 192.168.2.200 を指定する必要があります。
P-DNSの named.conf を修正します。
root@P-DNS:/# vi /etc/bind/named.conf (略) allow-transfer { 192.168.2.200; }; |
設定を反映させるため、P-DNSで named を再起動します。
root@P-DNS:/# service named restart |
再度S-DNSからP-DNSに対して axfr レコードを要求してみます。
root@S-DNS:/# dig @192.168.1.100 janog-saikou.com axfr
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> @192.168.1.100 janog-saikou.com axfr ; (1 server found) ;; global options: +cmd janog-saikou.com. 86400 IN SOA dns1.janog-saikou.com. postmaster.janog-saikou.com. 2024011701 10800 3600 604800 3600 janog-saikou.com. 86400 IN NS dns1.janog-saikou.com. janog-saikou.com. 86400 IN NS dns2.janog-saikou.com. dns1.janog-saikou.com. 86400 IN A 192.168.10.100 dns2.janog-saikou.com. 86400 IN A 192.168.20.200 www.janog-saikou.com. 86400 IN A 1.2.3.4 janog-saikou.com. 86400 IN SOA dns1.janog-saikou.com. postmaster.janog-saikou.com. 2024011701 10800 3600 604800 3600 ;; Query time: 0 msec ;; SERVER: 192.168.1.100#53(192.168.1.100) (TCP) ;; WHEN: Wed Dec 27 01:10:06 UTC 2023 ;; XFR size: 7 records (messages 1, bytes 246) |
ゾーンデータの取得に成功しました。
ゾーン転送できそうなので、S-DNSで named を再起動します。
root@S-DNS:/# service named restart |
S-DNSで名前解決できるか確認してみます。
root@P-DNS:/# dig @192.168.2.200 www.janog-saikou.com a
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> @192.168.2.200 www.janog-saikou.com a ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19968 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 111bf193c031699501000000658a5ada875c409c15008594 (good) ;; QUESTION SECTION: ;www.janog-saikou.com. IN A
;; ANSWER SECTION: www.janog-saikou.com. 86400 IN A 1.2.3.4
;; Query time: 0 msec ;; SERVER: 192.168.2.200#53(192.168.2.200) (UDP) ;; WHEN: Tue Dec 26 04:47:22 UTC 2023 ;; MSG SIZE rcvd: 93 |
status が NOERROR となり、Aレコードの応答を返しました。
正解例
①以下のようにR1に設定を追加します。
R1 ip access-list extended 100 30 permit udp host 192.168.1.100 eq domain host 192.168.2.200 40 permit tcp host 192.168.1.100 eq domain host 192.168.2.200 ip access-list extended 101 30 permit udp host 192.168.2.200 host 192.168.1.100 eq domain 40 permit tcp host 192.168.2.200 host 192.168.1.100 eq domain |
※ACLのフィルタの仕方については制限がありませんので、以下のような大雑把な許可設定でもOKです。
ip access-list extended 100 30 permit ip any any ip access-list extended 101 30 permit ip any any |
②以下のようにP-DNSの /etc/bind/named.conf の allow-transfer の指定部分を 192.168.2.200 に修正します。
root@P-DNS:/# vi /etc/bind/named.conf
include "/etc/bind/named.conf.options";
zone "janog-saikou.com" in { type master; file "/etc/bind/janog-saikou.com.zone"; allow-transfer { 192.168.2.200; }; }; |
不正解の例
以下の方法は制限に違反するので不正解となります。
・S-DNSの named.conf / janog-saikou.com.zone を編集して、プライマリDNSサーバとして動作させる
・R1のインターフェースへのACLの適用を外す、ACLを削除する
初期config
R1
hostname R1 no ip domain lookup
interface GigabitEthernet3 ip address 192.168.1.1 255.255.255.0 ip access-group 100 in no shut
interface GigabitEthernet4 ip address 192.168.2.2 255.255.255.0 ip access-group 101 in no shut
ip access-list extended 100 10 permit icmp any any 20 permit udp host 192.168.1.100 host 192.168.2.200 eq domain
ip access-list extended 101 10 permit icmp any any 20 permit udp host 192.168.2.200 eq domain host 192.168.1.100 |
named.conf.primary
include "/etc/bind/named.conf.options";
zone "janog-saikou.com" in { type master; file "/etc/bind/janog-saikou.com.zone"; allow-transfer { 192.168.1.100; }; }; |
named.conf.secondary
include "/etc/bind/named.conf.options";
zone "janog-saikou.com" in { type slave; file "/etc/bind/janog-saikou.com.zone"; masters { 192.168.1.100; }; }; |
$ORIGIN janog-saikou.com. $TTL 86400 @ IN SOA dns1.janog-saikou.com. postmaster.janog-saikou.com. ( 2024011701 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 3600 ; Minimum ) ; IN NS dns1 IN NS dns2 dns1 IN A 192.168.10.100 dns2 IN A 192.168.20.200 www IN A 1.2.3.4 |
Commentaires