Wi-Fiルータの調子がおかしくなって使えなくなり、急遽、古いスマホをWi-Fiルータに仕立てたので、その方法を書いておきます。
今回目指したもの
今回目指したものは以下のようなネットワークです。
| 光ケーブル
|
[ONU/HGW]
|
| LANケーブル
|
[Ubuntu] (IPフォワーディング)
|
| USBケーブル
|
[古いスマホ] (USBリバーステザリング、Wi-Fiテザリング、IPフォワーディング)
|
| Wi-Fi
|
[無線接続機器]
今回は、IPアドレスに192.168.99.0/24を使うこととします。
Ubuntu側の設定
ADBの導入
ADBは、AndroidをUbuntu側から操作するために必要となります。公式パッケージに存在しているため、以下によりインストール可能です。
sudo apt install android-tools-adb
IPフォワーディングの設定
まずは、IPフォワーディングが出来るようにファイアーウォールを緩めなければなりません。そのため、/etc/default/ufw
を開き、DEFAULT_FORWARD_POLICY="DROP"
からDEFAULT_FORWARD_POLICY="ACCEPT"
へと変更します。その後、sudo ufw disable && sudo ufw enable
により、ファイアーウォール設定を再読み込みします。
次に、IPフォワーディングを設定します。ここでは取りあえず、IP Masqueradeを使うことにします。
sudo -s
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F -t nat
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
古いスマホ側の設定
「開発者向けオプション」の有効化
「開発者向けオプション」の有効化は、PCからUSB経由でAndroid端末を操作するために必要となります。方法については、あちこちに書かれているため割愛。
root化
スマートフォンで細かなネットワークの設定を行うためにはroot権限が必要となります。そのため、古いスマホはroot権限を取っておく必要があります。なお、一時rootだけでも十分なため、既存ファイルの上書きは不要です。
多くの古い端末 (日本の機種を含む) では、get_essential_address、install_backdoor及びrun_root_shellを使ってrootを取るのが手軽でしょう。方法については、あちこちに書かれているため割愛。
USBリバーステザリングの有効化
adb shell
に入り、run_root_shell
を行ってルートシェルに入り、以下を実行して、USBをRNDISモードにし、ネットワークの設定を行う必要があります。
setprop sys.usb.config rndis,adb
setprop net.dns1 8.8.8.8
ifconfig rndis0 192.168.99.1 netmask 255.255.255.0 up
ip route add default via 192.168.99.254 dev rndis0 onlink
IPフォワーディングの設定
古いスマホ側でもIPフォワーディングが必要となります。adb shell
に入り、run_root_shell
を行ってルートシェルに入り、以下を実行して、IPフォワーディングを設定します。
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F -t nat
iptables -t nat -A POSTROUTING -o rndis0 -j MASQUERADE
iptables -P FORWARD ACCEPT
Wi-Fiテザリングの設定
Androidの設定より、Androidの標準機能を使ってWi-Fiテザリングを有効にします。なお、この時点では古いスマホのアクセスポイントに繋いでも、インターネットに繋がりません。
再度Ubuntu側の設定
最後にUbuntu側でゲートウェイのIPアドレスを設定します。
sudo -s
ifconfig usb0 192.168.99.254 netmask 255.255.255.0
なお、こちらではUSB接続が不安定なためかIPが安定しないため、以下のようなハックを使っています。より良い方法募集中。
while [ true ] ; do ifconfig usb0 192.168.99.254 netmask 255.255.255.0 ; sleep 1 ; done
終わりに
時間がかかると思われたroot化はすんなりと行き (開発者のfi01さん感謝!)、ネットワーク周り (特にNetwork Manager関係) はいつもの通り手間取ってしまいましたが、なんとか動かすことが出来て良かったです。
なお、今のところ実用レベルにはなっていますが、繋ぎとしての利用しか考えていないため、2段NAPTなどの微妙な点を放置しているので注意してください。本格的に使うのであれば、スマートフォンにMicro-USB/有線LAN変換アダプタを繋いでフォワーディングを一段減らすと良いかと思います (充電はドックから。速度は100Mbpsに落ちるはず)。