Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@daredeshow

OpenWRT+mwan3でWAN回線を冗長化する

More than 1 year has passed since last update.

動機

コロナウイルスの影響が強くなってきて、幸いにも私の仕事は自宅でも行えるため私の会社も自宅勤務するよう指示が来るようになった。3月の初旬だろうか。そのころから家のネットワークが極端に遅くなってきた。私の家はマンションで1本の100Mbps回線を共有している。おそらく休み中の子どもがいる家庭があるせいか、おそらく動画サイトなどを見ているのであろうが、午後〜夜間にかけておおよそ2,3Mbps、ひどいときには1Mbpsを切ることもある。これはかなわんとUQ WiMAXを契約、安定的に3,40Mbps出るようになりまずは一息つけた。UQ WiMAXは一応公称では800Mbps程度出るらしいのだが私の宅内ではこの程度であった。しかしまあ満足はしている。

しかしどうも私の使い方では、UQ WiMAXの制限である 3日で10GB以内 には収まりそうにないことがわかってきた。そこで普段は今迄使っているマンションのネットを使うようにして、どうしても速度が欲しいときだけWiMAXに切り替えるようにしたい。そういうことで、まずはWAN回線の冗長化をOpenWRTでできるように設定した。

図にすると以下のような感じ。
200331-OpenWRT-mwan01.png

概要

OpenWRTではmwan3(Multiple WAN)というパッケージでWAN回線の冗長化を実現することができる。

mwan3ではActive-Standbyのような冗長化もできるし、両回線をロードバランスするようなActive-Activeの構成も取ることができる。またOpenWRTのWebインターフェイス(luci)経由で簡便に設定することができる。

導入と設定

ではmwan3の導入と設定を行っていく。構成は上の図の通りであるが、以下に改めて記述する。

  • ハードウェア: RaspberryPi 3B+
  • OpenWRT version 19.07.2
    • LAN回線:
      • RaspberryPi内蔵のEthernetインターフェイス
      • ネットワークデバイス: eth0
      • 192.168.20.254/24
    • WAN回線(1) - 以下ではwanとしている:
      • USB-Ethernetアダプタ
      • ネットワークデバイス: eth1
      • DHCPクライアント
    • WAN回線(2) - 以下ではwanbとしている:
      • RaspberryPi内蔵のWifi, Wifiルータ経由のUQ WiMAX
      • ネットワークデバイス: wlan0
      • DHCPクライアント

RaspberryPiをOpenWRTのfactoryイメージでブートし、LAN側のIPアドレスをセットしたところからスタート。

事前設定

mwan3をインストールする前にいくつか事前設定を行う。

2つ目のWANのセットアップ

mwan3のデフォルト設定では、1つ目のWAN回線の名称を “WAN” とし、2つ目のWAN回線の名称を “WANB” としている。WAN回線を設定するときにこのような名称にしておくとmwan3の設定が楽になる。

1つ目のWAN回線はUSB接続のEthernetアダプタで設定するのだがカーネルモジュールがまだないので、先に2つ目のWAN回線をセットアップして、カーネルモジュールをインストールする。

[Network]-[Wireless] を選択する。
20200331-001.jpg

[Scan]ボタンを押して近傍のSSIDを探索する。
20200331-002.jpg

Wifiルーターのアクセスポイントの [Join Network] をクリック
20200331-003.jpg

Wifi接続時に名前を設定するが、ここを wanb に設定する。パスフレーズを入れて[Submit]をクリック。
20200331-004.jpg
20200331-005.jpg

[Save & Apply]をクリック
20200331-006.jpg

[Network]-[Interface]を選択してインターフェイス一覧の画面に戻った時に、”WANB”という名前でWAN接続ができていればOK
20200331-007.jpg

USB-Ethernetアダプタののカーネルモジュールをインストールする

sshでOpenWRTにログインする

$ ssh root@192.168.20.254

(任意)パッケージを更新する

# opkg update
# opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade

USB-Ethernetアダプタのカーネルモジュールをインストールする

# opkg install kmod-usb-net-asix

再起動する

# reboot

再起動後USB-Ethernetアダプタをつける。新しいネットワークデバイス(この例では eth1 )が認識されていればOK

root@OpenWrt:~# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br-lan state UP qlen 1000
    link/ether b8:27:eb:9b:73:02 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:1d:73:68:32:6f brd ff:ff:ff:ff:ff:ff
4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP qlen 1000
    link/ether b8:27:eb:ce:26:57 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.102/24 brd 192.168.100.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::ba27:ebff:fece:2657/64 scope link 
       valid_lft forever preferred_lft forever
5: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether b8:27:eb:9b:73:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.254/24 brd 192.168.20.255 scope global br-lan
       valid_lft forever preferred_lft forever
    inet6 fdfd:2455:1bb1::1/60 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::ba27:ebff:fe9b:7302/64 scope link 
       valid_lft forever preferred_lft forever

1つ目のWANのセットアップ

[Network]-[Interface] を選択
“Add new interface…” をクリックする
20200331-008.jpg

インターフェイスの名前を “wan”、プロトコルを ”DHCP client”、インターフェイスは先ほど追加したUSB-Ethernetアダプタのデバイス名(この例では eth1 )に設定し、[Create Interface]をクリック
20200331-009.jpg

元の画面に戻ってきたら、[Apply unchecked]を選択してクリック
20200331-011.jpg

コマンドラインから再起動する

# reboot

再起動後、[Status]-[Overview]画面の中のNetworkで、2つのUpstreamが登録されていることを確認。
20200331-013.jpg

2つのWANの利用優先度をセット

それぞれのUpstreamに利用優先度を設定する。WANを優先し、WANBはバックアップ回線として優先度を低下させる。
[Network]-[Interface]を開く。
WANの [Edit] をクリック。
20200331-014.jpg

[Advanced Settings]タブを開き、”Use gateway metric”を空欄->10に変更。[Save]を押して変更を確定。
20200331-015.jpg

同様に WANB の[Edit]をクリック
20200331-016.jpg

[Advanced Settings]タブを開き、”Use gateway metric”を空欄->20に変更。[Save]を押して変更を確定。
20200331-017.jpg

[Save & Apply]をクリックして変更を確定させる
20200331-018.jpg

ターミナルでログインしてルーティングテーブルを確認する。以下のようにデフォルトルートが2つあればOK。

root@OpenWrt:~# ip route show
default via 172.22.0.1 dev eth1  src 172.22.1.14  metric 10 
default via 192.168.100.1 dev wlan0  src 192.168.100.102  metric 20 
172.22.0.0/21 dev eth1 scope link  metric 10 
192.168.20.0/24 dev br-lan scope link  src 192.168.20.254 
192.168.100.0/24 dev wlan0 scope link  metric 20 

それぞれのWANの疎通確認

それぞれのUpstreamが動いていることをpingで確認

1つ目のWAN回線の確認
root@OpenWrt:~# ping -c 1 -I 'eth1' www.google.com
PING www.google.com (172.217.175.68): 56 data bytes
64 bytes from 172.217.175.68: seq=0 ttl=52 time=7.220 ms

--- www.google.com ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 7.220/7.220/7.220 ms
2つ目のWAN回線の確認
root@OpenWrt:~# ping -c 1 -I 'wlan0' www.google.com
PING www.google.com (172.217.175.68): 56 data bytes
64 bytes from 172.217.175.68: seq=0 ttl=50 time=98.955 ms

--- www.google.com ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 98.955/98.955/98.955 ms

mwan3の設定

mwan3をインストールする

# opkg update
# opkg install luci-app-mwan3

インストールされるとWebインターフェイス(luci)が自動的に再起動するので、再度ログインする。
20200331-019.jpg

ログインすると、トップメニューに新たに [Status]-[Load Balancing], [Network]-[Load Balancing] が増え、mwan3の設定を行うことができるようになっている。
20200331-020.jpg

[Network]-[Load Balancing]を選択する
インターフェイスの “wan6”, “wanb6” を削除する
[Save & Apply]をクリックして変更を反映
20200331-021.jpg

wanb 行の [Edit] ボタンをクリック
20200331-025.jpg

“Enabled”にチェックを入れ、[Save & Apply] をクリック
20200331-026.jpg
20200331-027.jpg

[Rules] タブを選択、https行を [Delete] ボタンで削除
20200331-022.jpg

default_rule 行の [Edit] ボタンをクリック
20200331-023.jpg

一番下の “Policy assigned” のプルダウンリストから “wan_wanb” を選択し、[Save & Apply] ボタンをクリック。
20200331-024.jpg

最後にOpenWRTを再起動する。

動作確認

普段はWAN回線を使用し、WAN回線が断になるとWANB回線に切り替わる。WAN回線が断になってだいたい5秒くらいで切り替わる。アベマTV流しながら回線切り替えてみたが断は認識できなかった。ステータス画面([Status]-[Load Balancing]で確認できる)でWAN回線が断状態に切り替わっていることがわかると思う。

回線切り替えの様子

WAN回線が復帰すると、既に通信中のセッションは引き続きWANB回線を使い続ける。新規接続は再びWAN回線を使うようになる。failbackをシビアにやりたいのであれば、WAN回線を復帰させた後にWANB回線を断させればいい。

手動でWAN, WANB回線を上げ下げするにはifup/ifdownコマンドを使えばいい。

# ifup wan
# ifup wanb
# ifdown wan
# ifdown wanb
2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?