2009年2月3日の日記の2番目の記事へのコメント

ネットワークいじり

次に,ルータ機能とかをサーバから WR6670S に移す作業を開始しました.現状以下の図のようなネットワークなんで,今回のように T22 がダウンすると LAN の中のマシンは IP アドレスが取れないどころかパケットのルーティングすらしてもらえなくなるので完全に外に出られなくなっちゃいます.

元々のネットワーク構成

これを以下の図のように変更して,T22 が提供しているサービスの一部を WR6670S に移すことで,T22 が正常に動いている間は今までと同じように内外にサービスを提供しつつ,T22 が落ちてしまった場合でも LAN の中から外に出ることくらいはできるようにしておきたいという算段です.

変更後のネットワーク (予定)

とりあえず NAT などのルータとしての機能と DHCP を T22 から WR6670S に移して,Web サーバとかメールサーバとかの内外両方に向けたサービスは WR6670S から T22 にポートフォワーディングすればよさそう.問題は DNS の切り替えですが,これは WR6670S の DHCP で,各端末に対して「プライマリ DNS として T22 を直接参照し,セカンダリ DNS として ISP の DNS を参照する」ように通達すれば,各端末は以下の図のように T22 が生きている間は T22 に直接問い合わせを行い,T22 が死んだら ISP の DNS に直接問い合わせるようにできるかと.

DNSの切り替え案1

また,DNS に関しては,WR6670S の DNS フォワーディング機能を利用して,以下の図のように各端末は WR6670S を DNS として参照するようにして, WR6670S が普段は T22 に DNS のクエリを転送し,T22 が落ちたら外の ISP の DNS に転送するようにする方法も考えられます.

DNSの切り替え案2

というわけで,こんな計画で実際にやってみたんですが,色々な要因が重なってなかなか思うようには行きませんでした (´・ω・`).いかしょんぼりな話色々.

DNSまわりの設定がうまくキマらず混乱

T22 を LAN の中に押し込めて,代わりに WR6670S をルータのポジションに置いて DHCP を動かすところまではとても簡単だったわけですが,その先の DNS のところでひっかかりました.DNS フォワーディングを利用してクエリを T22 に転送させようと「接続先設定」の「ネームサーバ」の「サーバから割り当てられたアドレス」の「優先する」チェックを外して手入力で T22 の IP アドレスを設定したんですが,ルータに LAN 内のホスト名を問い合わせても全然解決できません (´・ω・`).・・・もしかして DNS フォワーディングは外側にしかできないとか? うーん.

そこで作戦を変更し,WR6670S の DHCP で,プライマリ DNS として T22 を利用するよう通達するようにしようと思ったのですが,DHCP で配る内容を細かく指定する方法がよくわからず・・・.「詳細設定」の「LAN側設定」で「ネームサーバ」の欄を埋めても端末に渡る情報は WR6670S が ISP から通知された ISP 側の DNS の IP アドレス. 何か間違えてるのかなぁ.

もう少し粘りたかったんですが,時間の都合もあって,ひとまず DHCP を T22 の方で動かすことにして,DNS として T22 を使うよう通知させるようにして妥協しました.T22 が落ちたら DHCP サーバがいなくなるからネットにつなげなくなります.すなわちこの時点で今回の変更による効果は骨抜きになってしまいました・・・.

いやでも今思えば T22 側でパケットキャプチャして問い合わせが来ているかくらい見るべきでしたな・・・.あと,ここまで書いて気づいたんですが,「接続先設定」の「プライマリDNS」や「LAN側設定」の「プライマリDNS」などにマウスを重ねると「WAN側のプライマリDNSのアドレス」とか「LAN側のプライマリDNSのアドレス」とか説明が出ますね.これだけだと何がどう使われるのかよくわかりませんが,ひょっとして 「LAN側設定」の「プライマリDNS」に T22 のアドレスを入れてやれば, DNS フォワーディングで T22 にクエリが飛んだりしたのかな・・・? くそー,試してみたいけど外からだと怖くていじれん (´・ω・`).もうちっと中でどの設定利用しているとか書いて欲しいなぁ,このページ

中からだとポートフォワーディングしてくれないのって何なの?

ひとまず今までと同じように外に出られることを確認し,外のホストからポートフォワーディングで T22 の 22 番や 80 番につながることは確認できたのですが,LAN の中の端末から WR6670S の外側の口の IP アドレスを指定して ssh や http で繋ごうとするとコネクションが切られてしまいます.T22 側でおかしな設定をしてしまっていたかなと思って Wireshark で確認してみたところ,何と WR6670S がコネクションを弾いてました・・・えー (;´Д`)

図にするとこんな感じ.

こういうアクセスは切られるらしい

これは・・・仕様なのか? 回避方法がないものかとググってみたらこんな情報を発見しました.別の製品のスレですが,この製品でも同じような挙動を示すようで,さらにそれが仕様みたいな結論に落ち着いてますな.本当に仕様なのかどうかはここからは判断つきませんが,Linux の iptables なら当然のようにできていたことだけに,もし仕様でできないとするとこれはとても残念な話.なぜ NEC のはこれができないのか (わざわざ切っているのか),背景や理由が気になります.ちなみにヒタヒタさんちのカッコいい舶来ルータはできるらしいです.いいなぁ.

まあ何にせよこれは何とかしないと色々まずいです.ノート PC を家の中で使う場合は SMTP サーバと POP3 サーバの設定を切り替えてねとか説明するだけでも面倒くさいので・・・.そこで LAN の中で garakuta.homelinux.org とかの WR6670S の外側の口のホスト名を引いた場合に,無理矢理内部で解決してローカル IP に置き換えることで対処することにしました.

相手が UNIX 系 OS だけなら NIS で流せばいいのかもしれませんが,LAN には Windows 機もいれば緩いゲーム機もいたりするわけで,個々の設定をいちいち見てられません・・・.となると,DNS で何とかするしかなさそう.要するに DNS のキャッシュ汚染でファーミングみたいなことを意図的にやりたいわけです.どうやればいいかなー.試しにヒタヒタさんに相談してみたところ「空っぽの A レコード用意すればいけるんじゃね?」的な回答が.おお,なるほどねー.というわけでやってみました.

まず named.conf に以下のエントリを追加.

zone "garakuta.homelinux.org" {
        notify no;
        type master;
        file "garakuta.zone";
};

で,garakuta.zone なるファイルを作って以下を記述.

@ IN SOA garakuta.homelinux.org. root.garakuta.homelinux.org. (
        2009020304
        10800
        3600
        604800
        86400 )
@               IN      NS      garakuta.homelinux.org.
@               IN      A       192.168.0.1

これで LAN の中で garakuta.homelinux.org を引くとローカル IP が取れるようになり,前述のポートフォワーディングの問題も回避できるようになりましたよ.まあでも中から外側の口の IP アドレスを直指定された場合は,これだと対処できませんが・・・.ていうかかなりイマイチだなこれ・・・.やっぱりこの仕様には納得がいかない・・・(;´Д`)

それWAN側って言わなくない?

元々 T22 では iptables であれこれルールを書いて変なパケットをフィルタしてたんですが,この辺もできるだけ移植することにしました.で,そのうちの1つの,外部から送信元がプライベートアドレスの変なパケットが来たら捨てるというルールを移植しようとして「192.168.0.0/16 から 任意のアドレスへのパケットが来たら弾く」というルールのフィルタを追加して WAN 側に設定したんですが,恐ろしいことにこれを反映させた途端 LAN の中のすべてのマシンから外にアクセスできなくなってしまいました orz

WR6670S のログを見ると,192.168.0.254 (LAN側の口につけたIPアドレス) から外のマシンへのアクセスが全て弾かれている・・・.これ WAN 側っていうのかぁ (;´Д`) ?どうも WAN 側という言葉の認識にずれがあるようで・・・.まあこの場合,任意の宛先のパケットにせずに,ルータの外側の口の IP アドレス宛のパケットにすればよいのかもしれませんが,なんだか急に萎えて解除して終わりにしちゃいました・・・

さらにダメ押し

ここのネットワークで利用している ISP (CATV) では DHCP が動いていて,ケーブルモデムの先の機器の MAC アドレスを見てそれに対応する固定の IP アドレスを割り振るようになっています.接続する機器の MAC アドレスは事前に申請しておく必要あり,申請のない MAC アドレスの機器がつながった場合は固定の保証がないグローバル IP が割り当てられます.そのため,今回のようにルータとなる機器を交換する場合は,外側の口の MAC アドレスを ISP に申請して DHCP のエントリを更新してもらう必要があります.

というわけで,家を出る前に WR6670S の MAC アドレスの登録申請をしておいたところ,割とすぐに対応して貰えたようで,実家に着いたときには登録作業が完了したとのメールが届いていました (携帯から GMail で確認).が,実際に WR6670S を繋いで IP アドレスを取ってみると今までのグローバルアドレスと全然違うアドレスが・・・.

とりあえず「今までと違うアドレスになっちゃったんですけど,これが新しい固定アドレスってことなんですか?」とすかさずメールを送るも全然音沙汰なし (;´Д`).「これが新しい固定IPアドレスです!」というのであれば,釈然としないものの DynDNS の登録や T22 の設定を直して回るんですけど,それすらわからないのが非常に辛い.メールを送ってから 3時間近く経っても返事がなかったので,催促のメールを書き始めたところで「設定間違えてたから直した」という返事が.あー.

が,取り直してみると,さっきと同じネットワークアドレスの別のIPアドレスが取れました.まるで直っていない・・・(;´Д`).再度「何かまだ違うんですけどー」とメール.また3時間とかまたされたら嫌だなぁと思ったら今度は15分くらいで「また間違えてて今度こそ直ったはず」という返事が.3度目の正直で,ようやく元の IP アドレスが取れるようになりました.はー.まあ,ミスは仕方ないですし,直すのが多少遅れるのも仕方ないとは思うんですが,もうすこし早く質問に答えて欲しかったなぁ・・・.というかよく考えたら結局質問には答えてもらえなかったし.またか.萎える.

まとめ

というわけで,結局以下のようなネットワークになってしまいました.T22 が死んでもネットワークは落ちずにそのまま使い続けられるような環境にするという目標は達成できず,しかも中からのサーバへのアクセス性が低下してしまったりしたわけで,機材を追加して散々苦労したのに何もよくならなかったという結末とかどうなのって感じ (´・ω・`).まあ,BIND のアレはまたどっかで役に立ちそうな感じだけどw

最終的にこうなってしまった

次行った時は,時間的余裕もあるはずなので,もう少しじっくり取り組んでみるかな・・・.DNS まわりはまだ試してないパターンとかあるし・・・.いやでもそれが直ってもポートフォワーディングの非常に残念なあれはそのままなんだよなぁ.そう考えると今日の苦労は授業料だったと思って WR6670S を単なる無線 LAN の AP に格下げしてルータにはさっさと別の機材を導入することを考えた方がいいような気も.・・・そういえば Zaurus 使ってないな.これに USB-Ether つけて SD からブートするようにしたりすれば結構いけたりするのかな・・・? ゴクリ・・・

お名前:  メールアドレス(省略可):
メールアドレスも表示されます
ここに名前その他を書いてはいけません: ここにメールアドレスその他を書いてはいけません:

2009年2月3日の日記の2番目の記事へのコメント

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2009年2月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ