+-------+ +-------+
| ISP A | | ISP B |
+---+---+ +---+---+
(a) | (b) |
| |
| (c) | (d)
+-+------------+-+
| server |
+-------+--------+
(a)192.168.1.1
(b)192.168.2.1
(c)192.168.1.2
(d)192.168.2.2
こんな構成だとしたら、先ずserverや自ネットワークから外へアクセスする場合メインに使うISPを決めます。
ここではISP Aとすると、defalutrouteは192.168.1.1に設定します。そうすると黙っていてもISP Bからは勝手に(d)へパケットは入ってきますが
defalutrouteがISP Aなので返事をdefalutrouteへしてしまうと大抵の場合はISP Aは変なソースアドレスからパケットが飛んできたつうことでフィルタされれて通信が成立できません。
で、ipfwでこんなルールを書きます。ipfw add 100 fwd 192.168.2.1 all from 192.168.2.2 to not 192.168.1.0/24 out
勝手に/24と仮定していますが、適切にネットマスクを指定してください。 これで、ISP Bのアドレスから出るパケットはISP Bのルータへ行き、その他はローカルネットワークじゃなければ全部ISP Aへ行きます。
ところで、例ではNICを2枚使ってますが(c)(d)は1枚のNICでも実現できます。
ifconfig fxp0 192.168.1.2 netmask 255.255.255.0
ifconfig fxp0 alias 192.168.2.2 netmask 255.255.255.255
みたいな感じ。この場合はそれぞれのISPへのルータでも違うISPのIPアドレスが出て行かないようフィルタするのが人道的です。
FAQ
Q:どちらかのISPが死んだときでもどこからでも外部からserverへ到達できるようにしたい。
A:この方法では出来ません。ASを取得してBGPで両方のISPからルーティングしてもらうか、DNSでserverのIPアドレスを生きてるISPだけに変更して到達できるようにするしかありません(当然事前にTTLを短くしておかないと意味がありません)。
Q:syslogにarp なんちゃらつうメッセージが出てうるさいのですが
A:気にしないのが一番ですが、気になるなら freebsd-net-jpでjippg arpと検索してカーネルへのパッチの当て方を調べてみましょう。
Q:こんなことしなくてもどちらのISPのアドレスへも外部から通信できるのですが。
A:それはdefalutrouteなISPが寛大でソースアドレスが自分のCIDRブロックで無くともフィルタしていないからです。たまにこういうISPも存在します。ラッキーですね。
Apacheより安定な気がするけど、使っているとこ少なくなったな。
極秘 :-) に入手した情報によると
NCSA 1.6 beta 1 が出たみたい。
単独でSSLを備える優れものだけど、US. RESIDENTでないとGETできないのが悲しい (TT)。
で、これでは同名のアカウントがあったときに困るのでルールセット0の 頭のへんにこんなのを入れる。 なければ、これで良しとする。
で、/etc/virtmapsにメールアドレスとユーザー名の対応表を書く。Kvirtmaps hash /etc/virtmaps ################################# # Ruleset 0 - Resolve address # ################################# S0 R<@> $#local$:<> Null address is local # start of virtual host/users support R$+ < @ $+ . > $: $1 < @ $2> . R$+ < @ $+ > $* $: $(virtmaps $1@$2 $: $1 < @ $2 > $3 $) R$+ < @ $+ > $* $: $(virtmaps $2 $: $1 < @ $2 > $3 $) R$+ < @ $+ > $* $: $1 < @ $(virtmaps @ $2 $: $2 $) > $3 R$+ < @ $+ @ $+ > $* $: $2 < @ $3 > $4 R$+ < @ $+ > . $: $1 < @ $2 . > R$+ @ $+ $: $1 < @ $2 > R$+ < < @ $+ > > $: $1 < @ $2 > # end of virtual host/users support R$+<@$=w> $@$>90$1 Remove local addresses
んでもって、 makemaps hash /etc/virtmaps.db < /etc/virtmaps でテーブルを作っておわり。 良い子のみなさんはまねせずに、CFをつかってね。webmaster@fogefoge.co.jp taro webmaster@domain.gr.jp hanako inchiki@slow.ne.jp jiro@club.gr.jp