クラスレスネットワークにおけるdjbdns正しい使い方 その2

前準備

 まず、dnsというユーザーグループを追加する。
groupadd dns
pw groupadd dns(FreeBSDの場合)
などで作る。
次に、ユーザーアカウントを3つ作る。
useradd -g dns Gtinydns
useradd -g dns Gdnslog
useradd -g dns Gdnscache

(FreeBSDの場合は、pw ......)
最後に、設定の入ったディレクトリーを作成する。
tinydns-conf Gtinydns Gdnslog /etc/tinydns IPアドレス1
dnscache-conf Gdnscache Gdnslog /etc/dnscache IPアドレス2

ここで、IPアドレス1、IPアドレス2は、絶対に同じにしないこと!
エラーなしで、暴走するのだ!私は、これで、元旦を(爆笑・・・殺されるかな?)
どちらかのIPをローカルにすることをお勧めする。
もっとも、IP公開が目的なら、IPアドレス1を、公開IPにしないとだめですね。
まあ、プロバイダーでもなければ、DNSキャッシュを外に出す必要は無いでしょう!
それから、1台のサーバーの中にいっぱいIPを持っている人は、
tinydns-conf Gtinydns Gdnslog /etc/tinydns2 IPアドレス3
dnscache-conf Gdnscache Gdnslog /etc/dnscache2 IPアドレス4

などで設定ディレクトリーを増やして、さらに起動するデーモンを増やせば、幾らでもできる。
注意:BINDの様に1プロセスで、複数IPは出来ない。(data.cdbの共有は、出来るらしいが)

起動する

 その前に、BINDを動かしてる人は、速やかに、止める!起動しなくする。(これが、賢明だ!)
Linux は、/etc/rc.d/rcX.dの中のSXXnamed、KXXnamedを消す。
Solarisは、/etc/named.conf を消す。
FreeBSDは、/etc/rc.conf のnamed_enable="NO"
念のためリブート。
ps -ax|grep named
などで見て、namedが、無ければ成功。
(ここで、注意:dnscacheの rootキャッシュファイルが古いので、更新する。
2017年10月24日版は、ここ
これを、/etc/dnscache/root/servers の@と取り替える)
 起動の仕方、これが、また変わっている。
/service
に、シンボリックリンクを作って、5秒待つ!
ln -s /etc/tinydns /service/.
ln -s /etc/dnscache /service/.
sleep 5

これで、起動する。
svstat /service/tinydns
svstat /service/dnscache

で、何れも "up" と出ていれば成功!
DNSキャッシュの方で、
cd /etc/dnscache/root/ip
と入って、使用を許可するIPアドレスの名前のファイルを作成する。
touch 127.0.0.1
touch 192.168.0
touch 192.168.1
touch 219.166.53.194

などとする。
これで、キャッシュは、十分動く。
/etc/resolv.confに nameserver IPアドレス2 と書けば、もう使える。
注意:nslookupは、このままでは、使えない。どうしても使いたい場合は、IPアドレス2を
    正引き、逆引きともに、DNSに登録すること。(以下参照)
そうそう、resolv.conf には、扱うドメイン名も書く。
こんな風に。
search hasiru.net lenin.jp
ここで、dnscacheの便利な使い方として、
cd /etc/dnscache/servers
に入って、ドメイン名、マシン名、逆引き名、などでファイルを作り、内容に、参照するDNSのIPアドレスを
記述することで、独自の名称解決を追加できる。
これで、ローカルマシンの名称解決を外に公開することなく、同じキャッシュに追加できる。
例:
0.168.192.in-addr.arpa 内容 127.0.0.1
(127.0.0.1にローカルマシン用逆引きのDNSサーバーを作ったとき)
local.net 内容 192.168.0.2
(local.net というドメイン名は、192.168.0.2のDNSサーバーを参照する)

tinydnsの設定

 いよいよ、これからが、本番だ!
クラスレスでアドレスを公開するための設定を行おう!
まず、
cd /etc/tinydns/root
で中に入る。
ここで、多くのdjbdnsの解説書では、./add-ns ./add-host ・・・・・などを使えとあるが、
私は、断言する!(小さめの声で)それらは、バグってるから使えない・・・・・(し、死ぬのか)
vi data
などとやって、dataファイルの内容を手動で書こう!(後日、自動化スクリプトを作成したいが)

1)まず、上位のDNSに登録したネームサーバの設定を書く。
Z で始まるのが、SOAの定義、&で始まるのがネームサーバの定義だ。
注意:多くの解説書で、推奨されている、. から始まる行は、使わない。(djbにRIPEと言われた人がいた?)
    これを、使うと逆引きで、大変みょーーーーーーーな連絡先を作ってくれるのだ!
まず、SOAの定義は、
Zhasiru.net:ns.hasiru.net:admin.hasiru.net:2002031501:7200::::2560
の様に書く。
複数のドメインを扱う場合は、その数だけ書く、
Zlenin.jp:ns.hasiru.net:admin.lenin.jp:2002031501:7200::::2560
の様に。
Zに続いて、ドメイン名、プライマリーネームサーバー名、連絡先アドレスの@を.に変えたもの、
シリアル番号、リフレッシュ秒数、リトライ回数、有効期間、最低有効期間、TTLの値。
シリアル番号以下は、省略でき、適当なデフォルト値になる。
注意:シリアル番号を省略しない場合は、設定を変更するごとに、値を増やすこと、
    通常 年月日XX にするらしいが、カウントアップされていれば良い。(ただし10桁以内)
次にネームサーバーの定義は、
&hasiru.net:219.166.53.194:ns.hasiru.net:259200
&hasiru.net:219.166.53.195:ns2.hasiru.net:259200

という具合に書く。
説明すると、初めのが、ドメイン名、次がDNSのIPアドレス、
それから、登録してあるDNSの名前(注意:ちゃんと届けた名前にする)、TTL(有効期限の秒数)
TTLは、省略して良い。(自動的に適当な値が設定される)

ここで、注意!
プロバイダーなどの外のDNSを書く場合は、IPアドレスを書かない(書くとさらし者に・・・・怖い)。
&hasiru.net::dns1.ocn.ne.jp:259200
なんて、具合に。
また、1つのDNSに複数のドメインを持たせるときも、2つ目からは、IPアドレスを書いてはいけない。
&lenin.jp::ns.hasiru.net:259200
の様に(これも、間違えると某団体のさらし者に・・・・・・間違えやすいんだけど・・トラップ1)。

2)貰ったIPアドレスの逆引きのDNSの設定を書く。
Z192.53.166.219.in-addr.arpa:ns.hasiru.net:admin.hasiru.net:2002031501:7200::::2560
&192.53.166.219.in-addr.arpa::ns.hasiru.net:259200
&192.53.166.219.in-addr.arpa::ns2.hasiru.net:259200

の様に書く。1)とほば同様。IPアドレスは、書かない。
初めの部分は、本当はプロバイダーによって違うんだけれど、ネットワークアドレスを逆に書くのが
殆どらしい。
(中には、192-199.53.166.219.in-addr.arpaというのもあるらしい)
これを調べるには、
dnsqr any 194.53.166.219.in-addr.arpa
などと、打ってみる。
answer: 194.53.166.219.in-addr.arpa 73980 CNAME 194.192.53.166.219.in-addr.arpa
などと、返ってきたら、ネットワークアドレスの逆書きで、登録されている。
ネットワークアドレスとは、早い話、貰ったIPアドレスの一番初めのアドレス。
これを逆に書いて、.in-addr.arpaを付ける。
そしてIPの部分は書かない。あとは、1)と同様。
ところで、djbdnsで、逆引きを委譲されている場合は、書き方が違うのだが、
ユーザーにdjbdnsを使うことを強要するようなものなので、まずはやっていない・・・と思うよ。

3)自分の管理しているIPアドレスの名前を定義する。
+ip1.hasiru.net:219.166.53.192:86400
+srv1.hasiru.net:219.166.53.194:86400
+www.hasiru.net:219.166.53.194:86400
+lenin.jp:219.166.53.194:86400
+srv2.hasiru.net:219.166.53.195:86400
+www2.hasiru.net:219.166.53.195:86400
+srv2.lenin.jp:219.166.53.195:86400
などと、書いていく。
+に続いて、ホストの名前、IPアドレス、TTLの値。
ここで、先ほど使ったDNSは、書いてはいけない。(トラップ2 爆笑)
また、djbを初め、多くの人が、間違っているが、
クラスレスでは、
./add-host
を使って生成される、
=から始まる行は、書いてはいけない。(大山オリジナル)
クラスC相当の嘘の逆引きが、自動的に出来てしまうから!
おっと、djbdnsで委譲されているときは、それで良いのだからまんざら嘘でもないのか。
もちろん同一の行があっては、いけないが、同じIPアドレスは、何度でも使える。

4)自分が管理しているIPアドレスの逆引きを定義する。
^194.192.53.166.219.in-addr.arpa:ns.hasiru.net:86400
^195.192.53.166.219.in-addr.arpa:ns2.hasiru.net:86400
^196.192.53.166.219.in-addr.arpa:srv3.hasiru.net:86400
の様に書く。
^に続いて、IPアドレスの最後の部分、さっきDNSで定義したネットワークアドレスを逆にしたものなど、
.in-addr.arpa、逆引きを設定したい名前、TTLの値。
逆引きは、必ずしも付ける必要は無いが、登録したDNSの位は、付けよう。
また、各IPに1つ位は、付けてやろう。(さっき名前を定義したものだけですが)
ここで、これは、ちょっと自信がないのだが、
次説明するMXレコードで定義した名前も逆引きを定義しないと、一部で文句を言われるらしい。
PTRが、重複してしまうが、
^194.192.53.166.219.in-addr.arpa:ml.hasiru.net:86400
^195.192.53.166.219.in-addr.arpa:ml2.hasiru.net:86400
私は、こんな感じで、書いている。
!ここで、IP1個だけを、貰っている人、または、NAT、マスカレードなどで、全てのIPを使いたい人へ、
初めの1つ目のアドレスの逆引きだけは、
^192.53.166.219.in-addr.arpa:ip1.hasiru.net:86400
の様に書くこと!

5)MXレコードを定義する。
MXレコードとは、メールを送受信するアドレスを指定するための定義だ。
@hasiru.net:219.166.53.194:ml.hasiru.net::86400
@srv1.hasiru.net::ml.hasiru.net::86400
@lenin.jp:219.166.53.194:ml1.lenin.jp::86400
@srv1.lenin.jp::ml1.lenin.jp::86400
@srv2.hasiru.net:219.166.53.195:ml2.hasiru.net:10:86400
@www2.hasiru.net::ml2.hasiru.net:10:86400
@srv2.lenin.jp:219.166.53.195:ml2.lenin.jp:10:86400
@www2.lenin.jp::ml2.lenin.jp:10:86400
の様に書く。
@に続いて、メールアドレスの@以下を書き、メールサーバのIPアドレスを書き、メールサーバの名前を
書き、優先順位、TTLの値を書く。
優先順位は、省略すると0になる。
これは、1つのメールアドレスが受信するサーバを複数設定したときに、優先される順番だ。
ここで、また注意。(トラップ3 大爆笑)
同じメールサーバー名が現れるところでは、IPアドレスを書いてはいけない。(さらし者に・・・・)
もっとも、この法則が、分かれば、結構自由に、メールを操れて楽しいが。
メールサーバのアドレスは、3)の定義に書いては、いけない。
おっと、書いてしまった場合は、IPアドレスを書かなければ良いのか。

そうか、良いアイデアだ!
アドレスのトラップから逃れるために、IPアドレスは、全て
+ で定義すれば良いんだ!

以上で、おわり、どうです、簡単でしょう・・・・・・・・・・・・(微妙な苦笑)

前へ  次へ