Ab.の日記: ESXi 上に backup router 構築
基本的な線としてはこんな感じ。
- router 仮想マシンが死んだときに自動で切替わる必要は無い(おそらく物理ホストにトラブルだと思われるので道連れで死ぬため意味がない)
- リモートからのメンテナンスは考慮しない
- backup router が接続を行うのはメンテナンス時の一時的なものとする(外部提供サービスに影響が出ても構わない)
- 切り替えに際して client 側は internet への接続に関して設定を変更する必要は無い。切り替え時に一時的に接続が切れても構わない。
という事で実現方法を考えてみます。
- backup router は起動しても即 default router を置き換えることはしない
- 現状の router server の LAN 側アドレスを default gateway としているが、これを分離する。
- 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 と設定しています。
こういう事が簡単にできるのも仮想環境の強みですね。
ESXi 上に backup router 構築 More ログイン