Cisco IOS EEM で DDNS(MyDNS)を更新

はじめに

固定IP環境でない場合、VPN接続するためには、以下の2通りの対処法が考えられます。

  1. IPアドレスが払い出されたタイミングでメール通知する
  2. IPアドレスが払い出されたタイミングでDDNSを更新する

2番目の「IPアドレスが払い出されたタイミングでDDNSを更新する」を実現するために、EEM TCLを使用します。

単純なスクリプトのためアプレットでも実現可能ですが、今回はTCLを使用します。

2番目の方式の場合、SSL-VPN接続の際に証明書のサブジェクト名をIPアドレスにせずに済むため、証明書エラーが発生しないのが良い点だと思います。

環境

  • C841M-4X-JSEC/K9
  • EEM TCL
  • MyDNS

スクリプト作成

以下のファイルを作成します。

mydns_update.tcl

::cisco::eem::event_register_syslog pattern ".*: %LINEPROTO-5-UPDOWN: Line protocol on Interface Virtual-Access2, changed state to up"

namespace import ::cisco::eem::*
namespace import ::cisco::lib::*


if [catch {cli_open} result] {
    error $result $errorInfo
}
array set cli $result
if [catch {cli_exec $cli(fd) "enable"} result] {
    error $result $errorInfo
}
if [catch {cli_exec $cli(fd) "sh int dialer1 | include Internet address"} result] {
    error $result $errorInfo
}
action_syslog msg "$result"
if [catch {cli_exec $cli(fd) "more http://<userid>:<password>@www.mydns.jp/login.html"} result] {
    error $result $errorInfo
}
action_syslog msg "$result"
catch {cli_close $cli(fd) $cli(tty_id)}
  • <userid>:MyDNSのユーザID
  • <password>:MyDNSのパスワード

C841Mのアップロード先フォルダを作成し、TFTPでアップロードします。

# mkdir flash:tcl
# mkdir flash:tcl/policy
# tftp://<IPアドレス>/mydns_update.tcl flash:/tcl/policy

TCLをEEM登録します。

(config)# event manager directory user policy "flash:/tcl/policy"
(config)# event manager policy mydns_update.tcl type user

TCLファイルを修正した場合、EEM再登録が必要です。

(config)# no event manager policy mydns_update.tcl type user
(config)# event manager policy mydns_update.tcl type user

dialer 1の再起動を行いTCLの動作確認を行います。

%HA_EM-6-LOGのログを確認し、エラーが発生していないことを確認します。

(config)# int dialer 1
(config-if)# shut
(config-if)# no shut
(config-if)# do sh log

皆さんのDNS情報の生成期間は約一週間です。

https://www.mydns.jp/?MENU=030

とのことなので、CRONで定期的に更新する設定も入れておきましょう。

back