実家のADSLが一時不通になった。
直接はIP電話が使用不能になって発覚。
母親と電話で遣り取りしながら確認した限りでは、どうも落雷による過電流のせいでADSLモデムが破損したらしい。プロバイダに問い合わせたところ、代品を送るとのこと。早い対応で助かった。これでとりあえずメインのデスクトップPCは使えるようになった。他は不通のままだがとりあえずPCが使えるのが最優先。
で、お盆休みで帰省して実機を直接確認したところ、驚いた。
■スイッチングハブ
■サーバ機(Omoikane.mythril.jp)も共に破損、ハブは動作不良、サーバは起動不能に陥っていた。落雷侮りがたし。
ハブは近くの家電量販店で手頃なものを購入、サーバ機はとりあえず諦めた。特に重要なデータは入っておらず、実家用のSPAMフィルタリングと、千葉(自宅)とのインターネットVPN程度にしか使っていなかったからだ。ただ、母親用にネットブックを1台買ったので、従来Omoikaneで持たせていた、無線LANアクセスポイント機能は何らかの方法で再実装させないといけない。
帰省前時点でサーバ機の起動不能はある程度予測できていたので、無線LANアクセスポイント機能も含め、手持ちのLaFoneraをDD-WRT化して1台実家に持って行けば当座は事足りると判断。DD-WRTにはサーバ機能が少なからず実装されているので、これを簡易サーバとして使うことにした。
1.DynamicDNS 実家用のドメイン「mythril.jp」のDynamicDNS運用のため。DD-WRTには各種DynamicDNSサービス対応クライアント機能が
実装されているのだが、ウチで使っているmydnsのリファレンスはなく、手動設定のカスタム設定でも上手くいかない。mydnsのIPアドレス更新はHTTPのBASIC認証「も」利用していることから、wgetをcronで定期実行させて対応。実行は従来どおり15分毎とした。
echo '*/15 * * * * root /usr/bin/wget -q -O - http:// [ユーザー名]:[パスワード]@ www.mydns.jp/login.html >/dev/null 2>&1' >> /tmp/crontab2.www.mythril.ne.jp への定期アクセス Heatbeatに相当。こちらも従来どおり5分毎実行で、httpログでmythril.jp側のグローバルIPアドレスを定期把握できるようにするため。
echo '*/5 * * * * root /usr/bin/wget -q -O - http://www.mythril.ne.jp/ >/dev/null 2>&1' >> /tmp/crontab3.ローカルDNS 流石にBINDまでは動いていないが、dnsmasqが動いているので、これを利用する。
echo 'IPアドレス ホスト名' >> /etc/hosts4.PPTPサーバ WebGUIからユーザー名とパスワード、サーバのIPアドレスとクライアントに配布するIPアドレス帯を指定、あとはサーバ機能を有効化するだけ。これだけはWebGUIで全て解決。
5.OpenVPN 今回の山場。
www.mythril.ne.jp に対するインターネットVPN。先にWebGUI上(何故かOpenVPN Client、だが)で事前共有鍵を貼り付け、登録しておく。WebGUIからの設定だけで開通させられそうにも思うのだが、事前共有鍵とtunデバイスを用いたレイヤ3VPNについてのリファレンスが見当たらず、実際WebGUIで試行錯誤したが上手くいかないので、相当に力技だが、起動スクリプトを活用して対応することに。順番的には、
起動時にコンフィグを流し込み
→一旦OpenVPNを終了
→10秒間待機
→流し込んだコンフィグで起動し直しとした。WebGUIでコンフィグの仕込みはできるのだが、実際には貼り付けた以外の余計な項目まで有効になってしまうので、一旦クリア→起動済みOpenVPN終了→流し込んだコンフィグで再度起動、として対応した。コンフィグはOmoikaneで使用していたものと同等だが、よい機会なので実家側のネットワークアドレスを192.168.0.0/24(従来は192.168.2.0/24)に変更してみた。
【起動スクリプト】
echo 'cd /tmp/openvpncl
dev tun
remote vpn.mythril.ne.jp
ifconfig 172.16.1.2 172.16.1.1
route 192.168.1.0 255.255.255.0 172.16.1.1
secret /tmp/openvpncl/client.key
port 5000
ping-restart 600
ping 60
comp-lzo
verb 1
mute 10' > /tmp/openvpncl/openvpn.conf
/bin/chmod 600 /tmp/openvpncl/client.key
/usr/bin/killall openvpn
/bin/sleep 10
/usr/sbin/openvpn --config /tmp/openvpncl/openvpn.conf --daemonまた、iptables側でもNATやIPマスカレード、5000/udpの開放が必要なので、ファイアーウォールスクリプトとして以下を登録した。
【ファイアウォールスクリプト】
/usr/sbin/iptables -A INPUT -i tun0 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i br0 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i tun0 -j ACCEPT
/usr/sbin/iptables -t nat -A POSTROUTING -o br0 -s 172.16.1.0/24 -j MASQUERADE
/usr/sbin/iptables -t nat -A POSTROUTING -o tun0 -s 192.168.0.0/24 -j MASQUERADE
/usr/sbin/iptables -I INPUT udp --dport 5000 -j ACCEPTあと、mythril.jp側で、
■ADSLモデムの静的ルーティング設定で、192.168.1.0/24へのゲートウェイとしてLaFonaraのIPアドレスを指定mythril.ne.jp 側で、
■受け側のgungnir.mythril.ne.jpのIPマスカレード設定を192.168.2.0/24→192.168.0.0/24に変更
■ADSLモデムの静的ルーティング設定で、192.168.0.0/24へのゲートウェイとしてgungnir.mythril.ne.jpを指定
■OpenVPNのコンフィグファイルのrouteエントリのネットワークアドレスを192.168.0.0に変更を仕込んで終了。これでDD-WRTを再起動、gungnir.mythril.ne.jpのiptablesとOpenVPNを再起動させ、無事にLAN間接続VPNが復旧した。先にPPTPサーバだけ有効にさせておいたので実家PCのリモートサポートは一応できていたが、OpenVPNでのLAN間接続の方が利便性その他諸々が格段に上である。
前述のとおり起動スクリプトを多用しており、かなり力技ではあるのだが、柔軟な設定ができるのはやはりLinuxベースの強みだなぁと改めて実感した。機器構成上、ストレージ領域は皆無(そりゃそうだ、
『ルータ』なんだから)で、サーバというよりは間違いなく「NW機器」。だが、フラッシュメモリ駆動でかつ単純構成なため、耐障害性は従来のOmoikaneよりも遥か上を行き、単純なネットワークサーバ機能としては同等。おまけに電力消費が極めて少ない。これに雷サージを付ければ無敵の簡易サーバではなかろうか。