Android テザリング

提供: ArchWiki
2015年8月21日 (金) 16:49時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

テザリングとはスマートフォンのネットワーク接続を使って PC からインターネットにアクセスする手法です。Android Froyo (2.2) から USB テザリングと Wi-Fi アクセスポイントテザリングがネイティブでサポートされています。古いバージョンの Android OS でも、非公式の ROM にはこのオプションが有効になっているものが多く存在します。

Wi-Fi アクセスポイント

Android スマートフォンを Wi-Fi アクセスポイントとして使う (3G を使用) ことは Froyo (Android 2.2) からデフォルトで root 化する必要なく出来るようになっています。加えて、この方法は USB による方法と違って、バッテリーを急速に消費し、著しい発熱をすることがあります。

参照: menu/wireless & networks/Internet tethering/Wi-Fi access point

USB テザリング

必要なツール

  • スマートフォンの root 権限 (Android のバージョンが古い場合。Froyo (Android 2.2) 以降ではネイティブで可能です)
  • スマートフォンから PC に接続するための USB 接続ケーブル

手順

  • コンピュータをあらゆる無線・有線ネットワークから切断します
  • USB ケーブルを使ってスマートフォンをコンピュータに接続します (USB 接続モード -- Phone Portal, メモリカードまたは充電のみ -- は重要ではありませんが、テザリング中に USB モードを変更することはできないので注意してください)
  • スマートフォンからテザリングオプションを有効にします。通常は Settings --> Wireless & Networks --> Internet tethering (最近のバージョンでは Tethering & portable hotspot) から有効にします。
  • 次のコマンドを使って USB インターフェースがシステムによって認識されているか確認します:
$ ip link
以下のように usb0 または enp?s??u? デバイスが表示されるはずです (ここでは enp0s20u3 デバイス):
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether ##:##:##:##:##:## brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether ##:##:##:##:##:## brd ff:ff:ff:ff:ff:ff
5: enp0s20u3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether ##:##:##:##:##:## brd ff:ff:ff:ff:ff:ff
ノート: 以下のコマンドでは、お持ちのシステムの環境に合わせてデバイスの名前を使用してください。
警告: 使用する usb ポートによって名前は変わることがあります。デバイス名を変更して usb ポートと無関係な固有の名前をデバイスに付けると良いでしょう。
# dhcpcd enp0s20u3

systemd-networkd と udev を使う

systemd-networkd を使うことで接続した携帯をゲートウェイとして自動的に使うようにネットワークを設定できます。

/etc/udev/rules.d/90-android-tethering.rules
# Execute pairing program when appropriate
ACTION=="add|remove", SUBSYSTEM=="net", ATTR{idVendor}=="18d1" ENV{ID_USB_DRIVER}=="rndis_host", SYMLINK+="android", RUN+="/usr/bin/systemctl restart systemd-networkd.service"

idVendor の値はあなたの使用している携帯に合わせて変更してください。udevadm を使うことで確認できます:

$ udevadm info /sys/class/net/enp0s26u1u2

そして適当な systemd-networkd ファイルを作成:

/etc/systemd/network/enp0s26u1u2.network
[Match]
Name=enp0s26u1u2

[Network]
DHCP=ipv4

OpenVPN を使って USB テザリング

この方法はどんな古いバージョンの Android でも使うことができ、スマートフォンの root 化や改造を必要としません (Android 2.2 以降でも使えますが、あまり意味はありません)。

ブラウザに変更をすることはありません。それどころか、全てのネットワークトラフィックはあらゆる PC アプリケーションにおいて透過的に処理されます (ICMP の ping は除く)。多少、スマートフォンの CPU を酷使することになります (パワフルな Acer Liquid でも 500 kBytes/sec のデータ通信をするには CPU を 50% 以上使うことになります)。

必要なツール

Arch では、openvpn パッケージをインストールする必要があります。また、Android SDK のインストールも必須です (AUR や ここ から取得できます)。スマートフォン側では、azilink アプリケーションが必要になります。コンピュータの OpenVPN と通信するための Java ベースの NAT です。

Arch Linux で携帯電話の接続を設定

Android SDK をインストールしたら、SDK に入っているツールを使うためにスマートフォンを udev で適切に設定してあなたの使用している Linux ユーザーに権限を与える必要があります。この設定を行わない場合、Android SDK を使用するのに root 権限が必要になりますが、root を使うのは推奨されていません。設定を行うために、スマートフォンから USB デバッグを有効にして (Settings -> Applications -> Development -> USB debugging)、USB ケーブルでスマートフォンと PC を接続し、lsusb コマンドを実行してください。デバイスが記載されているはずです。Acer Liquid の場合の出力例:

Bus 001 Device 006: ID 0502:3202 Acer, Inc. 

それから、以下のファイルを作成してください (ciri はあなたの Linux ユーザーの名前に、0502 はあなたのスマートフォンのベンダー ID に置き換えてください):

/etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR(idVendor)=="0502", MODE="0666" OWNER="ciri"

変更を適用するために root で udevadm control restart コマンドを実行します (もしくはコンピュータを再起動してください)。

Now run in your linux PC the adb shell command from the Android SDK as plain (non root) user: you should get a unix prompt in your phone.

手順

Run the AziLink application in the phone and select "About" at the bottom to receive instructions, which basically are:

  1. You will have to enable USB debugging on the phone if it was not already enabled (usually in Settings -> Applications -> Development -> USB debugging).
  2. Connect the phone with the USB cable to the PC.
  3. Run AziLink and make sure that the Service active option at the top is checked.
  4. Run the following commands in your Linux PC:
$ adb forward tcp:41927 tcp:41927
# openvpn AziLink.ovpn
AziLink.ovpn
dev tun
remote 127.0.0.1 41927 tcp-client
ifconfig 192.168.56.2 192.168.56.1
route 0.0.0.0 128.0.0.0
route 128.0.0.0 128.0.0.0
socket-flags TCP_NODELAY
keepalive 10 30
dhcp-option DNS 192.168.56.1

トラブルシューティング

DNS

resolv.conf の中身を以下のように手動で更新する必要があります:

/etc/resolv.conf
nameserver 192.168.56.1

NetworkManager

NetworkManager を使っている場合、OpenVPN を実行する前に停止させる必要があります。

Bluetooth でテザリング

Android (4.0 以降。前のバージョンでも出来ることあり) はアクセスポイントモードの Bluetooth パーソナルエリアネットワーク (PAN) に対応しています。

NetworkManager がこのアクションを実行できネットワークの初期化を処理します。詳しくはドキュメントを見て下さい。

もしくは: Bluetooth の記事の記述に従って、ペアリングをしてコンピュータと Android デバイスを接続できるようにしてから、次を実行 (デバイスのアドレス (AA_BB_CC_DD_EE_FF) は置き換えて下さい):

$ dbus-send --system --type=method_call --dest=org.bluez /org/bluez/hci0/dev_AA_BB_CC_DD_EE_FF org.bluez.Network1.Connect string:'nap'

これでネットワークインターフェース bnep0 が作成されます。最後に、このインターフェースでネットワーク接続を設定してください。Android はデフォルトで DHCP を提供します。

SOCKS プロクシを使ってテザリング

このテザリング方法はスマートフォンから PC へのポートフォワーディングによって行います。ブラウジングだけに使うことができます。Firefox の場合、about:confignetwork.proxy.socks_remote_dnstrue に設定してください。

必要なツール

手順

Tetherbot

[1]Using the Socks Proxy の指示に従って下さい。

Proxoid

[2] で説明されている手順に従って下さい。