adb pppとは
PPP(Point-to-Point Protocol)をAndroidとPCの間で使うためのものです。
現在ではあまり一般的に使われていないプロトコルのように思います。
とても便利な機能なのですがネットに情報が全くないのが寂しいです。
root取得済みであることが前提です。
環境
- Ubuntu 16.04 LTS(Firewall: iptables)
- Android 2.2(今回これを使っただけであり最新の端末でも使えるはずです, rooted)
ファイアウォールの設定
$ sudo sysctl net.ipv4.ip_forward=1 # forwardを許可
$ sudo iptables -t nat -I POSTROUTING -s 192.168.0.2 -j MASQUERADE -o eth0 # eth0の部分は転送するインターフェースに置き換えてください。
$ sudo iptables -A FORWARD -i ppp0 -j ACCEPT
$ sudo iptables -A INPUT -i ppp0 -j ACCEPT
$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # 確立済みの接続を許可
adb ppp
$ sudo adb ppp "shell:pppd nodetach noauth noipdefault defaultroute /dev/tty" nodetach noauth noipdefault notty 192.168.0.1:192.168.0.2
これでifconfig等を実行してppp0インターフェースが作成されていれば成功です。
もし番号が違った場合は上のファイアウォールの番号を変えて設定し直してください。
DNS
名前解決の設定です。不要であれば飛ばしてください。
$ adb shell setprop net.dns1 8.8.8.8 # 任意のDNSサーバ
$ adb shell
# echo "nameserver 8.8.8.8" >> /etc/resolv.conf
# exit
なぜかpingコマンドだけはこれらの設定ファイルを使ってくれないため名前解決ができませんでした。
解決方法をご存知の方がいれば教えていただけると幸いです。
終わりに
これで繋がるようになるはずです。
今回OSが古く色々な制限もあったためリバーステザリングは非常に困難でしたがなんとか情報を見つけることができインターネットに接続させることができました。(あと良いiptablesの勉強になりました。)
機会があればMacで行う方法についても検証していきたいと思います。
参考文献
-
How to set up Android ppp over usb with adb
ほとんどこのページを参考にさせていただきました。ありがとうございます。
追記
ifconfigコマンドで見たときにpppデバイスが残り続けてコマンドを実行するたびに増えて困っていたのですがpppdというプロセスが起動しているためそれを終了してやることで消えるようです。