Cover Image for OpenWrt & 4Gモデム & povoで月額無料のバックアップ回線を作った

OpenWrt & 4Gモデム & povoで月額無料のバックアップ回線を作った

おうちの回線について

現在、en ひかりクロスを自宅に引いています。特に障害などで困ったことはありませんが、なんとなく冗長化したくなりました。
いろいろと調べてはみたものの、固定回線や ○○Air などはどうしても月額数千円はかかってしまいます。
使う頻度が低い回線に毎月そこまで支払えるほど大富豪ではないので、今回は OpenWrt と 4G モデムと povo を使って本体代と月額料金を限界まで抑えてバックアップ回線を用意しようと思います。

Warning


電波法とかめんどくさいので。

電波法うんぬんが書いてあるところ

使用する機材

openwrt.org
openwrt.org favicon https://openwrt.org/toh/tp-link/archer_c7

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のような短い名前にしてください。

インストール後の画面

001.png

必要なパッケージのインストール

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 を入れなくていいです。

002.png

モジュール動作チェック

WindowsPC に刺して通信チェックをします。

03.png

04.png

モデム動作モードの切り替え

Note


今回私が購入したのは Generic 版なので、MBIM オンリーから QMI までの切り替えを書きます。

参考リンク: ThinkPad X270 に LTE モジュール Sierra Wireless EM7455 を取り付ける。

AT 用 COM ポートの有効化

私が買ったモジュールは MBIM オンリーモード(COMP 9)で動作しておりシリアル通信ができなかったため、まずは COM ポートの有効化を行います。
適当な Ubuntu 系の LiveUSB 環境を用意して、次の手順を実行します。

QMI ユーティリティのインストール

console
# apt update
# apt install libqmi-utils

ModemManager の停止

console
# systemctl stop ModemManager

モード変更

現在のモードを確認します。

console
# 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へ変更します。

console
# 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 ポートに接続し、モードを切り替えます。

console
# 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 を終了します。

状態確認

console
# 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をインストールして、ルーターを再起動します。

09.png

接続設定

インターフェース作成

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

05.png

インターフェース設定

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

06.png

ファイアーウォール設定

wanゾーンを割り当てます。
07.png

接続チェック

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

10.png
※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 つのインターフェースで扱えないため、論理インターフェースを作成します。

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

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

25.png

mwan3 のインストール

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

11.png

インターフェースメトリック設定

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

wan

12.png

wan6

13.png

wwan

14.png

wwan6

26.png

インターフェース設定

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

15.png

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

wwan

16.png

wwan6

27.png

メンバー設定

Memberタブへ移動します。
既存の設定をすべて削除します。

wan

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

17.png

wan6

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

18.png

wwan

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

19.png

wwan6

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

28.png

ポリシー設定

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

image.png

ルール設定

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

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

22.png
※failover_policyはfailover_v6に読み替えてください。

動作確認

ここまで設定が完了したら WAN の有線ケーブルを抜き、4G ネットワークにフェイルオーバーするか確認します。
自動で切り替わっていれば、構築からバックアップまですべて完了です。
お疲れ様でした。

おまけ

QMI セルラープロトコルで接続する

インターフェース作成前に次のコマンドを実行します。
私は先にインターフェースを作成してしまったので、ロックをどうやっても外せずModemManagerに移行しました。
EM7455 は IP アドレス形式に802.3ではなくraw_ipを要求するので、openwrt から渡される形式を変えてあげます。

console
# ifconfig wwan0 down
# echo Y > /sys/class/net/wwan0/qmi/raw_ip
ifconfig wwan0 up

再起動後も適用されるように、/etc/rc.localを編集します。
exit 0の上に追記します。

/etc/rc.local
sleep 15
echo Y > /sys/class/net/wwan0/qmi/raw_ip

たぶん大丈夫です。
たぶん。
ロックされててOperation not Permittedとか言われたらModemManagerに切り替えてください。