おうちの回線について
現在、en ひかりクロスを自宅に引いています。特に障害などで困ったことはありませんが、なんとなく冗長化したくなりました。
いろいろと調べてはみたものの、固定回線や ○○Air などはどうしても月額数千円はかかってしまいます。
使う頻度が低い回線に毎月そこまで支払えるほど大富豪ではないので、今回は OpenWrt と 4G モデムと povo を使って本体代と月額料金を限界まで抑えてバックアップ回線を用意しようと思います。
使用する機材
TP-Link Archer C7 v5
USB ポートを搭載していて、Flash16MiB/RAM128MiB を搭載しており、中古価格が 2,000 円程度と安いためこちらを使用します。
Sierra Wireless EM7455
技適マークの付いた EM7455 を aliexpress で発掘したのでこちらを使用します。QMI に対応しているデバイスなので、OpenWrt 側でも QMI 通信を使用します。
だいたい 2~3,000 円くらいです。
落とし穴が一つあり、○○ メーカー用などと書かれているモジュールはロックがかかっており、対応するデバイス以外で使用できないためファームの書き換えが必要になります。
4G ルーター用などと書かれているものが良いと思います。
対応バンド
B1 (2100)、B2 (1900)、B3 (1800)、B4 (1700)、B5 (850)、B7 (2600)、B8 (900)、B12 (700)、B13 (700)、B20 (800) 、B25 (1900)、B26 (850)、B29 (700)、B30 (2300)、B41 (2500/TDD)
Caution
また 4G 通信は技適未取得機器を用いた実験等の特例制度の対象外なので、自分で技適を通すか技適の通ったモジュールを買う以外に選択肢はありません。
NGFF <-> USB コンバータ
NGFF モジュールを USB ポートで使えるようにするためのコンバータです。
外部電源ポートがついているものが良いと思います。
こちらは 500 円くらいで買えると思います。
OpenWrt のセットアップ
特別なことは何もないです。
Archer C7 の場合、WebUI から OpenWrt を投入できます。
Tip
firmware.binのような短い名前にしてください。
インストール後の画面

必要なパッケージのインストール
ssh のコマンドラインか WebUI から次のパッケージをインストールします。
QMI 用のパッケージとシリアル通信用のものです。
kmod-usb-net-qmi-wwan uqmi luci-proto-qmi picocom kmod-usb-serial-qualcomm modemmanager luci-proto-modemmanager
インストールが終わったら再起動します。
再起動後、ネットワーク -> インターフェース -> インターフェースを新規作成から、プロトコル一覧に QMIセルラーモデムマネージャーがあるか確認してください。
Note
ModemManager についてはあとで解説します。
QMIセルラーで接続できた方は ModemManager を入れなくていいです。

モジュール動作チェック
WindowsPC に刺して通信チェックをします。


モデム動作モードの切り替え
Note
今回私が購入したのは Generic 版なので、MBIM オンリーから QMI までの切り替えを書きます。
参考リンク: ThinkPad X270 に LTE モジュール Sierra Wireless EM7455 を取り付ける。
AT 用 COM ポートの有効化
私が買ったモジュールは MBIM オンリーモード(COMP 9)で動作しておりシリアル通信ができなかったため、まずは COM ポートの有効化を行います。
適当な Ubuntu 系の LiveUSB 環境を用意して、次の手順を実行します。
QMI ユーティリティのインストール
# apt update
# apt install libqmi-utils
ModemManager の停止
# systemctl stop ModemManager
モード変更
現在のモードを確認します。
# qmicli -p -d /dev/cdc-wdm0 --dms-swi-get-usb-composition
[/dev/cdc-wdm0] Successfully retrieved USB compositions:
USB composition 6: DM, NMEA, AT, QMI
USB composition 8: DM, NMEA, AT, MBIM
[*] USB composition 9: MBIM
このように、COMP9だと AT ポートが使えません。
買ったときにCOMP6やCOMP8だった方はここをスキップして QMI の有効化から続けてください。
COMP8へ変更します。
# qmicli -p -d /dev/cdc-wdm0 --dms-swi-set-usb-composition=8
# qmicli -p -d /dev/cdc-wdm0 --dms-set-operating-mode=reset
モデムが再起動して OS で認識されたら取り外して OK です。
LiveUSB 環境もこの後は使わないので閉じて構いません。
OpenWrt 側で QMI を有効化
picocom でモデムの AT ポートに接続し、モードを切り替えます。
# picocom /dev/ttyUSB2
picocom v3.1
port is : /dev/ttyUSB2
flowcontrol : none
baudrate is : 9600
parity is : none
databits are : 8
stopbits are : 1
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
hangup is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv -E
imap is :
omap is :
emap is : crcrlf,delbs,
logfile is : none
initstring : none
exit_after is : not set
exit is : no
Type [C-a] [C-h] to see available commands
Terminal ready
# ここからコマンド実行
AT!ENTERCND="A710"
OK
AT!USBCOMP=1,1,10D
OK
AT!RESET
AT!RESET実行後は接続が切れるので、Ctrl+A->Ctrl+Xで picocom を終了します。
状態確認
# ls /dev
bus mtd0 mtd3ro mtd8 mtdblock4 ptmx ttyS1 ttyS4 urandom
cdc-wdm0 mtd0ro mtd4 mtd8ro mtdblock5 pts ttyS10 ttyS5 watchdog
console mtd1 mtd4ro mtd9 mtdblock6 random ttyS11 ttyS6 zero
fd mtd10 mtd5 mtd9ro mtdblock7 shm ttyS12 ttyS7
full mtd10ro mtd5ro mtdblock0 mtdblock8 stderr ttyS13 ttyS8
gpiochip0 mtd1ro mtd6 mtdblock1 mtdblock9 stdin ttyS14 ttyS9
hwrng mtd2 mtd6ro mtdblock10 null stdout ttyS15 ttyUSB0
kmsg mtd2ro mtd7 mtdblock2 port tty ttyS2 ttyUSB1
log mtd3 mtd7ro mtdblock3 ppp ttyS0 ttyS3 ttyUSB2
の後に/dev/cdc-wdm0が見えていれば書き換え完了です。
ModemManager のインストール
私の環境だといろいろやらかしてしまったので ModemManager に切り替えます。
詳細はおまけをご覧ください。
Warning
インターフェース設定も APN 設定すればなんとかなります。
modemmanagerとluci-proto-modemmanagerをインストールして、ルーターを再起動します。

接続設定
インターフェース作成
インターフェースを作成します。
適当な名前を付け、プロトコルにモデムマネージャーを選択して作成します。

インターフェース設定
APN にpovo.jp、認証タイプはなしにします。
他はデフォルトで大丈夫です。

ファイアーウォール設定
wanゾーンを割り当てます。

接続チェック
保存して適用すると、IPv4 と v6 アドレスが表示されているはずです。
適当なサイトにアクセスして、ページが閲覧できれば IPv4 ルーターの構築は完了です。
見れない場合は、ネットワーク -> インターフェース -> wwan -> 詳細設定 -> カスタム DNS サーバーから適当に1.1.1.1などを指定してみてください。

※wanとwan6が無いのは一時的に消してるだけなので気にしないでください。
nmcli の接続ステータス
root@OpenWrt:~# mmcli -L
/org/freedesktop/ModemManager1/Modem/0 [Sierra Wireless, Incorporated] EM7455B
root@OpenWrt:~# mmcli -m 0
----------------------------------
General | path: /org/freedesktop/ModemManager1/Modem/0
| device id: b104fdee9690f126c318a339012b2R***********
----------------------------------
Hardware | manufacturer: Sierra Wireless, Incorporated
| model: EM7455B
| firmware revision: SWI9X30C_02.24.03.00 r6978 CARMD-EV-FRMWR2 2017/03/02 13:36:45
| carrier config: default
| h/w revision: 1.0
| supported: gsm-umts, lte
| current: gsm-umts, lte
| equipment id: 35343108*******
----------------------------------
System | device: /sys/devices/platform/ahb/1b000000.usb/usb1/1-1
| physdev: /sys/devices/platform/ahb/1b000000.usb/usb1/1-1
| drivers: qmi_wwan, qcserial
| plugin: sierra
| primary port: cdc-wdm0
| ports: cdc-wdm0 (qmi), ttyUSB0 (ignored), ttyUSB1 (gps),
| ttyUSB2 (at), wwan0 (net)
----------------------------------
Status | unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (0), sim-puk2 (0)
| state: connected
| power state: on
| access tech: lte
| signal quality: 42% (recent)
----------------------------------
Modes | supported: allowed: 3g; preferred: none
| allowed: 4g; preferred: none
| allowed: 3g, 4g; preferred: 4g
| allowed: 3g, 4g; preferred: 3g
| current: allowed: 3g, 4g; preferred: 4g
----------------------------------
Bands | supported: utran-1, utran-3, utran-4, utran-5, utran-8, utran-2,
| eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8,
| eutran-12, eutran-13, eutran-20, eutran-25, eutran-26, eutran-29,
| eutran-41
| current: utran-1, utran-3, utran-4, utran-5, utran-8, utran-2,
| eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8,
| eutran-12, eutran-13, eutran-20, eutran-25, eutran-26, eutran-29,
| eutran-41
----------------------------------
IP | supported: ipv4, ipv6, ipv4v6
----------------------------------
3GPP | imei: 35343108********
| operator id: 44051
| operator name: KDDI
| registration: home
| packet service state: attached
----------------------------------
3GPP EPS | ue mode of operation: csps-2
| initial bearer path: /org/freedesktop/ModemManager1/Bearer/2
| initial bearer apn: povo.jp
| initial bearer ip type: ipv4v6
----------------------------------
SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0
| sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
| slot 2: none
----------------------------------
Bearer | paths: /org/freedesktop/ModemManager1/Bearer/4
フォールバック回線を設定する
mwan3を使用して、有線回線が落ちたとき自動でwwanにフォールバックするように設定します。
mwan3はデフォルトだと IPv4/IPv6 デュアルスタック回線を 1 つのインターフェースで扱えないため、論理インターフェースを作成します。

※デバイスの@wwan6は@wwanに読み替えてください。

※デバイスの@wwan6は@wwanに読み替えてください。

mwan3 のインストール
mwan3とluci-app-mwan3をインストールします。

インターフェースメトリック設定
各インターフェースメトリックを変更します。
wanとwan6を 10 に、wwanとwwan6を 20 に設定します。
wan

wan6

wwan

wwan6

インターフェース設定
ネットワーク -> MultiWan Managerに移動します。
wanbとwanb6を削除します。
インターフェースタブへ移動し、wwanとwwan6を追加します。

それぞれ画像のように設定します。
wwan

wwan6

メンバー設定
Memberタブへ移動します。
既存の設定をすべて削除します。
wan
wan_m1_w1という名前のメンバーを追加します。
インターフェース -> wan
メトリック -> 1
重み -> 1
に設定します。

wan6
wan6_m1_w1という名前のメンバーを追加します。
インターフェース -> wan
メトリック -> 1
重み -> 1
に設定します。

wwan
wwan_m2_w1という名前のメンバーを追加します。
インターフェース -> wan
メトリック -> 2
重み -> 1
に設定します。

wwan6
wwan6_m2_w1という名前のメンバーを追加します。
インターフェース -> wan
メトリック -> 2
重み -> 1
に設定します。

ポリシー設定
ポリシータブへ移動します。
既存の設定をすべて削除し、failover_v4とfailover_v6という名前のポリシーを追加します。
IPv6 対応のサイトには IPv6 優先で接続したいので、wan6_m1_w1 -> wan_m1_w1、 wwan6_m2_w1 -> wwan_m2_w1の順で追加します。

ルール設定
httpsルールを削除し、default_rule_v4とdefault_rule_v6をそれぞれ画像のように設定します。

※failover_policyはfailover_v4に読み替えてください。

※failover_policyはfailover_v6に読み替えてください。
動作確認
ここまで設定が完了したら WAN の有線ケーブルを抜き、4G ネットワークにフェイルオーバーするか確認します。
自動で切り替わっていれば、構築からバックアップまですべて完了です。
お疲れ様でした。
おまけ
QMI セルラープロトコルで接続する
インターフェース作成前に次のコマンドを実行します。
私は先にインターフェースを作成してしまったので、ロックをどうやっても外せずModemManagerに移行しました。
EM7455 は IP アドレス形式に802.3ではなくraw_ipを要求するので、openwrt から渡される形式を変えてあげます。
# ifconfig wwan0 down
# echo Y > /sys/class/net/wwan0/qmi/raw_ip
ifconfig wwan0 up
再起動後も適用されるように、/etc/rc.localを編集します。
exit 0の上に追記します。
sleep 15
echo Y > /sys/class/net/wwan0/qmi/raw_ip
たぶん大丈夫です。
たぶん。
ロックされててOperation not Permittedとか言われたらModemManagerに切り替えてください。
