ここんとこIPv6問題(Google等の一部のIPv6対応サイトにIPv6でつなごうとしてタイムアウトするまでの時間が無駄にかかる、もしくはタイムアウトしてエラーになる)に悩まされていました。どうもいくつかの偶然が重なって起きてたっぽいです。
- ウチのプロバイダIIJmioはIPv6対応に積極的でDNSがIPv6対応済みのため、IPv6対応サイトに関してIPv6(AAAA)レコードも返してくる(IPv4で問い合わせた場合でも)
- 最近のOperaはOS設定無視してIPv6優先でアクセスしようとする(→結果タイムアウトする)
- ウチのルーターMN8300はIPv6トンネリングに対応している
- 今までWindowsマシンではIPv6スタックをわざわざオフしてたけど、Windows7のリモートメディア共有機能を使う為にオンにした
- (これは関係ないかもですが)NTTのBフレは地域網内専用のIPv6アドレスを振る(インターネットとは通信できない)
という条件がかさなって現象が発生していました。昨日書いたサーバー機のyum updateが遅い件もそうですね。あっちはIPv6を無効にしても困らないのでそうしましたが、Windows7機に関してはリモートメディア共有を使いたいのでIPv6自体を無効にしてしまうワケにはいきません。
で、改めて色々ググってわかったことには、DNSへの問い合わせがIPv4かv6かってことと、返ってくるレコードがv4/v6どっちかってことは全く独立であるということです。
今まではなんも考えずにLAN内のマシンはDNSサーバーとしてルーター(MN8300)を指定していました。MN8300はPPPoEで割り当てられたIIJのDNSサーバーを使うので、結果として、IPv6アドレスを含む返答が返ってきていました。
この結果として、Operaやyumのような一部ソフトはまずIPv6での接続をしにいってしまいトラブルになっていました。余所のDNSを勝手に使うのはマナー違反だし、じゃぁこれを回避するにはLAN内にIPv6を無効にしたDNSキャッシュサーバーを別途立てるしかないかなぁ、とため息をつきかけてふと気付きました。そういえば先日Googleが公開DNSを提供しだしたじゃんか!と。てことでDNS設定を8.8.8.8/8.8.4.4とGoogleのものに変更(さすがGoogle、こんなアドレスまで良番とってますな)。
おぉ、IPv4だけだ。むしろGoogleの方が積極的にIPv6に対応してそうなイメージですが。実際この設定をしたマシンからならOperaも普通にGoogleが開けるようになりました。
ので、LAN内のDHCPサーバーが知らせるDNSサーバーアドレスをGoogleのものにして対応完了。Windows7導入して一ヶ月半くらいぶりに快適なネット環境が戻って来ました。