UCOM光が導入されているマンションに住んでいるので UCOM光電話を使っている。 UCOM から貸与された VoIP (Voice Over IP, IP 電話) アダプタは、 グローバル IP アドレスが必要と説明書にあった。 UCOM光で各戸に割当てられるグローバル IP アドレスは 5個しかないのに、 うち 1個を VoIP アダプタごときに専有されるなんてトンデモナイ。 なんとか VoIP アダプタを、 次図のように LAN 内に設置することはできないか?
宅内 ←:→ UCOM : : LAN ┌─────┐ DMZ : : │NAT 機能付│ : : ───┬────┬──┤ルータ ├──┬───────┬────→ インター │ │ └─────┘ │ : │ : ネット ┌──┴─┐┌─┴─┐ : ┌─┴─┐ : ┌─┴─┐ : │ VoIP ││ PC等 │ : │公開 │ : │SIP │ : │アダプタ│└───┘ : │サーバ│ : │Proxy │ : └────┘ : └───┘ : └───┘ : : プライベート IP アドレス : グローバル IP アドレス
SIP (Session Initiation Protocol, VoIP で使われるプロトコル) は NAT と相性が悪いとはよく言われるが、 それは UA (User Agent) 同士が直接通話する場合の話。 SIP Proxy 経由で通話する場合であれば、 端末 (VoIP アダプタ等) は特定の SIP Proxy に接続すれば事足りるので、 端末が NAT の内側 (つまり LAN 内) でも何の問題もない。 だから VoIP アダプタにグローバル IP アドレスが必要と言われても納得しかねる。
私の場合、 VoIP アダプタとして Aterm BH812V (UZ) を貸与された。 このアダプタに、 フツーの (アナログ) 電話機をつなぐとフツーの (050 な電話番号ではなくフツーの市外局番な番号の) 固定電話として使える。 BH812V は VoIP アダプタなのに VoIP 関連の設定項目が全く無く、 ましてプライベート IP アドレスで使うための設定方法など望むべくもない。 仕方がないのでとりあえずそのまま BH812V を LAN につないでみた。 上図中 「NAT 機能付ルータ」 は実際は Linux マシンで、 このマシン上で DHCP (Dynamic Host Configuration Protocol) サーバを走らせている。 つまり、 この DHCP サーバから BH812V に対してプライベート IP アドレスが割当てられる。
BH812V の筐体には、 「ステータス」 「電話サービス」 「電話1」 「電話2」 「インターネット」 と書かれた 5 つのランプがあり、 正常な定常状態では全て緑色に点灯する。 ところが、 BH812V を LAN につないで電源を入れると、 「ステータス」 が橙点滅、 「インターネット」 が橙点灯したままになり、 「電話サービス」 他のランプは消灯したままになってしまった。 もちろん、 BH812V につないだ電話機は使用不能。 BH812V のログはこんな感じ:
2013/03/29 00:39:15 NAT GET 192.168.10.130 (IP-PORT=1) 2013/03/29 00:39:15 WAN Port is UP for Local Router mode 2013/03/29 00:39:15 WAN Connect request from 192.168.19.1 for Local Router mode 2013/03/29 00:39:15 DHCP_Client IP ADDRESS Get 192.168.10.130 (IP-PORT=1)
プライベート IP アドレス 192.168.10.130 が配布されたことは分かるが、 SIP 関連のエラーは全く出力されていないので、 このログではなぜ電話機が使えないか何も分からない (>_<)
ちなみに、 BH812V にグローバル IP アドレス 122.218.XX.XX を割当てて正常に動作したときのログはこんな感じ:
2013/03/29 00:51:09 NAT GET 122.218.XX.XX (IP-PORT=1) 2013/03/29 00:51:09 WAN Port is UP for Local Router mode 2013/03/29 00:51:09 WAN Connect request from 192.168.19.1 for Local Router mode 2013/03/29 00:51:09 DHCP_Client IP ADDRESS Get 122.218.XX.XXX (IP-PORT=1)
電話が使えない異常状態と、正常状態とで、 ログが (割当てられた IP アドレス以外は) 全く同じというのはいかがなものか。
そこで、 BH812V にグローバル IP アドレスを割当てたときと、 プライベート IP アドレスを割当てたときとで、 どのような挙動の違いがあるか調べてみる。 まず UCOM DHCP サーバから グローバル IP アドレスを割当てるとき、 BH812V と UCOM との間でどのような通信が行なわれるか? BH812V と UCOM との間にブリッジ (という名の Linux マシン) を挟んで、 どのようなパケットがやりとりされているか tcpdump (ネットワークを流れるパケットを表示するツール) で調べてみる。
┌────┐ ┌─────┐ 宅内 ←:→ UCOM │ VoIP ├──┤ブリッジ ├──┐ : │アダプタ│ └─────┘ │ : : └────┘ ┌─────┐ │ : : │NAT 機能付│ │ : : ────────┬──┤ルータ ├──┼───────┬────→ インター │ └─────┘ │ : │ : ネット ┌─┴─┐ ┌─┴─┐ : ┌─┴─┐ : │ PC等 │ │公開 │ : │SIP │ : └───┘ │サーバ│ : │Proxy │ : └───┘ : └───┘ :
上図のように 「VoIP アダプタ」 (BH812V) を LAN から (ブリッジを介した) DMZ へつなぎ替えたわけだが、 このようなネットワーク構成の変更が、 物理的な配線変更を行なわずにできるのが、 スマートスイッチならでは (^^)v。
BH812V に UCOM が配布するグローバル IP アドレスを割当てるときの、 BH812V と UCOM との間の通信は以下のような感じ:
BH812V | UCOM | ||
---|---|---|---|
DHCP Request → | |||
← DHCP Reply | グローバル IP アドレスの割当て | ||
DNS Query → | ntp.121ware.com の IP アドレスは? | ||
← DNS Response | IP アドレスは 211.4.244.178 | ||
NTPv4 → | 211.4.244.178 へ現在時刻を問合わせ | ||
← NTPv4 | 現在時刻は 17:26:26 | ||
DNS Query → | voipsetup.fttx.co.jp の IP アドレスは? | ||
← DNS Response | IP アドレスは 61.122.116.158 | ||
HTTPS Request → | 61.122.116.158 への SSL 通信開始 | ||
← … | … → | 61.122.116.158 との SSL 通信 | |
SIP REGISTER → | SIP Proxy への REGISTER 要求 | ||
← SIP Response | SIP REGISTER 完了 |
一方、 BH812V を LAN 内に設置したときは、 voipsetup.fttx.co.jp の IP アドレス問合わせが行なわれず、 当然その後に続く SSL 通信も、 SIP REGISTER も行なわれない。
BH812V と 61.122.116.158 (voipsetup.fttx.co.jp) との SSL 通信は、 暗号化されているため覗き見することができないが、 ホスト名からしていかにも VoIP の設定情報 (電話番号, ユーザID, パスワード, SIP Proxy など) をダウンロードしているように見える。 つまり、 BH812V はグローバル IP アドレスを割当てると、 https://voipsetup.fttx.co.jp から設定情報を取得するが、 ローカル IP アドレスを割当てると、 設定情報の取得が行なわれず、 したがって電話も使えない、 ということなのか?
仮にそうだとして、 ではなぜローカル IP アドレスだと設定情報の取得が行なわれないのか? BH812V は割当てられた IP アドレスがグローバルかプライベートか判断して、 動作を変えているのか? また、 取得先であるこの URL は元々 BH812V 内部に持っているのか? URL のようないつ変わるかも知れないようなものを VoIP アダプタに書込んで出荷するというのは考えにくい、 などと思いつつ、 tcpdump が表示したパケットの内容を詳しく見ていくと、 UCOM からの DHCP Reply (グローバル IP アドレスの割当て) が、 普通の DHCP サーバとは異なっていることに気付いた:
17:26:31.004413 00:1a:6c:YY:YY:YY > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 391: (tos 0x0, ttl 255, id 32054, offset 0, flags [none], proto UDP (17), length 377) 122.218.YY.YY.67 > 255.255.255.255.68: [udp sum ok] BOOTP/DHCP, Reply, length 349, hops 1, xid 0x29d6048, Flags [Broadcast] (0x8000) Your-IP 122.218.XX.XX Gateway-IP 122.218.YY.YY Client-Ethernet-Address 1c:b1:7f:XX:XX:XX Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Offer Server-ID Option 54, length 4: 61.122.127.121 Lease-Time Option 51, length 4: 21600 Subnet-Mask Option 1, length 4: 255.255.255.248 Default-Gateway Option 3, length 4: 122.218.YY.YY Domain-Name Option 15, length 10: "usen.ad.jp" Domain-Name-Server Option 6, length 8: 61.122.127.122,61.122.116.174 T201 Option 201, length 6: 21321,20525,20299 T202 Option 202, length 49: 104.116.116.112.115.58.47.47.118.111.105.112.115.101.116.117.112.46.102.116.116.120.46.99.111.46.106.112.47.115.101.116.117.112.46.97.115.112.120.63.99.105.100.61.38.114.105.100.61
122.218.YY.YY が UCOM のルータ (DHCP Relay Agent を兼ねる) の IP アドレス、 1c:b1:7f:XX:XX:XX が BH812V の MAC アドレスで、 122.218.XX.XX が BH812V に割当てられたグローバル IP アドレス。 「Magic Cookie 0x63825363」 の行以降が、 DHCP オプション。 DHCP オプションとは、 DHCP サーバがクライアントにネットワーク設定情報等を伝えるためのもの。 つまり、 デフォルトゲートウェイや DNS サーバ等。 DHCP オプションを見ていくと、 見慣れないものが... 「T201 Option 201」 「T202 Option 202」 って何だ? これらオプションの値が (tcpdump が表示する際に) 10進数値に変換されてしまっているので、 文字に戻してみると:
T201 Option 201: "SIP-OK" T202 Option 202: "https://voipsetup.fttx.co.jp/setup.aspx?cid=&rid="
何のことはない、 グローバルかプライベートかが問題なのではなくて、 UCOM の DHCP サーバが VoIP 設定情報の URL を BH812V へ提供していただけだった。 つまり、 プライベート IP アドレスを割当てる際、 UCOM DHCP サーバと同じ設定情報を提供すれば BH812V は VoIP アダプタとして機能するはず。 DHCP サーバ (前述した図の 「NAT 機能付ルータ」 上で走らせている) の設定ファイル dhcpd.conf に、 以下のような感じで T201/T202 の設定を書き加えてみた:
authoritative; option T201 code 201 = text; option T202 code 202 = text; option domain-name "gcd.org"; subnet 192.168.10.0 netmask 255.255.255.0 { option domain-name-servers 192.168.10.1; option routers 192.168.10.1; option subnet-mask 255.255.255.0; option broadcast-address 192.168.10.255; option T201 "SIP-OK"; option T202 "https://voipsetup.fttx.co.jp/setup.aspx?cid=&rid="; range 192.168.10.129 192.168.10.159; }
すると、 この DHCP サーバからプライベート IP アドレスを割当てられた BH812V は、 https://voipsetup.fttx.co.jp/setup.aspx?cid=&rid= から VoIP 設定情報を取得して VoIP 機能が使用可能になった。 ここ数日、 Aterm BH812V を LAN 内に設置したまま様子を見ているが、 今のところ特に問題は起きていない。 もっとも、 固定電話を使う機会はほとんど無いのだけれど (^^;)。
なお、 この VoIP 設定情報のページは Basic 認証で保護されている。 つまり BH812V はこのページにアクセスするためのユーザID とパスワードを内蔵していると考えられる。 Basic 認証なので生パスワードが送出されてしまうが、 BH812V は 「信頼できる」 HTTPS サーバにしか接続しないことでパスワードの漏洩を防いでいる。 例えば、 voipsetup.fttx.co.jp は 「C=JP, ST=Shizuoka, L=Kakegawa, O=NEC AccessTechnica Ltd, CN=NEC AccessTechnica Ltd」 によって認証されている。 ただ、 ミスによって大穴があいてしまうことは有り得る。 Digest 認証など、 生パスワードを送出しない認証方法を採用すべきだったのではなかろうか?