自宅でサーバを立てました
小規模サーバの名器と名高い HP NL54L を、遅ればせながら私も購入しました。遅ればせながらというか、もうほとんど賞味期限が切れてますが…
現時点における FreeNAS の最新版 9.3 STABLE をインストール。これ自体は順調に行きましたが、それよりも NL54L を動かすのに少々すったもんだしました。それは別稿にて。
FreeNAS を勉強しながら、jail を利用して各種サーバを構築中です。非力なサーバですので、あまり大がかりな事をさせたくはありませんが。お父ちゃんの極小な小遣いでパワフルなサーバマシンを買うのは難しいんですよ…
bind 9
最初に立てたのがDNSサーバ。名前解決できなければ何も始まりません。公開分に関しては、ドメインを購入した会社で済ませます。やりたい事は家庭内の名前解決。マシンの名前アクセスと、自宅で立てた公開Webサイトの家庭内アクセスです。
FreeNAS の中身は FreeBSD で、ぐーぐる先生によれば bind はデフォルトで含まれているモジュールとの事。bind9 の設定もぐぐれば事細かな日本語情報を入手できます。その通りに設定すれば一仕事終わり。簡単カンタン♪
…なのですが、ここからがハマリ所。
状況
私のコダワリにより、我が家では以下のようにドメインを使い分けたい。
-
公開Webサイトは、私の購入したセカンドドメインのサブドメインとする。つまり、購入した example.com に対して www.example.com を公開サイトとしたい。将来的には www1.example.com, www2.example.com,... と増やす予定。
-
各マシンはサブドメイン machine.example.com の中に置く。つまり、マシンのFQDNは taro.machine.example.com, hanako.machine.example.com,... としたい。当然、仮想マシンを作る度に増えていく事になる。
こうして書くと読み辛いですね ま、そんなに難しい事はありません。 named.conf に zone を作って、折角なので view で括ってみたりして、 zone としては example.com と machine.example.com の2つを用意します。逆引きはマシン名だけ出来ればいい(ですよね?)ので、1つだけ逆引きを用意。ますます読み辛いですね
まとめると、下記のようになります。この内容についてはそこら中で解説されているので、特に説明はいりませんね。もし誤りがあったら、是非ご指摘お願いします。
options { 《省略》 };
key "rndc-key" { 《省略》 };
view "internal" {
match-clients { localnets; };
recursion yes;
zone "example.com" {
type master;
file "/etc/namedb/master/example.com";
};
zone "machine.example.com" {
type master;
file "/etc/namedb/master/machine.example.com";
};
zone "1.0.10.in-addr.arpa" {
type master;
file "/etc/namedb/master/named.local";
};
};
; 2015.12.27. by Katz
$TTL 1d
@ SOA dns.example.com. email.example.com. (
2015122700 ; serial
1d ; refresh
1h ; retry
1w ; expire
1d ; Negative cache TTL
)
NS dns.example.com.
dns A 10.0.1.109
freenas CNAME taro.machine
; 2015.12.27. by Katz
$TTL 1d
@ SOA dns.example.com. email.example.com. (
2015122700 ; serial
1d ; refresh
1h ; retry
1w ; expire
1d ; Negative cache TTL
)
NS dns.example.com.
taro A 10.0.1.108
hanako CNAME dns.example.com.
; 2015.12.27. by Katz
$TTL 1d
@ SOA dns.example.com. email.example.com. (
2015122500 ; serial
1d ; refresh
1h ; retry
1w ; expire
1d ; Negative cache TTL
)
NS dns.example.com.
PTR machine.example.com.
A 255.0.0.0
108 PTR taro.machine.example.com.
109 PTR hanako.machine.example.com.
見る人が見れば見当が付くと思いますが…
- taro.machine.example.com が物理マシン NL54L です。これにFreeNASをインストールしました。
- hanako.machine.example.com は jail で用意した仮想マシンです。ここで bind を動かしてDNSサーバにしています。
ハマリポイント1.
実はこの時点で、既にハマリポイントがあったのでした。各zoneファイルの NS レコードです。
上記では dns.example.com を指定し、zoneファイル example.com にて A レコードで設定しています。結論から言うと、そうでないと freenas.example.com だけ解決できなくなります。
本当は下記のようにしたかったんですが。
- NSレコードに hanako.machine.example.com. を指定
- もしくは、zoneファイル example.com で
dns CNAME hanako.machine
と設定 - zoneファイル machine.example.com で
hanako A 10.0.1.109
と設定
設定としてはこの方が美しいんですが、どういう訳か freenas.example.com を解決できなくなるんですね。もしかすると bind の挙動に精通すると原因がわかるようになるのかも知れませんが、今の私の知識ではお手上げです。調べても、こういう設定をしている方はいらっしゃらないようでした。
ハマリポイント2.
Windowsにて。nslookup は問題無いんですが、 ping と IE で名前解決が出来ません。
こちらは割と有名な問題だったようです。結論から言うと、Microsoftは一体何やってんだって話
下記Webページが参考になりました。
Windows nslookupで名前解決できるのにpingで名前解決できない問題の真相
私の場合、ルータの設定で余計な事をしていました。(うちのルータは AirMac Extreme です)
- プライマリDNSサーバ: dns.example.com のIPアドレス(10.0.1.109)
- セカンダリDNSサーバ: ISP が通知してきたプライマリDNSサーバ
解決策は下記の通り。
- named.conf に下記を記入。
options {
《色々なoptions設定》
forwarders {
《ISPのプライマリDNSサーバのIPアドレス》;
《ISPのセカンダリDNSサーバのIPアドレス》;
};
forward only;
};
- ルータの設定で、セカンダリDNSサーバを指定しない。
これで万事解決しました。やった!