重村法克です。

        multiple routing tables ということで出てきました。散々調べたのに全然
        記録残してなかったとは…。 orz

On Tue, 02 Sep 2008 15:33:14 +0900
NAKAJI Hiroyuki 
<[&#x30E1;&#x30FC;&#x30EB;&#x30A2;&#x30C9;&#x30EC;&#x30B9;&#x4FDD;&#x8B77;]> 
wrote:
> というのを見つけました。カーネルを再構築してから setfib コマンドを使うと、
> 今回のような「同一destinationになるような別経路」の設定が可能になるそうで
> す。

        同一の destination になるような別経路というのは, 例えばディフォルトゲー
        トウェイを複数持てるみたいな使い方です(単一⇒複数のルーティングテーブル
        の導入)。マルチホーム運用したい場合の技ですね。setfib コマンドで実行され
        るコマンド(とその子供)がどのルーティングテーブルを使用するか指定できます。

>mpdでどうすればいいのかという議論もありました。
>http://lists.freebsd.org/pipermail/freebsd-net/2008-June/018624.html

        なお source はユニークである必要があるので, 中治さんの問題には対応でき
        ません(arp レベルでは全てのルーティングテーブルで共有される)。この例に
        出てる質問はまさにそこでひっかかってますね。解答は明後日の方向に向かっ
        てる気がしますが(^^;。

        mpd なら setfib -1 mpd; setfib -2 mpd みたいな実行の仕方で ng0, ng1
        で別々にディフォルトゲートウェイを設定することができます(どう使うかは議論
        の余地がありますが:-)。もっともここ罠があって, ng0 を経由した場合全ての
        パケットは経路1, ng1 だと全てのパケットは経路2を通るという意味ではありま
        せん:-)。あくまでもアプリケーション単位での設定となります(さらに正確に言
        うとソケット単位)。これは ng0, ng1 を経由で通信するアプリケーションが
        mpd の直系の子孫ではないからです(必ずしも…ですが)。

        例えば Apache 一個立ち上げて, インターフェース毎にマルチホームしたいよう
        な運用の場合 ipfw でインターフェース毎に fib (Forward Information
        Base)を指定する必要があります。さもなければ setfib -1 httpd -c conf1;
        setfib -2 httpd -c conf2 として Listen 等の設定を変えた複数の Apache
        を立ち上げる必要があります。

        ちなみに setsockopt(2) の SO_SETFIB オプションで, ソケット毎にルーテ
        ィングテーブルを指定できます。今のところ, そんな器用なアプリケーションは
        ありませんが。。

        以上よろしくお願いいたします。

メールによる返信