https://naba-san.hatenablog.com/


USB接続による逆テザリング(?)

つまりUSBテザリングを使ってPC経由でネットに繋ぐというもの。逆USBテザリングとでも言えば良いのか?

某所で話題になってたので検証してみたが、とりあえずうまくいった。

条件とか

条件

検証環境

制限事項

  • dhcpdの切り方がわかんねー

作業フロー

  • Android端末でUSBテザリングを有効にする
  • 接続先PCに仮想NICドライバ入れる
  • PCの仮想NIC経由でネット接続できるようにごにょごにょする
  • Android端末のshellにrootで入ってアドレス固定、標準経路をPC経由のネット接続に向ける

やったこと

USBテザリングの接続

仕様は USB Ethernet/RNDIS の名称で標準化されてるそうです。詳細はこの辺
利用するドライバ等はOSや機種によるので割愛しますが、以前、Xperia acro と Windows XP の組み合わせを例に、少しだけ説明しています。

仮想NICによるネット接続
  • PCの仮想NIC経由でネット接続できるようにごにょごにょする

Windows PC ならインターネット接続共有とか、その他のOSならルーティングするなりブリッジするなり好きにして下さい。
(今回はAndroidのDHCPDの切り方がよく分からなかったので、自宅のネットワーク等へ悪影響が出ないように、インターネット接続共有を利用しました。)

Androidの設定変更と修正
  • Android端末のshellにrootで入ってアドレス固定、標準経路をPC経由のネット接続に向ける

busyboxでifconfigを実行すると、こんな具合で仮想インターフェースが見えるはず。

# busybox ifconfig
usb0      Link encap:Ethernet  HWaddr 9A:98:4B:**:**:**
          inet addr:192.168.42.129  Bcast:192.168.42.255  Mask:255.255.255.0
          inet6 addr: fe80::9898:4b**:****:****/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6944 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3485 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:736017 (718.7 KiB)  TX bytes:3533822 (3.3 MiB)

もし usb0 の部分(PC側から直接見えるインターフェース)の名称が異なっているようなら、適宜読み替えること。

アドレス固定は

# ifconfig 192.168.137.2 netmask 255.255.255.0

みたいな感じでおk。もちろん、アドレスはインターネット接続共有だとかブリッジ先だとかに合わせて変更する。


標準の経路情報は、

# busybox route
busybox route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.137.0   *               255.255.255.0   U     0      0        0 usb0
10.0.0.0        *               255.0.0.0       U     0      0        0 rmnet0
default         10.197.11.118   0.0.0.0         UG    0      0        0 rmnet0

とかで確認できる。rmnet0は3G(LTEも同じ?)接続。

# busybox route del default

でrmnet0への経路を消した上で

# busybox route add default gateway 192.168.137.1

とか入れてPC側に経路を向けてやると良い。

*1:標準のtoolboxではifconfigでアドレスが確認できないとか、色々不都合がある。

*2:Android から usb0 がインターフェースとして見えていること。