Rakuten WiFi Pocketを5GHzでテザリング

# 経緯
あるところにRakuten回線を契約し、キャンペーンで手に入れた激安モバイルルーターを使用している男がいました。男はしばらく満足そうにしていましたが、１つ難点がありました。モバイルルーターの周波数帯域が2.4GHzしか対応していなかったのです。電子レンジを使用すればZoomが落ち、隣の家のルーターとチャンネルがかぶっているせいで速度が出ない。これを解決するため男は家に余っているラズパイを使いモバイルルーターと余っていた5GHz対応のルーターをブリッジ接続させようとするのでした。(愚策)

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1685961/dbd468b2-cba7-a430-04bc-c28196391387.png)

# 使用したもの
- Raspberry Pi 3 Model B+
    - microSDカード
    - 電源アダプタ
- Rakuten WiFi Pocket R310
- USB2.0 typeA - MicroB ケーブル
- LANケーブル
- 5GHz対応ルーター[^1]

# USBテザリングの方法[^2]
USBでRakuten WiFi Pocket R310(以下R310)をラズパイに接続した後、root権限で`systemctl restart networking`コマンドを実行するとテザリングすることが出来ます。OSの起動前に接続しておくと上記のコマンドを入力しなくても認識させる事が出来ます。


# 本編
以下の説明はラズパイをR310でUSBテザリングさせた状態で説明します。また、ラズパイはSSH接続ではなくキーボードを繋ぎ直接制御しています。設定が面倒なので。

## OSのインストール
今回使用したOSは **Raspberry Pi OS Lite arm64 (2021-05-28)** です[^3]。ダウンロードは[こちら](https://downloads.raspberrypi.org/raspios_arm64/images/)。32bit版でも他のリリース日でもRaspberry Pi OS系なら問題ありません。OSのインストールと初期設定の方法は本記事では省略します。

※Raspberry Pi OSを選んだ理由はR310を追加ドライバー無しでUSBテザリングすることができるからです。Ubuntuで試しましたがドライバーが入っていなかった為やめました。

## bridge-utilsのインストール
OSのインストールと初期設定が終了したら最初にブリッジ用ソフトウェアである`bridge-utils`のインストールを行います。

```
sudo apt install bridge-utils
```

ソフトウェアのインストールが完了したらroot権限で設定ファイルを開き、下記の内容を追記します。

```
sudo nano /etc/network/interfaces
```

```:/etc/network/interfaces
auto br0
iface br0 inet dhcp
bridge_ports eth0 eth1
```

書き込んだら一度OSを再起動させます。その後`brctl`コマンドを実行し、ブリッジがちゃんと構成されているか確認します。

```
$ brctl show
bridge name     bridge id                STP enabled      interfaces
br0             XXXX.XXXXXXXXXXXX        no               eth0
                                                          eth1
```

これでR310とラズパイのLANポートがブリッジ接続されました。試しにお使いのPCのLANポートをラズパイに接続してみてください。正常に設定できていればPCが有線でインターネットに接続できると思います。正常に稼働していることが確認できたら5Ghz対応Wi-Fiルーターをラズパイに接続して下さい。説明は以上となります。下記の項目はオプションです。

# 自動再接続
一度R310を取り外してしまうとテザリングが解除されてしまいます。再接続させるために毎回コマンドを入力するのは面倒なので自動化させます。

## シェルスクリプトの作成
下記のファイルを新規作成します。

```:/home/pi/reconnect.sh
#!/bin/bash

while true
do
  if ifconfig | grep -c "eth1" > /dev/null ; then
    sleep 3
  elif lsusb | grep -c "19d2" > /dev/null ; then
    echo restart networking
    systemctl restart networking
    sleep 1
  else
    sleep 1
  fi
done
```

実行権限を付与します。

```
sudo u+x /home/pi/reconnect.sh
```

root権限で上記のシェルスクリプトを実行すると自動で再接続することが分かると思います。

## サービスの作成
下記のサービス定義ファイルを新規作成します。書き込みにはroot権限が必要です。

```:/etc/systemd/system/R310.service
[Unit]
Description = R310 auto reconnect

[Service]
ExecStart = /home/pi/reconnect.sh
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target
```

サービスが認識されたか確認します。

```
$ sudo systemctl list-unit-files --type=service | grep R310
```

認識されていることがわかったらサービスを自動起動の有効化、起動をします。

```
sudo systemctl enable R310
sudo systemctl start R310
```

これでUSBテザリングの自動再接続させる為の設定が完了しました。OSを再起動させてサービスがちゃんと起動しているかどうかログを確認することを推奨します。

# ブチ切りしたい
ラズパイをシャットダウンさせるためには毎回シャットダウンコマンドを実行しなければなりません。毎回キーボードから入力するのは面倒なので電源ブチ切りしても問題ないようにします。SDカードを書き込み禁止にすることで急な電源の切断によるファイルの破損を防ぎます。

## イーサネットの設定を変更
原因は不明ですがSDカードを書き込み禁止にするとイーサネットが`eth0`としてちゃんと認識しなくなります。これを防ぐためにカーネルのパラメータを変更します。以下のパラメータをroot権限で追記します。追記する際の注意点がいくつかあります。

- 既に書かれている文は消さないでください。**最悪の場合OSが起動しなくなります。**
- パラメータは**全て１行目**に書かれている必要があります。
- パラメータは１つ１つスペースで区切って下さい。

```/boot/cmdline.txt
net.ifnames=0 biosdevname=0
```

## SDカード書き込み禁止設定
Raspberry Pi OSの場合、SDカードの書き込み禁止設定は非常に楽です。
ラズパイの設定ツールを開きます。

```
sudo raspi-config
```

真っ青な背景のGUIが表示されたと思います。
`4 Performance Options`を選択、続いて`P3 Overlay File System`を選択します。
`Would you like the overlay file system to be enabled?`と聞かれたら`yes`と選択。
`Would you like the boot partition to be write-protected?`と聞かれたら上記と同様に`yes`を選択。

以上で書き込み禁止の設定が完了しました。
設定が完了したら`raspi-config`から抜け、OSを再起動させてください。以降はブチ切りしていただいて構いません。

# 結論
クレードル付きか5GHz対応のモバイルルーター買った方が楽

# 参考文献
https://www.itmedia.co.jp/news/articles/2008/28/news018.html

https://qiita.com/DQNEO/items/0b5d0bc5d3cf407cb7ff

http://wp.hima-jin.info/2021/02/23/356/

http://faster-than-the-sol.blogspot.com/2020/07/rp-overlayfs.html

[^1]: 筆者はWi-FiルーターではなくここにPlayStation4を直結しています。
[^2]: Rakuten WiFi Pocket R310の取扱説明書に記載されていませんがUSBテザリング出来ます。ちなみにWindowsでもテザリング可能です。
[^3]: Raspberry Pi OSのarm 64bit版はまだベータテストバージョンだそうです。