<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>しゃおの雑記帳 &#187; DNS</title>
	<atom:link href="http://d.1555.info/category/dns/feed/" rel="self" type="application/rss+xml" />
	<link>http://d.1555.info</link>
	<description>ごったまぜ日々の雑記とか。</description>
	<lastBuildDate>Mon, 23 Jan 2012 00:00:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>dip.jpにおける間違ったグルー設定</title>
		<link>http://d.1555.info/2008/03/23/wrong-dns-settings_on_dip-jp/</link>
		<comments>http://d.1555.info/2008/03/23/wrong-dns-settings_on_dip-jp/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 12:42:06 +0000</pubDate>
		<dc:creator>shao</dc:creator>
				<category><![CDATA[DNS]]></category>

		<guid isPermaLink="false">http://d.1555.info/2008/03/23/wrong-dns-settings_on_dip-jp/</guid>
		<description><![CDATA[				しゃお邸ではDNSのキャッシュやプライベートコンテンツのためにDNSサーバ(djbdns)を立てています、その環境で一部のホストの名前がうまく引けません。
				引けないドメインは ***.orz.hm だとか ***.or.tp とか、 ***.dip.jp 。最初はキャッシュが悪さして]]></description>
			<content:encoded><![CDATA[				<p>しゃお邸ではDNSのキャッシュやプライベートコンテンツのためにDNSサーバ(djbdns)を立てています、その環境で一部のホストの名前がうまく引けません。</p>
				<p>引けないドメインは ***.orz.hm だとか ***.or.tp とか、 ***.dip.jp 。最初はキャッシュが悪さしてるとか上位のレコードがぶっこわれてるとかそんなもんだろうと思っていたのですが、(友人の通う)某大学からも引けないとかいう話になったので調べてみることにしました。</p>
				<p><span id="more-57"></span>結論から言うと、NSのグルーがなく、ネームサーバのIPアドレスを取得するために多段問い合わせを実行する必要が出ていました。NS名からIPアドレスを得るために3回以上問い合わせを行うようなケースだと一部のDNSキャッシュサーバ(djbdns, 8.2.7以前のBIND, 一部のWindows ServerのDNSサービス)が名前解決を諦めてしまうため、これらのドメインの名前解決ができず、エラーが返されます。</p>
				<p>さて、dip.jpはどうなっていたのだろうでしょうか。DNSのクエリを追うため、digコマンド(BINDに付属)やdnsq(djbdnsに付属)を使い、doga.dip.jp の名前を解決する手順を確認してみました。</p>
				<p>まずdip.jpのネームサーバがどこか、.jpのルートサーバに問い合わせ (本来は.jpのルートサーバを探すためにルートサーバ[ROOT-SERVERS.NET]に問い合わせるが省略。以下同)を行います。</p>
				<p><code> </code></p>
				<pre>[shao@runa ~]$ dnsq ns dip.jp a.dns.jp
2 dip.jp:
90 bytes, 1+0+3+0 records, response, noerror
query: 2 dip.jp
authority: dip.jp 86400 NS ns1.ieserver.net
authority: dip.jp 86400 NS ns2.ieserver.net
authority: dip.jp 86400 NS ns3.ieserver.net</pre>
				<p>dip.jp は ns1.ieserver.net 〜 ns3.ieserver.net が担当しているということがわかりましたが、IPがわからない(応答に含まれていない[仮に応答に含まれていても、a.dns.jpは.netを委譲されていないので権威のない回答であり、DNSクライアントは無視する])ので、ieserver.netを管轄するネームサーバがどこにあるか、今度はgTLDのルートサーバに問い合わせをします。</p>
				<p><code> </code></p>
				<pre>[shao@runa ~]$ dnsq ns ieserver.net a.gtld-servers.net
2 ieserver.net:
80 bytes, 1+2+0+0 records, response, noerror
query: 2 ieserver.net
answer: ieserver.net 172800 NS ns01.agora-inc.jp
answer: ieserver.net 172800 NS ns02.agora-inc.jp</pre>
				<p>まだIPがわかりません。ieserver.netを担当するns01.agora-inc.jpはどこにあるのか、agora-inc.jpのネームサーバについて、.jpのルートサーバに問い合わせます。</p>
				<p><code> </code></p>
				<pre>[shao@runa ~]$ dnsq ns agora-inc.jp a.dns.jp
2 agora-inc.jp:
81 bytes, 1+0+2+0 records, response, noerror
query: 2 agora-inc.jp
authority: agora-inc.jp 86400 NS ns01.agora-inc.net
authority: agora-inc.jp 86400 NS ns02.agora-inc.net</pre>
				<p>やっぱりIPがわからないです。今度はagora-inc.netが誰だかまた調べなくてはいけないです。このへんでDNSクライアントによっては諦めますが、仮にここで諦めない実装であると仮定し、今度はagora-inc.netのネームサーバをgTLDのルートに問い合わせます。</p>
				<p><code> </code></p>
				<pre>[shao@runa ~]$ dnsq ns agora-inc.net a.gtld-servers.net
2 agora-inc.net:
118 bytes, 1+2+0+2 records, response, noerror
query: 2 agora-inc.net
answer: agora-inc.net 172800 NS ns55.domaincontrol.com
answer: agora-inc.net 172800 NS ns56.domaincontrol.com
additional: ns55.domaincontrol.com 172800 A 208.109.14.49
additional: ns56.domaincontrol.com 172800 A 208.109.255.28</pre>
				<p>やっとIPアドレスらしきものが帰ってきました。しかも、.comに関して権威を持っていますので今度はns55/ns56を問い合わせる必要はなく、このレスポンスによってagora-inc.netのネームサーバが判明します。</p>
				<p>その後の手順は省略しますが、ns56.domaincontrol.com に ns01.agora-inc.net を問い合わせ、ns01.agora-inc.netにns01.agora-inc.jpを問いあわせ、ns01.agora-inc.jpにns1.ieserver.netを問い合わせ、ns1.ieserver.netにdoga.dip.jpのAレコードを問い合わせます。こんなひどい多重問い合わせはまずやりません。直ちに直すべきです。</p>
				<p>ちなみに正しい設定例はこんな感じ。www.yahoo.co.jp を調べるため、まずは.jpのルートサーバにyahoo.co.jpのネームサーバを問い合わせます。</p>
				<p><code> </code></p>
				<pre>[shao@runa ~]$ dnsq ns yahoo.co.jp a.dns.jp
2 yahoo.co.jp:
101 bytes, 1+0+2+2 records, response, noerror
query: 2 yahoo.co.jp
authority: yahoo.co.jp 86400 NS dnsg01.yahoo.co.jp
authority: yahoo.co.jp 86400 NS ns10.yahoo.co.jp
additional: ns10.yahoo.co.jp 86400 A 210.80.243.9
additional: dnsg01.yahoo.co.jp 86400 A 211.14.12.10</pre>
				<p>IPアドレスが権威をもったサーバから返っていますので、ns10.yahoo.co.jp A 210.80.243.9は信用できますので、こちらに問い合わせができます。</p>
				<p><code> </code></p>
				<pre>[shao@runa ~]$ dnsq a www.yahoo.co.jp ns10.yahoo.co.jp
1 www.yahoo.co.jp:
313 bytes, 1+13+2+2 records, response, authoritative, noerror
query: 1 www.yahoo.co.jp
answer: www.yahoo.co.jp 300 A 203.216.235.154
answer: www.yahoo.co.jp 300 A 203.216.235.201
(中略)
authority: yahoo.co.jp 900 NS ns10.yahoo.co.jp
authority: yahoo.co.jp 900 NS dnsg01.yahoo.co.jp
additional: ns10.yahoo.co.jp 900 A 210.80.243.9
additional: dnsg01.yahoo.co.jp 900 A 211.14.12.10</pre>
				<p>正しくはこうです。つまるところ、NSは自分のドメインと同じ場所、もしくは違う場所であるならば1階層のみの委譲で済むように (example.jp のNSは ns.example.ne.jp であり、 ns.example.ne.jpのIPアドレスは.jpのルートサーバからグルーが貼られている)しましょう。</p>
				<p>参考資料: (株)日本レジストリサービス <a href="http://www.nic.ad.jp/ja/materials/iw/2004/main/dnsday/minda.pdf">ネームサーバは内部名で</a> (application/pdf)</p>
]]></content:encoded>
			<wfw:commentRss>http://d.1555.info/2008/03/23/wrong-dns-settings_on_dip-jp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tinydnsで時限DNS切り替え</title>
		<link>http://d.1555.info/2007/03/31/time-period-dns/</link>
		<comments>http://d.1555.info/2007/03/31/time-period-dns/#comments</comments>
		<pubDate>Fri, 30 Mar 2007 16:59:24 +0000</pubDate>
		<dc:creator>shao</dc:creator>
				<category><![CDATA[DNS]]></category>

		<guid isPermaLink="false">http://d.1555.info/2007/03/31/tinydns%e3%81%a7%e6%99%82%e9%99%90dns%e5%88%87%e3%82%8a%e6%9b%bf%e3%81%88/</guid>
		<description><![CDATA[				tinydnsでは一定の時刻になるとDNSレコードが切り替わるように予約&#38;TTLの自動減算をしてくれる機能がある。 →djbdns by DJB
				そこで時間を指定するのに使うのはexternal TAI64 timestampで、djb先生のお馴染みtai64nとはちょっと違う。
				
				時間表記]]></description>
			<content:encoded><![CDATA[				<p>tinydnsでは一定の時刻になるとDNSレコードが切り替わるように予約&amp;TTLの自動減算をしてくれる機能がある。 →<a href="http://djbdns.qmail.jp/djbdns/tinydns-data.html">djbdns by DJB</a></p>
				<p>そこで時間を指定するのに使うのはexternal TAI64 timestampで、djb先生のお馴染みtai64nとはちょっと違う。<br />
				<span id="more-6"></span><br />
				時間表記をtai64に変換する方法をいろいろ探っていたのだが、Nautilusの日記にあった<a href="http://slashdot.jp/~Nautilus/journal/81297">time2tai64.pl</a>でも少しダメだったので、少し手直ししてみた。</p>
				<pre>
#!/usr/bin/perl
use Date::Parse;
$date_str = &lt;&gt;;
$time = str2time($date_str);
$hextime = sprintf("%lx",$time + 10);
$tai64n = sprintf("@40%014s",$hextime);
print "$tai64n¥n";</pre>
				<p>これを/usr/local/bin/time2tai64 として保存。あとは、</p>
				<pre>[root@sayuri ~]# echo "2007-03-31 02:00:00" | time2tai64</pre>
<p>で得られた値をdjbdnsのdataで使えばOK。たとえば2007/03/31 02:00:00 (perlとシステムのタイムゾーンが設定されていれば日本時間でOK)にtest.example.comを1.8.7.1 から1.8.7.2に切り替え、切り替え後はTTL1800秒で運用するという例はこちら。</p>
<pre>+test.example.com:1.8.7.1:0:40000000460d421a
+test.example.com:1.8.7.2:1800:40000000460d421a</pre>
				<p>ちなみに<a href="http://qmailsolutions.com/djbdns/tinydns.html">qmailsolutionsの記事</a>ではTAI64値に@を含めるように書いてあるが、これは誤記だとおもいます。</p>
]]></content:encoded>
			<wfw:commentRss>http://d.1555.info/2007/03/31/time-period-dns/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

