2013年4月20日土曜日

DNSのSRVレコード

先日、FreeBSDなサーバにて、freebsd-updateコマンドを実行したら、サーバに接続できないというようなエラーが出て、おかしいな?となりました。



Looking up update.FreeBSD.org mirrors...



というメッセージは出ますが、いったいどのサーバに接続しようとしているのだろう?と調べてみようと



sh -vx /usr/sbin/freebsd-update fetch |& less



とかやってみたのですが[E:coldsweats01]

host -t srv _http._tcp.update.FreeBSD.org



というコマンドが実行されています。man hostすれば、hostコマンドはDNS lookup utilityと出てくるので、なるほど、じゃあ、srvって何でしょう?

DNSのSRVレコード?

ネット検索して、ここを見ました。



http://www.atmarkit.co.jp/ait/articles/0403/09/news076.html



へ~そういう仕組みがあったんですね。知りませんでした。



さっきのコマンドを手で実行してみると



# host -t srv _http._tcp.update.FreeBSD.org
_http._tcp.update.FreeBSD.org has SRV record 1 5 80 update3.freebsd.org.
_http._tcp.update.FreeBSD.org has SRV record 1 35 80 update4.freebsd.org.
_http._tcp.update.FreeBSD.org has SRV record 1 50 80 update5.freebsd.org.



なるほど。
ついでにdigコマンドでも確認。



# dig SRV _http._tcp.update.FreeBSD.org



; <<>> DiG 9.6.-ESV-R5-P1 <<>> SRV _http._tcp.update.FreeBSD.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35834
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 6, ADDITIONAL: 1



;; QUESTION SECTION:
;_http._tcp.update.FreeBSD.org. IN      SRV



;; ANSWER SECTION:
_http._tcp.update.FreeBSD.org. 3333 IN  SRV     1 35 80 update4.freebsd.org.
_http._tcp.update.FreeBSD.org. 3333 IN  SRV     1 50 80 update5.freebsd.org.
_http._tcp.update.FreeBSD.org. 3333 IN  SRV     1 5 80 update3.freebsd.org.
;; AUTHORITY SECTION:
org.                    40152   IN      NS      c0.org.afilias-nst.info.
org.                    40152   IN      NS      b0.org.afilias-nst.org.
org.                    40152   IN      NS      b2.org.afilias-nst.org.
org.                    40152   IN      NS      a2.org.afilias-nst.info.
org.                    40152   IN      NS      a0.org.afilias-nst.info.
org.                    40152   IN      NS      d0.org.afilias-nst.org.



;; ADDITIONAL SECTION:
update3.freebsd.org.    3333    IN      A       147.229.9.40
(以下略)



/etc/freebsd-update.conf を見ると、



ServerName update.FreeBSD.org



と1つ書いてあるだけで、世界中からupdate.freebsd.orgという1つのサーバに集中させてるって(DNSラウンドロビンとか、ロードバランサを使うにしても)、ふーん・・・と思ってたんですが、違ったんですね。
DNSのSRVレコードを調べることで、update.freebsd.org
update3.freebsd.org
update4.freebsd.org
update5.freebsd.org
というミラーサーバを発見できると、そういう仕組みでしたか。



freebsd-updateコマンドがうまく動かなかったのは、



  • ネットワーク環境が、ファイアウォールの内側にあって、しかもDNSはプライベートなものしか引けなかった


  • そのため、host -t srv _http._tcp.update.FreeBSD.org コマンドでミラーサーバが見つけられなかった


  • たまたまその瞬間に、update.freebsd.org がメンテナンス中で止まっていた


という、複数の要因が重なったためでした。



DNSがひけない環境では困るじゃないか、と思ったのですが、そういうときは、
/etc/freebsd-update.confにて、直接、
ServerName update3.FreeBSD.org
とか指定すればよいらしいです。そのときは、これでできました。





ひょっとするとと思って見てみると、/usr/sbin/portsnap もDNSのSRVレコードを引いてました。



20130419



0 件のコメント:

コメントを投稿