Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@ip6

Android Emulator 26.0.3 の IPv6対応

More than 3 years have passed since last update.

サマリ

ほどほどに動くけど、いろいろ惜しい。

  • Android Emulator 25.3 からIPv6をサポート。Google配布の仮想デバイス (AVD: Android Virtual Device) イメージでは、IPv6はデフォルトON
  • http://test-ipv6.jp/ へのアクセスで 10/10 点が出る程度には動く。
  • エミュレータのホストOSがIPv6接続があれば、仮想デバイスから設定なしでIPv6接続ができた。
  • AVDにサイトローカルIPv6アドレス (fec0::ほげほげ/64) が割り当てられる。
  • AVDにグローバルスコープのIPv6アドレスがないのでIPv4優先で接続する。
  • 外部接続はサイトローカルIPv6アドレスをNAPT66する仮想ルータを通じで出ていく。

はじめに

2017年2月の Android Emulator 25.3 からIPv6がサポートされた。リリースノートによると

Initial IPV6 support.

と、まだ微妙な表現ではあるが、サポートしたと書いてある。実際に動かした例を見たことがなかったので

やってみた

環境

  • Android Studio 2.3.3
    • Android Emulator 26.0.3

Android Studio の 設定 (Preference -> Appearance & Behavior -> System Settings -> Android SDK -> SDK Tools) から執筆時点で最新のAndroid Emulatr 26.0.3 を入れた。

AVD (Android Virtual Device) に付与されたIPv6アドレスの確認

AVD設定

  • Nexus 6P (x86)+ Android 7.1.1 (Google APIs)
  • root設定が簡単にできる、非Google Play版のイメージを選んだ

起動してみると、IPv6アドレスはサイトローカルアドレスがついていた。

host# adb root
host# adb shell
generic_x86:/ # ifconfig
eth0      Link encap:UNSPEC
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe12:3456/64 Scope: Link
          inet6 addr: fec0::5054:ff:fe12:3456/64 Scope: Site

ブラウザで外部アクセス

Chrome および WebView Browser Test を立ち上げて、http://test-ipv6.jp/ へアクセスすると、AVDにサイトローカルアドレスがついていることに対する警告は出るが、一応10/10点。IPv6インターネットアクセスにはQEMUが提供する仮想ルータがNAT変換を行っており、Webサーバから見ると、ホストOSのIPv6アドレスが見える。

Screenshot_1496195450.png

次に、IPv6 only の https://ipv6.google.com/ へもサイトローカルアドレス+NAPT66でアクセスOK

Screenshot_1496195762.png

しかし、宛先がデュアルスタックだとIPv4優先になってしまう。これはグローバルスコープのアドレスがないため。http://test-ipv6.com/ でIPv6/IPv4どちらが優先かテストの結果。

Screenshot_1496197178.png

Android Emulatorが利用するQEMUの実装状況

Android EmulatorはQEMUを使っており、AVDを収容する仮想ネットワークはユーザモードネットワークと呼ばれるQEMUのソフトウェア機能で実現されている。QEMU自体は、IPv6にも対応しているが、現時点での実装では仮想ネットワークに割り当てるIPv6アドレスのデフォルトがfec0::/64、外部接続はNAPTとなっている。下図はQEMUのドキュメントにIPv6設定を加筆したもの(赤字部分)。

Slirp_concept.png

まとめ

  • グローバルアドレス再配布の仕組みはなく、またULAではなくサイトローカルアドレスを使っている
  • NPTv6でなくてNAPTを使っている。

など、QEMU実装由来のおかしなところはあるが、新たにIPv6アドレスを取得したり、特別な設定をすることなくIPv6接続が使えるのは開発者によっては手軽で、ローカルアドレスとNATのメリットかも知れない。

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?