我が家と実家は VPN で拠点間 LAN 接続されており、実家のサーバー及び Windows クライアントの管理から両親の IT サポートまで、様々な活動を支える重要なインフラとなっている。その VPN サーバーは VMware Server 2.0 上の仮想マシン (以下 VM) で、Debian GNU/Linux 5.0 (以下 lenny) で OpenVPN が稼動している。

一方の VPN ルーターは中古の旧 IBM 製ノート PC で、OS は Slax 5.1.8。この Slax は構築当時 (4年近く前) のラインナップ中最軽量の slax-frodo-5.1.8 をベースに、VPN 接続に特化してカスタマイズしたもので、CD-R から起動して自動的に VPN 接続し、何らかの理由で VPN が切断された場合は、速やかに再接続を試みる仕様。中古ノート PC のバッテリーは消耗の程度がわからないが、劣化が進んでいても簡易 UPS として使えるし、中古品故に爆弾を抱えている可能性もある (僅か数 GB の) HDD の存在は OS からはほとんど無視で、障害が発生しても放置できるようにしていた。

このように 「ほぼメンテナンス・フリー」 を実現した VPN ルーター機は、3年以上に渡って快調に稼動し続けていたが、先日突然 VPN の具合がおかしくなった。我が家の LAN 内から実家の VPN ルーターへの ping や traceroute は通るが、SSH 接続ができず、その背後に広がる実家の LAN に到達できない。実家サーバーへの SSH や Webmin もダメで、明らかに VPN ルーターから先にパケットが転送されていない状態だ。しばらく待っても状況は変わらないので、父に電話して確認してもらうと、VPN ルーター機の CD-ROM ドライブのトレイが吐き出されていて、押し込んでも通常のように 「カチッ」 とロックされず、すぐに飛び出してしまうと言うことだった。

何と、無敵と思われた VPN ルーター機の CD-ROM ドライブが壊れてしまっていたのだ。

電源障害やディスク障害に高い耐性を持たせた VPN ルーターも、CD-ROM ドライブが閉まらなくなるのは想定外。「VPN 接続は維持されているけど、パケットが転送されない」 と言う不振な挙動は、CD-R が突然イジェクトされてしまい、メモリ上に残ったプロセスが 「死んでたまるか!」 ともがき続けていた結果だろう。数年前に稼働中の本番サーバー上で root による渾身の rm -rf / を放ったとき、似たような現象を見たことがある。もちろん故意ではなく、シェル・スクリプトが find の結果を "-exec rm -rf {}" に投げる際に失敗した、不幸な事故だったが。

父に指示して、壊れた VPN ルーター機の CD-ROM ドライブのトレイをムリヤリ押さえ込んで再起動 (=電源ボタン長押しで切って、再度 ON) を敢行するも、"Invalid system disk..." で失敗。トレイをロックする機構が壊れただけではないのか、ドライブの存在自体が認識されていないようだ。

となれば修理するか、代替機を用意しなくてはいけない。壊れたのと同じ CD-ROM ドライブを探すのが最も低コストな方法だが、何分古い製品なので、都合よく見つかる保証はない。USB の外付け CD-ROM ドライブを入手しても、起動ドライブとして認識できるかどうかはわからないし、認識できなかった場合も両親に BIOS 設定をいじってもらうのは不可能なので、BIOS がそもそも対応していないのか、設定が悪いのか、ドライブの問題なのか、切り分けられない。

新たに中古ノート PC (なるべく \10,000 以内) を探す時間もなかったので、とりあえず実家のファイル・サーバー (CentOS 5.5 + Xen) 上に VPN ルーター役の VM を作り、暫定的な措置とすることにした。奇しくも先月実家サーバーにメモリを増設 (512MB → 2.5GB) したことで、数台の VM なら何とかなる環境ができていることは、まさに天佑。人知を超えた存在から下ったインスピレーションに違いない (まァ VM が作れなくても、Domain-0 自身にやらせればいいだけの話だが)。

さて方針は決まったものの、今回のトラブルで、その実家サーバーを操作するための経路が失われている。そこであらかじめ実家の Windows XP マシンに仕込んでおいた OpenVPN クライアントで我が家に VPN 接続させ、そのマシンに対して VNC でアクセス (Home Edition なのでリモート・デスクトップ接続不可)。実家の Windows XP から実家サーバーへ SSH 接続して作業を行った。

最も簡単なのは VM (Domain-U) を Domain-0 と同じ CentOS 5.5 で作成することだが、我が家の VPN サーバーや今回死んだ実家の VPN ルーターは、「単機能 (に近い) サーバーは極力軽く」 と言う方針で構築されている。この手の用途に CentOS は重過ぎるので、今回 VPN ルーターの代替機として作成する VM の OS には lenny を採用し、必要最低限のパッケージだけをインストールすることにした (この辺の手順は、また別の機会に)。

こうして新 VPN ルーターが完成し、我が家と実家間の VPN 接続も復旧した。しかし今まで VPN ルーター機を物理的に独立させていたのは、実家サーバーに何かあったときでも、我が家との VPN 接続を死守するため。トラブル発生時の砦となるべき存在が実家サーバー上で動いていては、本末転倒だ。この VM による措置はあくまでも急場凌ぎに過ぎないので、改めて物理的な代替手段を講じなくてはいけない。

Comments are closed.