背景
プライベートでサーバを持ちたくて、5年くらい前からConohaVPSを利用させてもらっているのだが、諸事上でそれまで運用していたVPS上のDebianをサポート期間長いRockey Linuxに移行した。
VPS(VM)自体を廃棄、新規構築したことでグローバルIPも変更になり、10年以上前から運用していたMyDNSのドメイン設定を久しぶりに見直して設定したのだが、自宅サーバへのアクセスがずっと不安定で、うまくアクセスできることもあれば、タイムアウトすることもあるため、本格的に調査をしてみた。
途中経過だが、どうも自ドメイン(my-domain.mydns.jpと仮称)への名前解決に問題がありそうということまでは特定できた。(現在まだ解決には至っていない)
MyDNSに定期バッチ実行
MyDNSは一定期間ドメイン利用がないと削除されてしまう規定(※詳細はこちら)のため、DDNSとしてではなく固定IPで運用する場合であっても定期バッチを実行する必要がある。
ConohaVPSは固定グローバルIPアドレスを割り当ててくれるので、ConohaVPSサーバ側に/etc/cron.dairy/mydnsを作成して、IPアドレスの通知するように設定する。
#!/bin/sh
curl -o /dev/null -s --user MYID:MYPASS https://ipv4.mydns.jp/login.html
curl -o /dev/null -s --user MYID:MYPASS https://ipv6.mydns.jp/login.html
MyDNSで設定確認
MyDNSのWeb画面にログインして、[Log Info]メニューから、定期バッチ実行結果がログ出力されていることを確認する(問題なくDNS UPDATEログ出力されていた)
また、[IP Address Direct]メニューでConohaVPSの固定IPアドレスが設定できていることも確認した。
[Domain Info]メニューも確認して、my-domain.mydns.jp(仮称)のドメイン設定と、Ipv4/IPv6の設定も問題なく設定できていることも確認した。
| Hostname | Type | Content | Target ID |
|---|---|---|---|
| * | A | myid | |
| * | AAAA | myid |
クライアントから名前解決確認
ここからが本題
ConohaVPSで払い出されている固定グローバルIPアドレスを、MyDNSに登録した自ドメインで名前解決できることを任意のクライアント端末から確認する。
コマンドには古き良きnslookupコマンドを利用する。(ネットワーク環境は全国チェーン展開している某有名喫茶店の無料Wifi環境から実施している)
MyDNSのDNSサーバは以下3つだとされている。 https://www.mydns.jp/#howtouse
- ns0.mydns.jp (210.197.74.200)
- ns1.mydns.jp (210.197.74.201)
- ns2.mydns.jp (210.197.74.202)
まずは、このサーバに対して名前解決ができるかを確認する。
$ nslookup my-domain.mydns.jp ns0.mydns.jp
Server: ns0.mydns.jp
Address: 210.197.74.200#53
Name: my-domain.mydns.jp
Address: xxx.xxx.xxx.xxx
Name: my-domain.mydns.jp
Address: zzzz:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz
一瞬で回答が返ってくる。問題なく名前解決できている。
では、リゾルバにデフォルトのDNSサーバを利用した場合はどうなるかを見てみた。
$ nslookup my-domain.mydns.jp
;; communications error to 127.0.0.53#53: timed out
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: my-domain.mydns.jp
Address: xxx.xxx.xxx.xxx
;; communications error to 127.0.0.53#53: timed out
;; communications error to 127.0.0.53#53: timed out
Name: my-domain.mydns.jp
Address: zzzz:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz
時々タイムアウトが発生していることがわかる。(なぜ??)
パブリックDNSを設定したらどうなるか→パブリックDNSで有名なGoogleの8.8.8.8で試してみると
$ nslookup my-domain.mydns.jp 8.8.8.8
;; Got SERVFAIL reply from 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53
** server can't find my-domain.mydns.jp: SERVFAIL
解決できない。では、1.1.1.1ではどうか?
$ nslookup my-domain.mydns.jp 1.1.1.1
Server: 1.1.1.1
Address: 1.1.1.1#53
Non-authoritative answer:
Name: my-domain.mydns.jp
Address: xxx.xxx.xxx.xxx
Name: my-domain.mydns.jp
Address: zzzz:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz:zzzz
問題なく解決できる!?? パブリックDNSによっては解決できない可能性があることがわかってきた。
こちらの記事を参考に、いろいろなパブリックDNSで解決を試してみると
-
8.8.8.8→ NG -
1.1.1.1→ OK -
1.1.1.2→ OK -
1.1.1.3→ OK -
208.67.222.222→ ONとNGの混在 -
208.67.220.123→ ONとNGの混在 -
9.9.9.9→ NG -
9.9.9.10→ NG -
9.9.9.11→ NG
DNSSECが怪しい
Google Public DNSのドキュメントを読むと、DNSSECの検証に失敗した場合にSERVFAILが返されるとある。
ということは、MyDNS側がDNSSECに対応していないのが原因な気がしてきた。
なのでMyDNSがDNSSECに対応しているかを調べてみたが、公開されている情報からは判断できなかった。
今後の対応方針
どうもMyDNS利用者側の設定で解決無理な気がしてきたので、
- 利用するクライアント端末のリゾルバの設定で
1.1.1.1など名前解決できるDNSを指定する - MyDNS以外のDNSサービスを利用する
のどちらかで解決する必要がありそう。幸いなことに、自宅サーバは自分しか利用しないサービスを運用しているだけなので、1.1.1.1を設定する運用でもなんとかなるが、一般ユーザーに提供するサービスを公開するならそうはいかない。
MyDNS以外を使うとなると、候補としてはConohaVPSのDNS機能だろうか。でもこれまで使ってきた自ドメインも変える必要がありそう。うーん。
MyDNSってそれなりにサービス利用者いると思うんだけど、みんなどうしてるんだろう・・・