GWの課題ということで、自宅のISP回線を冗長化しました。GMOの固定IPを契約した際にOCNを解約していなかったので、それを有効活用します。また、お仕事で「メインDCとDRサイト間でのISP冗長」ってのを提案しないといけない事もあり、その技術検証も兼ねてます。機器が足りないので縮小構成ですが・・
論理構成図
通常時はGMOの固定IPを利用し、GMO経由でインターネットへ接続できなくなった場合、OCNの非固定IP経由に切り替えます。
実際の所、物理構成的には1本のフレッツをマルチセッションで使っているので、全く冗長化されていません。さらにモデムの配下を二つに分解するSWとしてCisco892Jを利用しているので、Cisco892Jが死ぬと全てが終わります。。。。
「インターネットに接続できない」を具体化する
インターネットへ接続できないと一言で言っても、実際のNWでは色々な状態が考えられます。ISPの網内トラブル、ゲートウェイになっているFWが壊れた、デフォルトルートを広告している機器が壊れた等々。
今回の構成では「インターネットに接続できない」を「メインルータのデフォルトルートで8.8.8.8にPingが飛ばなくなった」とし、それをルータ自身で検知して経路を切り替えます。自分に設定されたデフォルトルートの到達性に責任を持ってもらう形です。
こうすると、コアSWがOSPFにデフォルトルートを広告しているような構成の場合に、ISP網内のインターネット接続性が死んでいる事をコアSWで検知して広告を止める⇒別DCのコアL3SWが広告するメトリックが高いデフォルトルートに切り替わる、みたいな事も出来ます。
IP SLA & Object Tracking
メイン回線のデフォルトルートが正常かどうかを調べる為に、IP SLAを利用を利用して、ルータのDialer1(GMOのPPPoEインターフェース)から10秒に1回icmp-echoを送信します。
ip sla 20
icmp-echo 8.8.8.8 source-interface Dialer1
frequency 10
ip sla schedule 20 life forever start-time now
Router#show ip sla summary
IPSLAs Latest Operation Summary
ID Type Destination Stats Return Last
(ms) Code Run
----------- ---------- --------------- ------ ---------- -----------------
*20 icmp-echo 8.8.8.8 RTT=8 OK 1 second ago
そして、8.8.8.8へのICMP-echoが通らなくなった事を検知するためにオブジェクトトラッキングを利用します。先ほど設定したIP SLAの到達性をトラッキングするよう設定し、それを依存したデフォルトルートを設定します。こうすると、Pingが通る時はルーティングが有効に、通らない場合はルーティングテーブルに乗らないようになります。
track 20 ip sla 20 reachability
ip route 0.0.0.0 0.0.0.0 Dialer1 track 20
Router#show track
Track 20
IP SLA 20 reachability
Reachability is Up
5 changes, last change 23:30:13
Latest operation return code: OK
Latest RTT (millisecs) 7
Tracked by:
STATIC-IP-ROUTING 0
Object Trackingの設定例:Configuring Enhanced Object Tracking
バックアップルートの設定
OCNに接続しているFortigateから、OSPFでデフォルトルートを広告します。こうする事で、Cisco892Jのルーティングテーブルは、通常時はAD値1のStaticが利用されてGMO経由に、StaticがObject Trackingで消えたあとはOSPFで受信しているAD値110のOCN経由に切り替わります。
ただし、このままだと、Dialer1がUpしている状態で8.8.8.8への到達性がなくなるような障害が発生した場合、デフォルトルートがフラッピングしそうな気がします。(8.8.8.8への到達性がなくなる⇒デフォルトルートがOCNに切り替わる⇒Dialer1からのPingがOCN経由のデフォルトに乗って到達する⇒GMOに切り替わる⇒8.8.8.8への到達性がなくなる(初めに戻る))。
そこで、8.8.8.8だけはいつでもGMO経由で抜けるように/32のホストルートを設定します。障害時に8.8.8.8が利用不可になりますが、使ってないのでOKということで。。。
ip route 8.8.8.8 255.255.255.255 Dialer1
動作確認
疑似的に障害を発生させるために、8.8.8.8をnull0に落とします。PPPoEをしゃべるIFのケーブルを抜いてもいいのですが、そうするとDialer1が落ちてデフォルトルートが消えてしまいます。PPPoEは生きてるけど網内が死んでる、つまりコアSWのネクストホップは生きてるけどその先が死んでる、という状況にも対応できるのがこの構成の良さなので、疑似的に8.8.8.8へPingが飛ばないようにします。
すると、IP SLAで設定したICMPが到達性を失い、それをオブジェクトトラッキングが検知します。そして、Staticのデフォルトルートが消失し、OSPFで受信した経路に切り替わります。
Router(config)#ip route 8.8.8.8 255.255.255.255 null 0
Router(config)#end
May 6 21:12:42.188 JST: %TRACKING-5-STATE: 20 ip sla 20 reachability Up->Down
Router#
Router#show ip sla summary
ID Type Destination Stats Return Last
(ms) Code Run
----------- ---------- --------------- ------ ---------- -----------------
*20 icmp-echo 8.8.8.8 - Timeout 8 seconds ago
Router#
Router#show ip route
Gateway of last resort is 192.168.4.200 to network 0.0.0.0
O*E2 0.0.0.0/0 [110/10] via 192.168.4.200, 00:00:15, Vlan4
障害を復旧させる為に、null0に落としていた8.8.8.8を正常に戻します。するとIP SLAで設定したICMPの到達性が復旧したことをオブジェクトトラッキングが検知し、Staticのデフォルトルートが復旧します。
Router(config)#no ip route 8.8.8.8 255.255.255.255 Null0
Router(config)#end
Router#
May 6 21:15:07.293 JST: %TRACKING-5-STATE: 20 ip sla 20 reachability Down->Up
Router#
Router#show ip sla summary
IPSLAs Latest Operation Summary
ID Type Destination Stats Return Last
(ms) Code Run
----------- ---------- --------------- ------ ---------- -----------------
*20 icmp-echo 8.8.8.8 RTT=8 OK 9 seconds ago
Router#
Router#show ip route
S* 0.0.0.0/0 is directly connected, Dialer1
今後の野望
IP SLA & Object Trackingでデフォルトルートを消すのは問題なく動きそうなので、エンタープライズにありがちな下記のような構成でもちゃんとISP冗長できることを確認したいです。動きそうな気はするのですが、検証するための機器が足りない・・・。