ダイナミックDNS というと RFC 2136 で定められている 「Dynamic Updates in the Domain Name System (DNS UPDATE)」がまず思い浮かぶ。 自宅のバックアップ回線 (ADSL) 用として使っている無線LANルータ WN-G54/R2 は、 「アイ・オーが提供する無料ダイナミックDNSサービス iobb.net 対応」と 書いてあるので、 てっきり DNS UPDATE 方式なのだと思っていた。
ADSL 回線を、NTT東日本の フレッツ・ADSL から、 ウィルコムADSLサービス に切り替える (バックアップ回線なのでコスト最優先) にあたって、 以前使っていた ADSL モデムはアッカ回線に適合しないようなので、 素直にウィルコムのレンタルモデムを使うことにした。 ところが、このレンタルモデム「Aterm WD735GV」には、 ルータ機能もついている。
ウィルコム曰く、 「ウィルコムADSLサービスのレンタルモデムは、 あらかじめお客さまのログインIDとパスワード等が設定されています」、 ということだそうで、 ログインIDとパスワードは教えてもらえない。 教えてもらわないことにはレンタルモデム以外のルータを使えないのだが、 サポートに電話して教えてもらうのも面倒だったので、 このレンタルモデムの「クイック設定Web」の「接続先設定」画面にて、 ログインIDとパスワードを変更せずに「設定」ボタンを押してみたら、 パスワードが平文で POST されたので、 リクエストボディを観察するだけでパスワードを知ることができた。
レンタルモデム WD735GV の「PPPoEブリッジ」機能を使えば、 WD735GV を単なる ADSL モデムとして使うこともできるし、 実際まずは ADSL モデムだけ入れ替えて ルータは元の WN-G54/R2 のまま使っているのだが、 ADSL モデムにルータ機能があるのなら それを使いたくなるのが人情というものであろう。 機器の数を減らせばそれだけ故障する確率も減らすことができる。
しかし、PPPoE 接続を WD735GV に行なわせると、 WN-G54/R2 のダイナミックDNS 機能が利用できなくなってしまう。 iobb.net 以外のダイナミックDNSサービスに乗り換えれば済む話なのであるが、 せっかく iobb.net に対応した機器を使っているのに iobb.net を使わないのは モッタイナイと思ってしまったので、 とりあえず iobb.net に対して RFC 2136 で定められている DNS UPDATE パケットを 飛ばしてみた... が何の反応もない。
無闇矢鱈にテストパケットを飛ばしていては怒られそう (^^;) なので、 ADSLモデム (つまり Aterm WD735GV) と無線LANルータ (WN-G54/R2) との間に Linux ブリッジをはさんで iobb.net への通信 (つまり PPPoE セッション) を tcpdump でダンプしてみた。 すると...
# brctl addbr br0 # brctl addif br0 eth0 # brctl addif br0 eth2 # ifconfig br0 up # ifconfig eth0 up # ifconfig eth2 up # tcpdump -i br0 -s 1500 -vvv -X tcpdump: WARNING: br0: no IPv4 address assigned tcpdump: listening on br0, link-type EN10MB (Ethernet), capture size 1500 bytes ... 17:13:20.954864 PPPoE [ses 0x1e10] IP (tos 0x0, ttl 150, id 2, offset 0, flags [none], length: 228) 60.38.65.147.31602 > XXX.XXX.XXX.XXX.http: . [tcp sum ok] 1:189(188) ack 1 win 5656 0x0000: 1100 1e10 00e6 0021 4500 00e4 0002 0000 .......!E....... 0x0010: 9606 b91e 3c26 4193 XXXX XXXX 7b72 0050 ....<&A.XXXX{r.P 0x0020: 0361 fb73 903f 4510 5010 1618 0ce3 0000 .a.s.?E.P....... 0x0030: 4745 5420 2f63 6769 2d62 696e 2fXX XXXX GET./cgi-bin/XXX 0x0040: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXXXXXXXXXXXXXX 0x0050: XXXX XXXX 2e63 6769 3f68 6f73 743d 6763 XXXX.cgi?host=gc 0x0060: 642e 696f 6262 2e6e 6574 266d 7969 703d d.iobb.net&myip= 0x0070: 3630 2e33 382e 3635 2e31 3437 2048 5454 60.38.65.147.HTT 0x0080: 502f 312e 300d 0a48 6f73 743a 20XX XXXX P/1.0..Host:.XXX 0x0090: XXXX XX2e 696f 6262 2e6e 6574 0d0a 5573 XXX.iobb.net..Us 0x00a0: 6572 2d41 6765 6e74 3a20 574e 4735 3452 er-Agent:.WNG54R 0x00b0: 322f 312e 320d 0a41 7574 686f 7269 7a61 2/1.2..Authoriza 0x00c0: 7469 6f6e 3a20 4261 7369 6320 XXXX XXXX tion:.Basic.XXXX 0x00d0: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXXXXXXXXXXXXXX 0x00e0: XXXX XXXX XXXX XXXX 0d0a 0d0a XXXXXXXX....
何のことはない、IP アドレスを登録するための Web ページを アクセスしているだけだった。 登録するホスト名と IP アドレスを、 それぞれ「host=」「myip=」パラメータで CGI へ渡し、 認証は Basic 認証を使っている (上記ダンプ中、URL の一部および認証文字列は伏せ字にした)。
したがって curl コマンドなどを使って、 ダイナミックDNSサービスに ホスト名と IP アドレスを登録することができる。
curl --interface eth0:1 --user-agent 'WNG54R2/1.2' --user 'XXXXXXXXXXXX:XXXXXXXX' 'http://XXXXXX.iobb.net/cgi-bin/XXXXXXXXXXXXXXXXXXXXXXX.cgi?host=gcd.iobb.net&myip=60.38.65.147'