FTPを使って1812jからMyDNSを更新する

最近独自ドメインを取得し直したんですが、
それに合わせてDDNSサービスをDynDNSからMyDNSに変更してみました。

HTTP-BASICで更新ができなかった

1812jからIPを更新をしてる記事もいくつか見つかったので楽勝だと思ってたら問題が発生しました。

最初に設定してたのは以下のようなコンフィグ。

ip ddns update method mydns
 HTTP
  add http://mydnsid:password@www.mydns.jp/login.html
 interval maximum 7 0 0 0

int Di0
 ip ddns update hostname hoge.net
 ip ddns update mydns

debug ip ddnsしてデバッグを有効にしたあと
上のコンフィグで実際に動かしてsh loggingしてみると、
エラーページが取得されており正しく動いていませんでした。

動かない原因

実はまだよくわかってないです。
kdnsでの設定の話になりますが、
バージョンによってddns updateが動かない場合があるようなので、
それかな?と勝手に思っています。

ちなみにうちの1812jのバージョンは12.4(11)T、DRAM/Flashがそれぞれ128MB/32MBです。
バージョンアップしようとしたら、12.4(20)T以上は256MB/64MBが必要でできませんでした……。

とりあえず解決策

MyDNSはHTTP-BASIC以外にもPOPとFTPに対応してるとのことでした。
なので1812jで使えるFTPとEEMを使ってIPの更新を試みます。

EEMはEmbedded Event Managerの略で、
いろんなイベントをトリガとしてコマンドの実行などができる仕組みです。
今回はタイマーをイベントとすることで日曜AM3時に実行しています。

applet名やcronのエントリー名、MyDNSのユーザ/パスワードは適当に変更してください。
syslogへの出力はお好みで。

event manager applet ddns
 event timer cron name ddns-batch cron-entry "0 3 * * 0"
 action 1.0 syslog msg "# DDNS Update Begin"
 action 2.0 cli command "enable"
 action 3.0 cli command "copy ftp://mydnsid:password@www.mydns.jp/login.html null:"
 action 4.0 cli command "exit"
 action 5.0 syslog msg "# DDNS Update End"

デバッグログを見てみるとFTPのエラーが出てると思いますが
自分の環境ではこれで更新に成功しました。

まとめ

とりあえず汚い方法ですが動かすことができました。
IOSのバージョンをいろいろいじれるようHW性能を上げたいです。
まあ早く固定IPにしろって話なんですが。

1812jでdyndnsを使ったDDNSの設定

最近ネットワークいじりたい欲が強いのでまたciscoネタ。
設定項目は少ないのでらくちんです。

DDNSの設定

DDNSの更新方法を指定します。
dyndnsのところは名前を適宜変更すること。
usernamepasswordにはそれぞれdyndnsのユーザ名・パスワード名を入れます。
<h>と<a>はホスト名とIPアドレスプレースホルダです。
ちなみに、URL中の?は^vでエスケープできます。

(config)#ip ddns update method dyndns
(DDNS-update-method)#HTTP
(DDNS-HTTP)#add http://username:password@members.dyndns.org/nic/update?system=dyndns&hostname=<h>&myip=<a>
(DDNS-HTTP)#exit
(DDNS-update-method)#interval maximum 7 0 0 0

インターフェースへの適用

自分の環境ではPPPoEを使っているため、Di0が外向けのインターフェースです。
そこに先ほど設定したDDNSの更新方法を適用します。
ホスト名のhoge.dyndns.infoはdyndnsで取得したホスト名を入れてください。

(config)#int Di0
(config-if)#ip ddns update hostname hoge.dyndns.info
(config-if)#ip ddns update dyndns

適用されてるか確認

reloadした後、dyndnsのhostページで更新されてることを確認すれば完了。
ちょっと反映に時間がかかりました。

まとめ

これで外からでもVPNしやすくなりますな!
目下の課題は、VPN中にLAN内のDNSサーバが優先されてなさそうってことと、VPNクライアントから1812jに入れないこと。
とりあえず飽きるまでいじります。

1812jでVPNを構築してみた

ネットワークの勉強のために、前からやろうと思って放置してたVPNの構築をやります。
調べつつ書いてるので、間違いがあればご指摘いただけると嬉しいです。

概要

以下のように、iPhoneとかthinkpadからLANにつなぎたいわけですな。

やること

  • AAA(認証、許可、アカウンティング)の設定
  • IKEポリシーの設定
  • VPNクライアントグループの設定
  • VPNクライアントグループとAAAの紐づけ
  • トランスフォームセットの設定
  • ダイナミックマップの設定
  • 暗号マップの設定
  • 暗号マップを外部インターフェースに適用
  • DHCPプールの設定
  • VPN Clientからつなぐ

AAA(認証、許可、アカウンティング)の設定

ローカルで認証するようにします。
userauthgroupauthの部分は適当に名前を付けてください。
aaa new-modelにする前にはコンフィグを保存したほうがよさそう

(config)# aaa new-model
(config)# aaa authentication login userauth local
(config)# aaa authorization network groupauth local

IKEポリシーの設定

ここでVPNの暗号方式や認証方式を設定。
policy 1は優先度が一番高いポリシーです。
Diffie-Hellman鍵共有グループの暗号強度は5(1536bit)がもっとも高いようですが、負荷を考えて2(1024bit)を選択する場合が多いみたいです。

(config)# crypto isakmp policy 1
(config-isakmp)#encr 3des
(config-isakmp)#auth pre-share
(config-isakmp)#group 2

VPNクライアントグループの設定

ログイングループ名(vpnclient)や事前共有キー(hogehoge)、IPアドレスプールなどはここで指定します。
今回はスプリットトンネリングを使用するのでACLを指定しています。

(config)#crypto isakmp client config group vpnclient
(config-isakmp-group)#key hogehoge
(config-isakmp-group)#save-password
(config-isakmp-group)#acl 100
(config-isakmp-group)#pool ezvpn-pool
(config-isakmp-group)#dns 192.168.1.254 192.168.1.1
(config-isakmp-group)#exit
(config)# access-list 100 permit ip 192.168.1.0 0.0.0.255 any

VPNクライアントグループとAAAの紐づけ

vpnclientuserauthgroupauthは設定した内容に変更してください。

(config)#crypto isakmp profile vpnclient-profile
(conf-isa-prof)#match identity group vpnclient
(conf-isa-prof)#client authentication list userauth
(conf-isa-prof)#isakmp authorization list groupauth
(conf-isa-prof)#client conf address respond

トランスフォームセットの設定

トランスフォームセット名(vpnset)は適宜変更してください。

(config)#crypto ipsec transform-set vpnset esp-3des esp-sha-hmac

ダイナミックマップの設定

vpnsetvpnclient-profileは設定に合わせて変更してください。
reverse-routeをしているすると、VPNクライアントへのスタティックルートが自動で登録されるようです。

(config)#crypto dynamic-map dynmap 1
(config-crypto-map)#set transform-set vpnset
(config-crypto-map)#set isakmp-profile vpnclient-profile
(config-crypto-map)#reverse-route

暗号マップの設定

ezvpnmapdynmapは適宜変更してください。

(config)#crypto map ezvpnmap 1 ipsec-isakmp dynamic dynmap

暗号マップを外部インターフェースに適用

自分の環境ではDi0でPPPoEを利用しているので、そこに暗号マップを適用します。
Di0をFa0にオーバーロードしてるので、Fa0に適用しても同じはず。

(config)#int di0
(config-if)#crypto map ezvpnmap

DHCPプールの設定

VPNクライアントに割り振るIPアドレスを設定。

(config)#ip local pool ezvpn-pool 192.168.1.50 192.168.1.99

VPN Clientからつなぐ

WindowsではCiscoのメンバーページからダウンロードが必要だったと思いますが、macだとVPNクライアントが最初から入っています。
ネットワーク環境設定を開き、インターフェースをVPNVPNタイプをCisco IPSecでサービスの追加を行います。

あとは、上記で設定したアカウント名やパスワード、サーバアドレスのほかに、認証設定で共有シークレットとグループ名も忘れず入力してください。

まとめ

以上でおしまい。長かった!
設定項目が多いから、全部理解して設定するのは難しそうだ。。。