フィーチャーフォン向けの Web ページで A レコードを切り替えたときの挙動

A レコードを切り替えたときの、携帯キャリアのゲートウェイの挙動について、具体的なデータを出しているものが見当たらなかったので調べてみました。
観測された事象についてのみを扱い、この結果からどうのこうのは取り合えず置いておきます。

概要

事前調査

ロードバランサーにて以下を叩く。

tcpdump -n -i eth0 -s0 -A '(tcp port http or tcp port https) and (host x.x.x.x1 or host x.x.x.x0) and (net x.x.x.x/20 or net x.x.x.x/25 or ... or net x.x.x.x/25)' | grep 'Host:'

切り替え対象とは別のドメインへ、トラフィックが来ていないかのチェック。
お尻にうねうね連なっているのはフィーチャーフォンゲートウェイの IP アドレスです。

トラフィックの取得

ロードバランサーにて以下を叩く。

tcpdump -n -i eth0 -s0 -w example-`date +%H%M%S`.pcap  '(tcp port http or tcp port https) and (host x.x.x.x1 or host x.x.x.x0) and (net x.x.x.x/20 or net x.x.x.x/25 or ... or net x.x.x.x/25)'

tcpdumpフィーチャーフォンゲートウェイからのトラフィックを保存する。フィルタルールは先ほどと同一。

切り替わった時刻の確認

その辺のホストで以下のテキトーなコマンドを流しておいて、コンテンツサーバで A レコードが書き換わった正確な時刻を記録しておきました。

watch --interval=10 'dig a www.example.com @ns1.example.com | tee -a dig.txt'

切り替わったタイミングのみを切り出すと以下のような感じに。

halfrack@halfrack> sed 'himitsu' dig-0213-edit.txt
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.2 <<>> a www.example.com @ns0.example.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65211
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.example.com.              IN      A

;; ANSWER SECTION:
www.example.com.       600     IN      A       x.x.x.x1

;; Query time: 13 msec
;; SERVER: x.x.x.x#53(x.x.x.x)
;; WHEN: Mon Feb 13 13:22:31 2012
;; MSG SIZE  rcvd: 50


; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.2 <<>> a www.example.com @ns0.example.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48085
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.example.com.              IN      A

;; ANSWER SECTION:
www.example.com.       600     IN      A       x.x.x.x0

;; Query time: 13 msec
;; SERVER: x.x.x.x#53(x.x.x.x)
;; WHEN: Mon Feb 13 13:22:41 2012
;; MSG SIZE  rcvd: 50
halfrack@halfrack> 

結果

wireshark に食わせて pps のグラフを描いてみました。

4047s - 4057s にかけて、コンテンツサーバが新しい A レコードを返し始めました。しかし、 4657s 以降も赤色の線で示される古い A レコードが指していた IP アドレスへアクセスが続きます。 TTL + 1時間ぐらいですかね。

なお、青いグラフはあるキャリアの IP アドレスでフィルタをかけた場合のグラフです。このように、正しく 600秒でトラフィックが抜けるキャリアもあることを付け加えておきます。

お決まり文句

この日記は個人の見解であり、所属する各組織の公式見解ではありません。誰がやっても同じような結果が出るはずですし。