• ベストアンサー

Linuxで作るルーターのフェイルセーフ法

LinuxPCにNICを2枚挿し、eth0からのパケットをあて先IPアドレスによってeth0(折り返し)・eth1(中継)となるようスタティックルートを設定しました。 ここでeth1側が回線障害(LANケーブル抜けなど)となった場合、全てのパケットをeth0に折り返すよう設定したいのですが、方法がわかりません。 (ダイナミックルートを使わずに、ethの状態を取得してrouteに反映することができれば・・・と思うのですが、やり方がわかりません) 良い解決方法をご存知の方、ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1です。若干アドホックな感じですが、 定期的にpingをして、結果によってコマンド(この場合ルーティング)を 変えてあげれば良いのではないでしょうか? (FreeBSD 4.10-RELEASEで確認しています。コマンド(pingとかrouteとか)の 引数を若干変える必要があるかもしれません。) |#! /bin/sh | |INTERVAL=10 |GATEWAY_MASTER=192.168.1.254 |GATEWAY_SLAVE=192.168.7.254 | |while : ; do | | ping -c 1 -t 3 ${GATEWAY_MASTER} >/dev/null 2>&1 | if [ $? = 0 ] | then | route change default ${GATEWAY_MASTER} | else | route change default ${GATEWAY_SLAVE} | fi | | sleep ${INTERVAL} |done

Nardi
質問者

お礼

ご返信遅れまして申し訳ありません。 ありがとうございます。こちらの環境で試してみます!

その他の回答 (1)

回答No.1

「eth0に折り返す」という表現がいまいち理解できていないので ご質問の意図に外れているかもしれません。 (Linuxでは)VRRP(ルータ冗長化プロトコル)を実装したVRRPdというフリーソフトがあります。 これを2台(以上)のLinuxルータにインストールし、 一方をマスタ、もう一方をスレーブとして動作させておくと、 普段はエイリアスのIPアドレスをマスタルータが持ち、マスタのNICの接続が落ちた時に スレーブルータがIPアドレスを取得するという動作をさせることが出来ます。 (各ノードは、ゲートウェイアドレスとして上記IPアドレス(のエイリアス)を指定しておきます。) 上記のようなルータ冗長化ではなく、ただ単にNICのUP/DOWN時に何かしたいと言う場合、 設定ファイルの記述によって該当のタイミングで特定のプログラムを実行することも出来ます。 VRRPdの正しい使い方とは違うのかもしれませんが、、、。

参考URL:
http://www.kawaz.jp/pukiwiki/?VRRP%A4%C7%A5%EB%A1%BC%A5%BF%A4%CE%BE%E9%C4%B9%B2%BD
Nardi
質問者

補足

"eth0に折り返す"の意図は、スタティックテーブルに従った結果、送出元のデバイスに送出することもある... という意味です。 Linux機が1台の場合でも、ご指摘いただいたVRRPを使用する方法が可能のようですが、スクリプトを記述するなどの手順も必要になるようです。 (経験と、時間がないため今回は難しいと考えています) 質問の趣旨が変わってしまうかもしれませんが、現在、ひとつ案を考えています。 NICを2枚挿している状態で、それぞれにスタティックルート設定。 片方のNICのDOWN時、そのNICに設定しているスタティックルートがルーチングテーブルから削除されれば、ロンゲストマッチで優先度を低く設定していたもう一方のNICを使用されると考えます。 (手動でネットワークデバイスを無効化すると、望みの動作が得られました) LANケーブルが抜けてもethが有効である事が不自然のように思い、ネットワーク・ないしデバイスの設定で解決できるのではないかと調べ直しているのですが、やはり監視daemon等を使用しなければならないのでしょうか。

関連するQ&A