先日、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レコードを引いてました。
0 件のコメント:
コメントを投稿