Androidスマホをラズパイでルーターつくった
引っ越しを控え、現宅のフレッツ光の移設手続きをしていたのですが、諸事情で1ヶ月以上回線が引けない状況になりました。
仕方ないので、ルーターを自作します。
USBテザリングを有線LANに変換させてみた
Androidスマホで有線LANテザリングが出来るとベストなのですが、あいにく手元に対応しているスマホがありませんでした。
結果、RaspberryPiでブリッジしてあげることで、これを実現しました。
環境
- SHARP SH-M05 (Android 9)
- RaspberryPi Model2B
- 楽天モバイル(楽天回線)
やり方
USBテザリングを、ラズパイの有線LANポートとブリッジする事で実現しました。
具体的には、SH-M05が、USBテザリングのEnable/DisableでUSBデバイスIDが変わることをトリガーとして、udevを使いブリッジをコントロールします。
Clients ---> [[eth0]-[br0]-[usb0]] ---> [Android 9] ---> The Internet(Rakuten Mobile MNO)
LinuxからのSH-05のみえかた
DebianにSH-05を接続した際、以下のように認識されています。
root@raspberrypi:~# lsusb | grep Sharp
Bus 001 Device 007: ID 04dd:9ba2 Sharp Corp. SHM05
USBテザリングを有効にしたところ、デバイスIDが変化しました。
root@raspberrypi:~# lsusb | grep Sharp
Bus 001 Device 008: ID 04dd:9b9e Sharp Corp. SHM05
デバイスIDは、それぞれのモードの固定値のようで、再現性がありました。
また、USBテザリングを有効にした際、usb0
という名前のNICが認識されており、DHCPでIPアドレスを取得しています。
実装
interfaces
interfaces内で、内蔵NIC(eth0)をメンバーとしたブリッジbr0
を作っておきます。
auto br0
iface br0 inet dhcp
pre-up /sbin/brctl addbr br0
pre-up /sbin/brctl addif br0 eth0
pre-up /sbin/ifconfig eth0 up
udev
USBテザリングを有効にした際のベンダーID:デバイスIDをトリガーとして、ブリッジのコントロールを行います。
ここでは、1つのトリガーに対し複数の処理をしたい為、いったん任意のシェルスクリプトを呼び出すことにします。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTRS{idVendor}=="04dd", ATTRS{idProduct}=="9b9e", ATTR{type}=="1", RUN="/root/bin/add.br0.sh"
SUBSYSTEM=="net", ACTION=="remove", DRIVERS=="?*", ATTRS{idVendor}=="04dd", ATTRS{idProduct}=="9b9e", ATTR{type}=="1", RUN="/root/bin/remove.br0.sh"
デバイス接続時
br0
にusb0
をアタッチし、DHCPでアドレスを取得させます。
L2ブリッジだけが目的なのでdhclient
の意味はありませんが、メンテナンスをする際などに必要でしょう。
#!/bin/bash
dhclient -r
brctl addif br0 usb0
sleep 1
dhclient br0
デバイス切断時
接続時とは逆に、DHCPCd
を終了させ、usb0
をデタッチします。
#!/bin/bash
dhclient -r
brctl delif br0 usb0
使ってみた感想
1週間ほど使ってみているですが、思ったより安定しています。
ただ、所詮はLTEなホームルーターと変わり無いので、過剰な期待はしない方が良いかと思います。
おわりに
今回、フレッツ光が1ヶ月以上の開通待ちとなり、レンタルWiFiを借りるのも惜しいので、手持ちのモノで作ってみました。
レンタルWiFiと違い、安くて、無線APも好きなモノがつかえますし、VLANもVPNも好きに出来るので、玄人にはなかなか良いのではないでしょうか。
コロナがきっかけで、築50年の築古マンションへ引っ越ししようとしています。
安くて広くて、Hackのし甲斐もあり、なかなかに楽しいです。 笑
Happy Hacking!!