パスワードを忘れた? アカウント作成
294493 journal

Ab.の日記: ESXi 上に backup router 構築

日記 by Ab.
以前の日記で思いついたので、backup router を構築してみました。
基本的な線としてはこんな感じ。
  1. router 仮想マシンが死んだときに自動で切替わる必要は無い(おそらく物理ホストにトラブルだと思われるので道連れで死ぬため意味がない)
  2. リモートからのメンテナンスは考慮しない
  3. backup router が接続を行うのはメンテナンス時の一時的なものとする(外部提供サービスに影響が出ても構わない)
  4. 切り替えに際して client 側は internet への接続に関して設定を変更する必要は無い。切り替え時に一時的に接続が切れても構わない。

という事で実現方法を考えてみます。

  1. backup router は起動しても即 default router を置き換えることはしない
  2. 現状の router server の LAN 側アドレスを default gateway としているが、これを分離する。
  3. backup router に切り替えるときに、main router は LAN 側 gateway address を解放し、backup router がそのアドレスを取り、pppoe を行い、internet への routing を代行する。これは main router 側でスクリプトの実行を一回、backup router 側でスクリプトの実行を一回、行うことで揮発的に設定される(リブート後まで設定は保持されない)

まぁこんな感じで書いてみたスクリプトがこんな感じです。
まずは main router 側(FreeBSD 7.3/amd64)

#!/bin/sh

export LANG=
. /etc/rc.conf

if [ X"$1" = X"-recover" ]; then
    if ! /usr/local/etc/rc.d/mpd5 status ; then
        route delete 0.0.0.0/0 backup-gw
    fi
    /etc/rc.d/netif restart $_a00_lan_if
    /usr/local/etc/rc.d/mpd5 start
    sleep 2
    ifconfig ng0
    /etc/rc.d/pf resync
    exit
fi

/usr/local/etc/rc.d/mpd5 forcestop
ifconfig $_a00_gateway_if inet -alias $_a00_gateway_addr netmask 255.255.255.255
ifconfig $_a00_gateway_if
route add 0.0.0.0/0 backup-gw
/etc/rc.d/pf resync

そして backup router 側(FreeBSD 8.1/i386)

#!/bin/sh

export LANG=
. /etc/rc.conf

if [ X"$1" = X"-recover" ]; then
    /usr/local/etc/rc.d/mpd5 forcestop
    ifconfig $_a00_gw_if inet -alias gateway-host
    ifconfig $_a00_gw_if
    route add 0.0.0.0/0 gateway-host
    exit
fi

if ! /usr/local/etc/rc.d/mpd5 forcestatus ; then
    route delete 0.0.0.0/0 gateway-host
fi
ifconfig $_a00_gw_if inet alias gateway-host 255.255.255.255
/usr/local/etc/rc.d/mpd5 forcestart
ifconfig $_a00_gw_if
sleep 2
ifconfig ng0

少しだけトリックがあって、セキュリティ上の理由で main router が自発的に LAN 側に出ることを厳しく制限しているため、backup router が dialup しているときも、main router が外に出るには LAN 側を通さないようにしています。
どうやっているかというと、 ESXi 上で物理実態のない仮想ネットワークを作り、そこに接続された仮想インターフェースを両方に割り当て、backup router が internet に接続しているときは、main router はその仮想インターフェースで繋がっている backup router のアドレスを default gateway と設定しています。
こういう事が簡単にできるのも仮想環境の強みですね。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

ソースを見ろ -- ある4桁UID

読み込み中...