ここ最近ずっと, b-mobile 1 GB 定額 経由だと, Opera for Desktop, Opera Mobile 関係なく, Opera Turbo のサーバーにつながらない. 今まではずっと Opera 側の問題だと思っていたけれども, 今日偶々複数のネットワーク環境から Opera Turbo を同時に使う機会があったときに, 何故か b-mobile 経由からだけがつながらないのに気付き, b-mobile 側が何かしらの理由で Opera Turbo を拒否しているという疑念が生まれた. まあ実際には Opera Turbo を限定的に標的にしている訳ではなかったが, b-mobile の仕様で Opera Turbo が使えなくなっていることが確認できた.
まず前提として, Opera Turbo は opera10beta-turbo.opera-mini.net:http に URL をリクエストする, というのが基本の仕組みになっていることを押さえておいてほしい. (これはパケットキャプチャリングすると割とすぐに分かる.) 尚, opera10beta-turbo.opera-mini.net は (正しく) 解決すると 141.0.11.252 になる. (下記も参照.)
$ nslookup opera10beta-turbo.opera-mini.net
Server: 210.130.0.1
Address: 210.130.0.1#53
Non-authoritative answer:
opera10beta-turbo.opera-mini.net canonical name = global-turbo-1.opera-mini.net.
Name: global-turbo-1.opera-mini.net
Address: 141.0.11.252
それと, 家の LAN が 192.168.1.0/24 であるということ, b-mobile に接続して (動的に) 割り当てられた IP アドレスが 10.201.9.40 であるということも合わせて言及しておく.
さて, Opera さんが Opera Turbo のサーバーに繋がらないと言うからには, 本当に繋がらないのだろう. ということは, そもそも疎通していない可能性が考えられる. しかし, ping を通してみると, ちゃんと通じていることが分かった.
$ ifconfig ppp0 && ping -I ppp0 -c 3 opera10beta-turbo.opera-mini.net
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.201.9.40 P-t-P:10.6.6.6 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:97 errors:0 dropped:0 overruns:0 frame:0
TX packets:138 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:8404 (8.2 KiB) TX bytes:23295 (22.7 KiB)
Warning: cannot bind to specified iface, falling back: Operation not permitted
PING global-turbo-1.opera-mini.net (141.0.11.252) from 10.201.9.40 ppp0: 56(84) bytes of data.
64 bytes from global-turbo-1-lvs-colossus.opera-mini.net (141.0.11.252): icmp_req=1 ttl=49 time=659 ms
64 bytes from global-turbo-1-lvs-colossus.opera-mini.net (141.0.11.252): icmp_req=2 ttl=49 time=420 ms
64 bytes from global-turbo-1-lvs-colossus.opera-mini.net (141.0.11.252): icmp_req=3 ttl=49 time=399 ms
--- global-turbo-1.opera-mini.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 399.488/493.160/659.743/118.098 ms
本当にそれらしいところに繋がっているのか, 確認したところ, 確かにそれらしいところに ping は飛んでいるみたいである.
$ su -c 'ifconfig ppp0 && traceroute -i ppp0 opera10beta-turbo.opera-mini.net'
Password:
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.201.9.40 P-t-P:10.6.6.6 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:283 errors:0 dropped:0 overruns:0 frame:0
TX packets:355 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:28494 (27.8 KiB) TX bytes:46330 (45.2 KiB)
traceroute to opera10beta-turbo.opera-mini.net (141.0.11.252), 30 hops max, 60 byte packets
1 10.50.0.162 (10.50.0.162) 219.786 ms 219.885 ms 259.166 ms
2 10.50.0.164 (10.50.0.164) 298.608 ms 339.350 ms 339.508 ms
3 g1-223-25-128-18.bmobile.ne.jp (223.25.128.18) 378.786 ms 398.609 ms 418.390 ms
4 g1-223-25-128-6.bmobile.ne.jp (223.25.128.6) 458.487 ms 498.169 ms 498.150 ms
5 202.232.12.241 (202.232.12.241) 517.732 ms 537.603 ms 557.891 ms
6 tky006bb01.IIJ.Net (58.138.120.37) 577.637 ms 399.019 ms 239.521 ms
7 tky001bf01.IIJ.Net (58.138.82.53) 258.947 ms 278.843 ms 298.710 ms
8 tky008bf00.IIJ.Net (58.138.80.33) 338.888 ms tky001bf01.IIJ.Net (58.138.80.29) 338.876 ms tky001bf00.IIJ.Net (58.138.80.25) 378.173 ms
9 sjc002bf00.IIJ.net (216.98.96.182) 458.208 ms sjc002bf01.IIJ.net (216.98.96.62) 478.718 ms 497.848 ms
10 sjc002bb10.IIJ.net (206.132.169.6) 517.653 ms sjc002bb10.IIJ.net (206.132.169.10) 537.530 ms 638.348 ms
11 ge-3-2-4.sjc10.ip4.tinet.net (213.200.66.229) 638.254 ms 657.768 ms 677.129 ms
12 xe-1-2-0.sea20.ip4.tinet.net (89.149.187.113) 459.077 ms 359.971 ms 359.741 ms
13 opera-gw.ip4.tinet.net (173.241.130.110) 418.503 ms 479.001 ms 518.187 ms
14 global-turbo-1-lvs-colossus.opera-mini.net (141.0.11.252) 538.197 ms 557.605 ms 578.128 ms
因みに, 宅内 LAN 経由だとこうなった.
$ su -c 'ifconfig p1p2 && traceroute -i p1p2 opera10beta-turbo.opera-mini.net'
Password:
p1p2 Link encap:Ethernet HWaddr A4:BA:DB:B2:7E:27
inet addr:192.168.1.116 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a6ba:dbff:feb2:7e27/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:231165 errors:0 dropped:1 overruns:0 frame:0
TX packets:183900 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:206259448 (196.7 MiB) TX bytes:62691482 (59.7 MiB)
Interrupt:46 Base address:0xa000
traceroute to opera10beta-turbo.opera-mini.net (141.0.11.252), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.289 ms 0.199 ms 0.157 ms
2 125.206.156.14 (125.206.156.14) 9.417 ms 9.270 ms 9.299 ms
3 125.206.156.1 (125.206.156.1) 9.418 ms 9.436 ms 9.684 ms
4 118.23.130.13 (118.23.130.13) 8.901 ms 8.856 ms 8.965 ms
5 118.23.85.21 (118.23.85.21) 10.220 ms 11.758 ms 13.621 ms
6 211.129.29.29 (211.129.29.29) 8.563 ms 8.287 ms 8.242 ms
7 61.207.14.221 (61.207.14.221) 8.511 ms 8.613 ms 8.339 ms
8 61.207.4.71 (61.207.4.71) 8.770 ms 8.889 ms 8.641 ms
9 ae-1.r21.osakjp01.jp.bb.gin.ntt.net (129.250.12.33) 17.290 ms 17.611 ms 17.467 ms
10 as-1.r21.snjsca04.us.bb.gin.ntt.net (129.250.3.197) 121.541 ms 155.028 ms 119.103 ms
11 equinix-sjc.ip.tiscali.net (206.223.116.19) 122.101 ms 122.782 ms 121.891 ms
12 xe-4-1-0.sea20.ip4.tinet.net (89.149.181.218) 160.108 ms 160.010 ms xe-3-0-0.sea20.ip4.tinet.net (89.149.181.222) 142.175 ms
13 opera-gw.ip4.tinet.net (173.241.130.110) 163.687 ms 157.895 ms 155.007 ms
14 global-turbo-1-lvs-colossus.opera-mini.net (141.0.11.252) 148.011 ms 148.362 ms 150.609 ms
一体どういうことだ, と頭を抱えていたのだけれど, 何を考えたか, Opera で直接 opera10beta-turbo.opera-mini.net にアクセスしたところ, なんとこんな画面が現れた.
著作権表記に Japan Communications Inc. と書いてある!?
もしや, と思い, traceroute を TCP/80 限定で仕掛けたところ, 大当たりだった.
$ su -c 'ifconfig ppp0 && traceroute -i ppp0 -T opera10beta-turbo.opera-mini.net'
Password:
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.201.9.40 P-t-P:10.6.6.6 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:592 errors:0 dropped:0 overruns:0 frame:0
TX packets:748 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:77372 (75.5 KiB) TX bytes:74976 (73.2 KiB)
traceroute to opera10beta-turbo.opera-mini.net (141.0.11.252), 30 hops max, 60 byte packets
1 10.50.0.162 (10.50.0.162) 218.591 ms 238.372 ms 257.876 ms
2 10.50.0.164 (10.50.0.164) 278.395 ms 278.295 ms 278.183 ms
3 10.10.150.29 (10.10.150.29) 297.312 ms 318.068 ms 337.339 ms
4 global-turbo-1-lvs-colossus.opera-mini.net (141.0.11.252) 357.032 ms 356.840 ms 376.719 ms
勿論宅内 LAN 経由だとこのような変化は起きなかった.
$ su -c 'ifconfig p1p2 && traceroute -i p1p2 -T opera10beta-turbo.opera-mini.net'
Password:
p1p2 Link encap:Ethernet HWaddr A4:BA:DB:B2:7E:27
inet addr:192.168.1.116 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a6ba:dbff:feb2:7e27/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:231227 errors:0 dropped:1 overruns:0 frame:0
TX packets:183969 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:206266761 (196.7 MiB) TX bytes:62696804 (59.7 MiB)
Interrupt:46 Base address:0xa000
traceroute to opera10beta-turbo.opera-mini.net (141.0.11.252), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.309 ms 0.217 ms 0.175 ms
2 125.206.156.14 (125.206.156.14) 9.261 ms 9.086 ms 9.061 ms
3 125.206.156.1 (125.206.156.1) 9.146 ms 9.365 ms 9.376 ms
4 118.23.130.13 (118.23.130.13) 8.723 ms 8.732 ms 8.580 ms
5 118.23.85.21 (118.23.85.21) 10.190 ms 12.137 ms 13.927 ms
6 211.129.29.29 (211.129.29.29) 8.384 ms 8.339 ms 8.314 ms
7 61.207.14.221 (61.207.14.221) 10.291 ms 8.862 ms 8.676 ms
8 61.207.4.71 (61.207.4.71) 8.710 ms 8.835 ms 8.780 ms
9 ae-1.r21.osakjp01.jp.bb.gin.ntt.net (129.250.12.33) 17.878 ms 16.385 ms 16.330 ms
10 as-1.r21.snjsca04.us.bb.gin.ntt.net (129.250.3.197) 121.425 ms 121.634 ms 125.328 ms
11 equinix-sjc.ip.tiscali.net (206.223.116.19) 117.166 ms 117.563 ms 116.869 ms
12 xe-4-1-0.sea20.ip4.tinet.net (89.149.181.218) 155.476 ms 155.267 ms xe-1-2-0.sea20.ip4.tinet.net (89.149.187.113) 140.489 ms
13 opera-gw.ip4.tinet.net (173.241.130.110) 156.783 ms 148.754 ms 148.712 ms
14 global-turbo-1-lvs-colossus.opera-mini.net (141.0.11.252) 150.436 ms 148.359 ms 158.112 ms
ところで, これは他のサイトへのアクセスではどうなっているか試してみたところ, どうやらどのホストに対しても似たようなルーティングが適用されるということが分かった.
$ su -c 'ifconfig ppp0 && traceroute -i ppp0 -T example.com'
Password:
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.201.9.40 P-t-P:10.6.6.6 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:2284 errors:0 dropped:0 overruns:0 frame:0
TX packets:2590 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:275215 (268.7 KiB) TX bytes:222752 (217.5 KiB)
traceroute to example.com (192.0.43.10), 30 hops max, 60 byte packets
1 10.50.0.162 (10.50.0.162) 219.488 ms 219.368 ms 238.850 ms
2 10.50.0.164 (10.50.0.164) 258.676 ms 278.474 ms 298.118 ms
3 10.10.150.29 (10.10.150.29) 338.984 ms 338.873 ms 357.510 ms
4 43-10.any.icann.org (192.0.43.10) 377.398 ms 398.143 ms 398.009 ms
つまり b-mobile ではデフォルトで HTTP のリクエストをプロクシに通しているということのようですな. 一応, アドレス上は Opera Turbo に接続したことにして, HTTP リクエストの中身は http://example.com/ へのクエリということにしたところ, Opera Turbo 関係なく example.com のレスポンスが降ってきた.
$ ifconfig ppp0 && telnet opera10beta-turbo.opera-mini.net 80
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.201.9.40 P-t-P:10.6.6.6 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:1968 errors:0 dropped:0 overruns:0 frame:0
TX packets:2246 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:229897 (224.5 KiB) TX bytes:197255 (192.6 KiB)
Trying 141.0.11.252...
Connected to opera10beta-turbo.opera-mini.net.
Escape character is '^]'.
GET / HTTP/1.1
Host: example.com
HTTP/1.0 302 Moved Temporarily
Location: http://www.iana.org/domains/example/
Server: BigIP
Content-Length: 0
X-Cache: MISS from inkf13
X-Cache-Lookup: MISS from inkf13:32080
Connection: close
Connection closed by foreign host.
ここまでの情報を整理し考察すると,
- 日本通信は b-mobile に対してレイヤ4ルーティングを噛ましている.
- TCP/80 へのリクエストだけは別のサーバー (
10.10.150.29 に繋がっている) を経由するようにしている.
- この別サーバーは事実上プロクシとして機能している. "プロクシ" は, HTTP リクエスト内の
Host ヘッダからリクエストの最終目的地を決定し, 必要であればクエリを整形してインターネットに流す. それらしいレスポンスが得られなかった場合は, サーバー内のエラーページを返す.
- この仕様によって, Opera は Opera Turbo と直接やりとりすることができない.
ということである.
多分この仕様によって本当に困る人は限られているのだろう. ただ, この "プロクシ" はオプトアウトできないので, 実際には意図しないサーバーと HTTP のインタラクションを強制されていることになる. それって決して気分のよいものではないよねと.