最近ちゃくちゃくと?話題に上り始めている DNS over HTTPS を使ってDNSのレコードを監視するお話。
最近Zabbixをいじる機会が多いのですが、WebサーバのIPが変わったかどうか監視することってできるんですかねぇ?っていう相談を受けた。例えばダイナミックDNSで運用している場合など。あまりないことは理解してる。
nslookupでgrepしてawkしてIPを取得してってやればできそう、と思ったのもつかの間、せっかくZabbixがあるんだからZabbixでできないんだろうか、という話に発展した。
一瞬、nslookup使ってスクリプトかけばいいんじゃ?と思ったが、そういったスクリプトを個々のサーバで動かすと後々管理も面倒になるしなぁと思い、そうですね~やってみますか、となったときのお話。
そもそも DNS over HTTPS ってなに?
DNSの問い合わせやレスポンスなどの通信をHTTPSを使って行うというもので、通常平文で行われる通信を暗号化するので、盗聴や改ざんを防止することができます。
詳細はJPNICのページをどうぞ。
DNS over HTTPS でAレコードを確認
以下のURLにアクセスしてみると、pig-log.com のIPアドレス(Aレコード)が返ってくる。
https://dns.google.com/resolve?name=pig-log.com&type=A
ブラウザに表示される値としては以下。
1 |
{"Status": 0,"TC": false,"RD": true,"RA": true,"AD": false,"CD": false,"Question":[ {"name": "pig-log.com.","type": 1}],"Answer":[ {"name": "pig-log.com.","type": 1,"TTL": 19451,"data": "183.181.98.28"}]} |
JSON形式で返ってくるので分かりづらいですね。JSONを整形するために、jqコマンドを使ってやってみると以下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# curl -s "https://dns.google.com/resolve?name=pig-log.com&type=A" | jq { "Status": 0, "TC": false, "RD": true, "RA": true, "AD": false, "CD": false, "Question": [ { "name": "pig-log.com.", "type": 1 } ], "Answer": [ { "name": "pig-log.com.", "type": 1, "TTL": 21564, "data": "183.181.98.28" } ] } |
欲しい情報としては、IPなので、さらに絞り込むと以下。
1 2 |
# curl -s "https://dns.google.com/resolve?name=pig-log.com&type=A" | jq '.Answer[].data' "183.181.98.28" |
ダブルコーテーションはいらないなぁと思えば、-r オプションを使う。
1 2 |
# curl -s "https://dns.google.com/resolve?name=pig-log.com&type=A" | jq -r '.Answer[].data' 183.181.98.28 |
簡単ですね。このコマンドをZabbixのuserParameterに指定すれば、IPが変わったことを検知できそうです。
一応、nslookup でやってみると、以下。
1 2 3 4 5 6 7 8 9 10 |
# nslookup pig-log.com Server: 192.168.10.123 ### イントラのDNSサーバ Address: 192.168.10.123#53 Non-authoritative answer: Name: pig-log.com Address: 183.181.98.28 # nslookup pig-log.com | grep -A2 Name | grep Address | awk '{ print $2 }' 183.181.98.28 |
こっちでも簡単。よかったですね。