ttt

getttyent

DNSのSRVレコード

2013-04-19 23:59:00 | デジタル・インターネット

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

Looking up update.FreeBSD.org mirrors...

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

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

とかやってみたのですが

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


コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。