Cisco には「IP SLA」という機能があります。IP SLA の主要な目的はネットワークのパフォーマンスの測定であり、それを他の機能と連携することで、様々な挙動の制御に活用することができます。
よく使われるケースは IP SLA と Object Tracking を併用する設計です。これは、IP SLA を使用して定期的に特定の IP アドレスに Ping を送信し、その応答の有無により、Object Tracking を使用してスタティックルートを切り替える設計です。
通常、このような経路制御は BGP や OSPF 等のダイナミックルーティングを使用しますが、ダイナミックルーティングだけでは対処できないケースも稀に存在し、そのような場合の回避策として IP SLA + Object Tracking がよく使用されます。
また、私の経験としては、引き継がれた案件でダイナミックルーティングが必要なのにも関わらず、見積もりに必要なソフトウェアライセンスが含まれていなかったため、IP SLA + Object Tracking を使用して事なきを得たことがあります(笑)。もちろん、真面目にやるなら、適切に関係者に状況を説明してあるべきソフトウェアライセンスを購入するのが正しい進め方です。
IP SLA は、Ping (icmp-echo) 以外にもいくつかの選択肢があります。以下は実機のコマンド出力です。
Router(config)# ip sla 100
Router(config-ip-sla)# ?
IP SLAs entry configuration commands:
dhcp DHCP Operation
dns DNS Query Operation
ethernet Ethernet Operations
exit Exit Operation Configuration
ftp FTP Operation
http HTTP Operation
icmp-echo ICMP Echo Operation
icmp-jitter ICMP Jitter Operation
path-echo Path Discovered ICMP Echo Operation
path-jitter Path Discovered ICMP Jitter Operation
tcp-connect TCP Connect Operation
udp-echo UDP Echo Operation
udp-jitter UDP Jitter Operation
voip Voice Over IP Operation
Router(config-ip-sla)#
さて、ここから本題に入りたいと思います。
このブログは、自宅サーバーで運用しており、ダイナミックDNS (Value Domain) を使用してインターネットに公開しています。ダイナミック DNS の更新は、Linux サーバーのシェルスクリプトを使用していますが、Cisco ルーターにもう少し仕事をさせたいと思い調べていたところ、Cisco ルーター自体に DDNS 更新機能が存在することが分かりました。これは、インターフェイス設定内に存在する ip ddns
から始まるコマンドです。当初、これでいけると思い設定してみましたが、この機能は、おそらく DynDNS をベースに設計されているようで、私の環境では動作しませんでした。
そして、最終的に残ったアイデアが IP SLAです。最初に記載したコマンド出力結果から、IP SLA では HTTP が使用可能であることが分かります。これを使用することで、十分にダイナミック DNS 更新に使用できそうです。ダイナミック DNS は一般的に HTTP が使用され、指定された URL に必要なパラメータを付与した GET リクエスト を行うことで更新できます。Value Domain も同じ仕様です。
具体的な設定例は以下の通りです。
ip sla 100
http get http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=[my-domain-name]&p=[password]&h=[hostname] name-server [name server ip address]
frequency 1200
ip sla schedule 100 life forever start-time now
- ip sla 100: ip sla の Entry Number を 100 に設定します。
- http..: 指定した URL に対して GET リクエストを発行します。
name-server
で DNS リゾルバを指定可能です。ルーターの DNS 問い合わせを可能にするため、ip domain lookup の設定が必要です。一般的には明示的に無効にされている場合が多いので注意しましょう。URL と URL 内のパラメータは Value Domain で確認してください。 - frequency 1200: GET リクエストを行う間隔を 1200 秒(20 分)に設定します。
- ip sla schedule…: ip sla 100を有効にします。
ちなみに Cisco ルーターで ?
を入力するのにはちょっとしたコツがあります。ヒントは Ctrl + v
と VT100 です。私はこれで小一時間はまったので、分からない方はぜひ格闘してみてください(笑)。また、動作確認には以下のコマンドを使用します。基本的に Number of successes:
のカウントが増え、Number of failures:
のカウントは 0 が正常です。うまくいかない場合は DNS 関連の設定から確認した方が良いかもしれません。
Router# show ip sla statistics
Load for five secs: 0%/0%; one minute: 5%; five minutes: 2%
Time source is NTP, 00:10:15.021 JST Sat May 16 2015
IPSLAs Latest Operation Statistics
IPSLA operation id: 100
Latest RTT: 18 milliseconds
Latest operation start time: 00:09:48 JST Sat May 16 2015
Latest operation return code: OK
Latest DNS RTT: 3 ms
Latest TCP Connection RTT: 4 ms
Latest HTTP Transaction RTT: 11 ms
Number of successes: 1
Number of failures: 0
Operation time to live: Forever
Router#
ここで気をつけないといけないのは、Number of successes:
のカウントが増えているからといってダイナミック DNS が正常に更新されているとは限らないということです。IP SLA は、正常に GET リクエストができれば正常とみなします。このため、HTML の内容がエラーでも判別はできません。実際に更新されているかは Value Domain のサービス内で確認する必要があります。このあたりはシェルスクリプトの方が高機能に作成できますが、単なるダイナミック DNS の更新なのでこれで十分かもしれません。