2012年10月19日金曜日

AndroidのDNS処理

http://monozukisya.blog92.fc2.com/blog-entry-499.html では、/etc/hostsがうまく使われていないようでした。

resolve.confやnsswitch.confなど、Linuxのdns関連のファイルを/etcで探したところありませんでした。

dns処理に関して探していたところ、下記の情報がありました。
C/J Prog's Blog: Android DNSの設定を変更する(http://c.fc2.com/imgs/http%3A%2F%2Ftbaba-prog.blogspot.jp%2F2011%2F05%2Fandroid-dns_17.html/)

これによると、Androidでは net.dns[n].[pid] => net.dns[n] => /etc/resolv.conf の順番でDNSを見るそうです。
[n] : 1-8
[pid] : プロセスID

現在のDNS情報がどうなっているかは、adb shell上で getprop | grep dns を実行することでわかるそうですので、チェックしてみました。

WiFiがoffですが、WiFiがonの時に先に3Gをmmsにしたので、メールが受信できる状態です。
rmnet0が3G回線のインターフェースで、net.dns1にWiFiで利用した自宅DNSサーバーIPが登録されています。
[net.change]: [net.dnschange]
[net.rmnet0.dns1]: [172.24.168.89]
[net.rmnet0.dns2]: [172.24.132.84]
[net.dns1]: [自宅DNSサーバーIP]
[net.dns2]: []
[net.dnschange]: [89]
[net.dns1.733]: []
[net.dns2.733]: []
[dhcp.eth0.dns1]: []
[dhcp.eth0.dns2]: []
[dhcp.eth0.dns3]: []
[dhcp.eth0.dns4]: []


一度3Gをonにしてからmmsにして、メールが受信できない状態でチェックしてみました。
rmnet0のdns情報は変わりませんが、net.dns1とnet.dns2に3GのDNSサーバーIPが登録されています。
[net.change]: [net.dnschange]
[net.rmnet0.dns1]: [172.24.132.84]
[net.rmnet0.dns2]: [172.24.168.89]
[net.dns1]: [172.24.132.84]
[net.dns2]: [172.24.168.89]
[net.dnschange]: [97]
[net.dns1.733]: []
[net.dns2.733]: []
[dhcp.eth0.dns1]: []
[dhcp.eth0.dns2]: []
[dhcp.eth0.dns3]: []
[dhcp.eth0.dns4]: []


これから考えると、net.dns1が先に利用されてタイムアウトしていることで、mmsが利用できないことが考えられます。

3GをONにしてもこの情報に変化がありませんでしたが、dnsサーバーとの通信が可能なので、mmsが利用できると考えられます。

また、WiFiがAPと接続しないと再度利用できないのは、接続しないとnet.dns1の情報が3GのDNSでなくならないためと考えられます。


http://monozukisya.blog92.fc2.com/blog-entry-499.html にちょこっと書いたシュバッとの説明で、type=mmsのときにdns通信ができるよう tpe=mms,hipri, とすることで利用できるはずだができなかった、という情報がありました。

情報ではAndroid2.3ではと書いてあったので、2.2.1の自分でも試したのですがmmsが利用できませんでした。


mmsに設定した場合はdnsサーバーと通信が行えないのでmmsが利用できないと考えれば、nsswitch.confとhostsファイルを利用して、mmsが利用するホスト名をhostsから優先して取得できるように設定すれば利用できそうです。

0 件のコメント:

コメントを投稿