自宅サーバに割り振ったドメインの名前解決が自宅ネットワーク内ではできない問題、よくありますよね。クライアントとなるマシンの台数が1台や2台ならhostsファイルに書いてやれば解決ですが、最近はスマホとかあるし、クライアントの台数が増加していてそう簡単にはいきません。
というわけで、いい加減何とかしようと思い立ちBINDを使って内向きのDNSサーバを立てました。自宅ネットワーク内にあるサーバのドメインだけ、ローカルなIPアドレス(192.168.x.x)を返すという仕組みです。
んで、我が家はなぜかひかり電話の契約があるのでRV-440NEというホームゲートウェイ兼ルータをNTTから借りて利用しています。設定画面を見る限りNECのOEMのようですね。とりあえずこのルーターに内向きDNSを使うよう設定してやることにしました。
LAN側DNSサーバーアドレスといういかにもな設定項目があるので、今回立てたDNSサーバのIPアドレスを入れてやります。うむ、一見楽ちんですね。
これで完了かと思い、クライアントとなるデスクトップマシンから自宅サーバへ接続してみようと思いブラウザを立ち上げ、URLを入力してみましたが……つながらない。ルーターの設定画面を眺めてみましたがさっぱりわからん。
試しに、クライアントとなるWindowsマシンからnslookupしてみるとこんな結果になりました。
C:\Users\karia>nslookup yuno.side2.net サーバー: UnKnown Address: 2408:210:a386:2f00:23a:9dff:fe8f:c4f2 権限のない回答: 名前: yuno02.yuno.side2.net Address: 210.139.81.173 Aliases: yuno.side2.net
思いきりグローバルIPが返ってきてる……のはまあ一旦置いておくとして、サーバーのアドレスがIPv6??
状況を整理してみます。
- フレッツ光ネクストでひかり電話を契約し、かつRV-440NEを利用していると、LAN内機器にまでNTTからIPv6が振られる
- RV-440NEの「LAN側DNSサーバーアドレス」設定はあくまでIPv4のもの(IPv6では先ほどの「LAN側DNSサーバアドレス」の設定は無視)
- IPv6に対応したクライアントではIPv6で優先的にDNSを引こうとする
→結果としてせっかく立てた内向きDNSサーバを完全スルー
お、おう……。
まあ放っておくわけにいかないので、いくつか対策法を考えてみました。
1.クライアントでIPv6を無効にする
クライアントのマシンでIPv6を無効にすれば、全ての通信がIPv4になるので内向きDNSを見に行くようになります。一見お手軽なように見えますが、イマドキAndroidでもIPv6に対応している時代。一個一個無効にしていくのはさすがはナンセンスでは……ということでこの案はパス。
2.RV-440NEのローカルドメイン設定を利用する
RV-440NEにも一応ローカルドメイン設定なる設定項目があります。
この設定を行うと、ISPのDNSに問い合わせする前にこのローカルドメイン設定に記載したDNSサーバに問い合わせを行ってくれます。一見いいことずくめのように見えますがいくつか問題が。
IPv6に対応したDNSサーバを立てる必要がある
この設定画面、プライマリDNSとセカンダリDNSの欄にはIPv6のアドレスしか書くことができません。つまりDNSサーバにIPv6のアドレスを割り振ってやり、かつDNSサーバのソフトウェア的にもIPv6対応である必要があります。
まあできなくはないけど(一応ちゃんと動くことは確認した)、そうなると家庭内ネットワークにおけるIPv6設計をちゃんとしないとなぁという方向性になりますね。付け焼き刃でやると痛い目を見そう。
3.もう1台ルーターを使ってクライアントマシンを別セグメント化する
最終的に採用したのがこの対策法。ひかり電話ルーターが使い物にならないなら別のルーターを使えばいいじゃない!
幸いなことに、無線LANの親機としてルーター機能もあるAterm WG1800HPを使用していたので、こいつを利用することにしました。
NEC AtermWG1800HP(HPモデル) PA-WG1800HP
- 出版社/メーカー: NEC
- 発売日: 2013/04/30
- メディア: Personal Computers
- この商品を含むブログ (9件) を見る
構成としては、
(Flet's) - RV-440NE -[1]- Aterm WG1800HP -[2]- (Home Network)
みたいな感じです。[1]のセグメントと[2]のセグメントを分離して、IPv6が利用できるのは[1]のセグメントだけに限定するのがポイント。
Aterm WG1800HP側設定
まずはWAN側([1]のセグメント側)設定。
DHCPクライアント機能をオフにし、RV-440NEのLAN側IPアドレスで設定したのと同じセグメントにします。ゲートウェイおよびネームサーバはRV-440NEのLAN側IPアドレスに。
お次はLAN側([2]のセグメント側)設定です。
[1]のセグメントとは別のレンジで設定します。DHCPサーバは使用しない設定としています(DNSサーバにDHCPサーバを立てたのと、WG1800HPに「LAN側DNSサーバーアドレス」に相当する設定値が見当たらなかったため)。
さらに「IPv6ブリッジ」をオフにします。オンにすると[2]のセグメントにいるマシンにIPv6が振られてしまいますので、必ず切っておきましょう。
また、「その他の設定」画面にある「NAPT機能」をオフにしてWG1800HP側のIPマスカレード機能をオフにします。この設定をしないとRV-440NEとWG1800HPで2回もNAPTが行われるため、設定はめんどくさいわスループットは落ちるわで全く良いことがありません。
ここまで設定すれば[2]のセグメントにいるクライアントマシンにはIPv6アドレスが振られず、DNSの問い合わせもちゃんと内部DNSサーバへ行くようになり良かった良かった、と言いたいところなのですが、この構成ではUPnPがちゃんと動かないので一部のアプリでは支障がありそうです。なかなかうまくいかないもんですね。
本記事を書くにあたり下記の記事を参考にさせていただきました。この場を借りてお礼申し上げます。
修正履歴
- 2014/12/11:何が問題かわかりにくかったので箇条書きにして修正