4月といえば引越しの季節ですね。
引越しのタイミングでは固定回線が一時的に使用できない期間が発生することがよくあります。今回、私も同様な状況に陥りました。こういった時に活躍するのがスマートフォンでのテザリングです。
テザリングでも基本的にはリモートワークには対処できるのですが、所持している各端末に対して接続先無線LANアクセスポイントのSSID、パスワードを設定して回るのは手間です。なので無線LANルータのWAN側接続をテザリングでのものに差し替えることで横着しようと考え、スマホテザリング-Eithernetコンバータを作ってみることにしました。
使用機材
- Raspberry Pi 3 B(未検証ですが他の端末でも使用できると思います)
- iPhone(検証端末はiPhone11 iOS14.4.2) or Android(検証端末はPixel3a Android11)
- USBテザリングに使用可能なケーブル
OpenWrt
Raspberry Piで使用するLinuxディストリビューションといえばRaspberry Pi OSが一般的ですが、今回はルータ構築用のディストリビューションのOpenWrtを使用します。
インストールイメージの取得とmicoro SDカードへの書き込み
OpenWrt公式から使用するRaspberry Piに対応するイメージをダウンロードします。
伝統的な方法ではddコマンドあたりを使用するのでしょうがRaspberry Pi Imagerを使用してmicro SDカードにイメージを書き込みます。

- Operating System -> Use Custom -> ダウンロードしたファイルを選択
- Storage -> micro SDカードのドライブを選択
- WRITEボタン押下 -> SDカードの内容が消されると警告が出るので問題ないSDカードを使用していることを確認してYESボタンを押下
セットアップ
Raspberry Pi の無線LANを有効にする
初期状態では無線LANが無効で、LAN端子はDHCPサーバが動作しています。PCとLANケーブルで直結し
[Raspberry Pi] ==有線LAN== [PC]
といった構成にして設定作業を進めます。
Raspberry Piに先程イメージを書き込んだmicroSDカードをセットして電源を入れて、しばらく待ちます。
Raspberry PiとPCをLANケーブルで直結する。
PCからブラウザで http://192.168.1.1 を開きます。

Authorization Requiredが出たら、Usernameにrootとだけ入れてパスワードは空欄のままLoginボタンを押下します。
Network -> Wireless と遷移


Wireless Overviewセクション、SSID: OpenWrtの行のEditボタンを押下します。
Device ConfigurationのAdvanced Settingsタブを選択 -> Country CodeからJP – Japanを選択します。

同じ画面下部のInterface Configuration、Wireless Securityタブを選択 -> EncryptionからWPA2-PSKを選択、Keyには適当なパスワードを入力します。

最下端の”Save”ボタンを押下します。
Wireless OverviewセクションのSSID: OpenWrt の行の “Enable”ボタンを押下します。
PCで無線LANの設定を行い、SSID:OpenWrtに接続 -> 有線LANのケーブルを外した状態でブラウザから http://192.168.1.1 へのアクセスが可能な状態であることを確認します。
LAN端子の役割をWANポートに設定する
[インターネット] ==有線LAN== [Raspberry Pi] ==無線LAN== [PC]
といった構成の構築を試みます。
ブラウザから http://192.168.1.1 を開いてログイン、Network -> Interfaces と遷移します。

InterfacesのLAN -> Edit ボタンを押下します。

Physical Settingsタブ -> Interfaceのプルダウン -> Ethernet Adapter: “eth0″のチェックを外します。

“Save”ボタンを押下します。

“Save & Apply”ボタンを押下します。

Interfacesから、”Add new interface”ボタンを押下します。

Nameに”WAN”を入力、Protocolから”DHCP client”を選択、Interfaceからeth0を選択します。

“Create Interface”ボタンを押下します。

Firewall Settingsタブ -> firewall-zoneでwanを選択します。

“Save”ボタンを押下します。

“Save & Apply”ボタンを押下します。
有線LANポートを既存のルータなどDHCPでIPが配布されてインターネットへの通信を提供している端末に接続します。
PCからインターネットにつながることを確認します。
iPhoneのテザリング経由でインターネットにつながるようにする
SSHでRaspberry Pi に接続します。
$ ssh root@192.168.1.1
テザリングを行えるように各種パッケージを導入
$ opkg update
$ opkg install kmod-usb-net-ipheth usbmuxd libimobiledevice usbutils
- opkg:OpenWrtでのパッケージ管理のコマンドaptみたいなもの
- kmod-usb-net-ipheth:iPhone USB Ethernet ドライバ
- usbmuxd:USB経由でのiOS端末との多重接続のためのデーモン
- libimobiledevice:iOS端末上のサービスとのコミュニケーションを行うためのライブラリ
- usbutils:USBのユーティリティ
usbmuxdの呼び出し
$ usbmuxd -v
usbmuxdを自動で開始するように設定します。
$ sed -i -e "$i usbmuxd" /etc/rc.local
iPhoneとRaspberry PiをUSBケーブルで接続し、iPhoneでダイアログが表示されたら信頼するを選択します。
Webコンソールで続きを設定します。
Network -> Interfaces と遷移します。

“Add new interface” ボタンを押下 -> Nameに”iOS_WAN”を入力、Protocolから”DHCP client”を選択、Interfaceから”eth1″を選択します。

“Create Interface”ボタンを押下します。

Firewall Settingsタブ -> firewall-zoneでwanを選択します。

“Save”ボタンを押下します。

“Save & Apply”ボタンを押下します。
有線LANを抜いた状態でPCからインターネットにつながることを確認します。
Androidのテザリング経由でインターネットにつながるようにする
SSHでRaspberry Pi に接続します。
$ ssh root@192.168.1.1
テザリングを行えるように各種パッケージを導入
$ opkg update
$ opkg install kmod-usb-net-rndis kmod-nls-base kmod-usb-core kmod-usb-net kmod-usb-net-cdc-ether kmod-usb2
Android端末とRaspberry PiをUSBケーブルで接続してUSBテザリングを有効にします。
Webコンソールで続きを設定します。
Network -> Interfaces と遷移します。

Add new interface ボタンを押下 -> NameにAndroid_WANを入力、ProtocolからDHCP clientを選択、Interfaceからusb0を選択します。

Create Interfaceボタンを押下します。

Firewall Settingsタブ -> firewall-zoneでwanを選択します。

Saveボタンを押下します。

Save & Applyボタンを押下します。
Raspberry PiがLANケーブルが接続されておらず、電源ケーブルとUSBテザリングを有効にしたAndroid端末のみがつながった状態でPCからインターネットにつながることを確認します。
WANポートをLANポートに再設定
Network -> Wireless と遷移します。
WANのDeleteボタンを押下します。
LANのEditボタンを押下 -> Physical Settingsタブ -> Interfaceのeth0にチェック

Saveボタンを押下します。

Save & Applyボタンを押下します。
これでテザリング-Eithernetコンバータが完成しました。
オチ
Android11にそのまんまな機能あるやん…orz

有線LANアダプタを端末に接続するだけで今回作成したものと同じことがしっかりできました。