BUFFALO WZR-600DHP2 に OpenWrtを導入し Openvswitchをインストール

もう6年くらいは安定稼働していた BUFFALO製 WZR-600DHP2 というWiFi APが、2ヶ月くらい前から不安定な挙動をするようになってしまいました。突然、通信が切れたり、mDNS(multicast)が通らなくなったりするのです。

再起動を行うことで、少しの間は復旧するのですが、一週間に一度の定期再起動というのにも疲れてきましたので、INS64の頃に印象が良かったNEC製のAtermに買い換えました。

数十年ぶりに触るAtermはかなり残念な感じになってしまっていたのですが(syslogどころかlogの表示でできないだとか、Bridgeモードの仕様だとか・・)それはさておき、捨てる直前だったWZR-600DHP2にOpenWrtが導入できると知り導入してみました。

OpenWrtとは

家庭用ルータ向けのカスタムファームウェアです。対応している製品用にそれぞれカスタムイメージが作られています。

Official Web : https://openwrt.org/
対応しているデバイス一覧はこちら
もちろん WZR-600DHP2にも対応しています

OpenFlowが流行し始めた頃、BUFFALOのルータにOpenWRTとopenvswitchをインストールしてOpenFlow switchにするというblog記事が話題になった事がありました。

近頃すっかり耳にしなくなったOpenFlowですが、個人で遊べるOpenFlowスイッチが廃物利用で作れるとなれば、やらない手はありません。

更にラッキーな事に、BUFFALO製の家庭用ルータにはdebugモードが搭載されていて導入が簡単との評判なのです。

導入準備

ファームウェアのバージョンを確認する

BUFFALOからリリースされている最新版のファームウェアは、セキュリティ強化対策としてdebugモードが無効化されています。

もし最新の1.14が導入されていたら一つ前の1.13へダウングレードを行います。古いファームウェアは、BUFFALOのページからダウンロード可能です。

工場出荷状態へ初期化する

使っていた頃の設定が原因でハマると嫌なので、工場出荷状態への初期化を行います。

初期化の方法は以下の通り。

  1. 底面にあるresetスイッチを押しながら電源On
  2. 電源LEDが赤く点滅を始めたら押すのをやめる
  3. その後、LEDが緑に点灯したら初期化完了です

BUFFALO公式YouTubeに動画がありました。動画ではWZR-900DHP2ですが、方法は同じです。

DebugモードでWebUIを開く

工場出荷状態のLAN側IPアドレスは、192.168.11.1 が設定されています。

192.168.11.0/24へconnectedで到達できるネットワーク環境を整えてから、LAN側にケーブルを接続。その後、ブラウザで次のURLを開きます。

認証がかけられていますので、ID, Passを使ってloginします。

http://192.168.11.1/cgi-bin/cgi?req=frm&frm=py-db/55debug.html
ID: bufpy
Pass: otdpopypassword ※otdpopy+<設定されているadminパスワード>


Debugモードに入った画面

まずはメニューからtelnetdを起動してtelnetでloginします。

フラッシュメモリのバックアップを取得

ぼくは元に戻すつもりは無いのですが、念のためflashの中身をバックアップしておきます。WZR-600DHP2にはUSBポートがひとつあり、USBメモリスティックを挿してmountすることができますので、そこへバックアップを取りましょう。

bs=1で取得しているので、時間がかかります。

for でグルっと回したくなりますが、妙に不安定でたまに書き込みに失敗して roモードに落とされます。
※1 こんなんで大丈夫なのかな?
※2 mtdblock/7 は、何度やっても失敗しました。

書き込みエラーが発生し、USBメモリがRead Onlyになってしまった場合は、umount してからUSBメモリを抜き差しします。mountし直されたら、失敗したファイルから再開です。

OpenWRTのファームウェアをダウンロード

WZR-600DHP2のページにある、Firmware OpenWrt Installのリンクからダウンロードしておきます。

OpenWrtのインストール

OpenWrtのページを読んでいると、インストールの方法はいくつかあるそうです。一般的な方法はtftpです。しかし、WZR-600HDP2はmini CFE Web Serverを起動できるので、CEF Web Server経由でファームウェアをインストールするのが最も簡単だと思います。

telnetでWZR-600HDP2へログインし、次のコマンドを発行します。

これで次にブートした時、mini CFE Web Serverが起動するようになります。

注意: IPアドレスが変わります!

BUFFALO純正ファームでは、LANポートに192.168.11.1が割り当てられていました。しかし、mini CFE Web Serverは、192.168.1.1でListenを行います。

作業足場に192.168.1.0/24へのリーチャビリティ環境を整えておきましょう。

いったんリブート

リブートといっても電源のOff/Onです。電源が入ったらpingで疎通を確認します。

ttl=100のreplyが返ってきたら、mini CFE Web Serverが起動しています。ブラウザで http://192.168.1.1/ を開きましょう。

ファームウェアのアップロード

先にダウンロードしておいたファームウェアをアップロードします。

成功しました!少し待てと書かれているのでしばらくpingを打ちながら安定するのを待ちます。

無事にインストールが完了したようです。初期パスワードは何も設定されていないので、そのままLoginボタンを押すと・・・

やったー!無事にインストールが完了して利用できるようになりました!!

openvswitchのインストール

WAN interfaceを有効にする

インストール直後のLAN側Interfaceは、linux bridgeによる仮想switchに接続されている構成になっています。openvswitchを導入する時は、このlinux bridgeをopenvswitchで置き換える事になります。当然、一時的にLAN側InterfaceはDown状態になります。

インストール中に疎通が取れなくなるのは困ります。

WAN側ポートはlinux bridgeに追加されていませんので、WANポートをmanagement portとして利用してしまいましょう。

[system] -> [administration] -> [SSH Access] へ進み、wanのinterfaceを追加します。

WANポートでsshを有効にしても、iptablesによるフィルタでrejectされてしまいます。wanポートからの22番を許可するルールを追加します。面倒なので0/0で許可していますが、気になる方はもう少し厳密にどうぞ。

WanポートにIPアドレスを付与

初期設定でのWANポートはdhcpが有効になっています。

普段使っているネットワークでdhcpが有効になっていれば、LANケーブルをWANポートに接続するだけでIPアドレスが付与されます。ついでにdefault routeも付いて一石二鳥です。

ルーティング

パッケージリストをupdate

OpenWrtには、opkgというパッケージ管理ツールが付属しています。debianのdpkgに名前は似ていますが異なる物です。

デバイスからインターネットへ出られるようにしていれば、パッケージリストの更新、インストールができます。インターネットへ接続できなければ、ローカルにパッケージを持ってきてファイルを直接インストールする事も可能です。

しかし、依存パッケージなどもありますので、ネットに接続できるような環境を整えておくのがベストでしょう。

OpenWrt内部ではdnsmasqが稼働しています。なので何もせずとも名前解決はできるはずですが、名前解決に失敗するようなら /etc/resolv.conf を修正しておきましょう。

package listをupdate

openvswitchをインストール

無事にインスートルできました。

インストール直後は、openvswitchが無効になっています。有効化してから起動を行います。

/etc/config/openvswitch を修正

openvswitchの起動

openvswitchの設定

eth0.1がlan側のportになっていますが、linux bridgeで利用中です。最初にlinux bridgeを停止します。

この時点で、lan側のポートはdownするので注意が必要です。必ずwan側からloginした端末で作業を進めること。

openvswitchでbrdigeを作成し、eth0.1を参加させる

作業場サーバからのリーチャビリティが復活しました!

以上でopenvswitchの稼働まで確認できました。

あとはopenflow controller(今はどんなのがあるのだろう?)を接続してみたり、flowを入れてみたりして楽しめると思います!

linux bridgeを廃止してopenvswitchを利用するよう設定する

上ではマニュアル操作でlinux bridgeを停止/削除しopenvswitchのbridgeを作成しました。

しかし、このままでは再起動を行うと毎回linux bridgeが復活してしまいます。再起動後もopenvswitchのbrdigeが動作させる為には /etc/config/network ファイルを修正します。

WZR-600DHP2は、GbEポートが5つ持っています。写真のように右から1…5と呼ぶことにします。今までWANポートと呼んでいたGbEインターフェースは、Port 5です。

WZR-600DHPのポート割り振り

構成図

どのように使うかは個人で異なると思います。ぼくはこんな様に設定してみました。

/etc/config/network

interface設定や起動時に付けるip addr.等が設定されているファイルです。記述を間違えるとloginする手段が無くなり、ファームを書き込み初期化するしか無くなってしまいますのでご注意下さい。

準備

bridgeに参加していないポート(WANポート)からloginした端末を使い、ovsの設定を行います。

br1 .. br4 の bridgeを作成し、それぞれにinterfaceを追加します。存在しないinterfaceを追加するとエラーになりますが、DBには書き込まれているので、正しいconfigを書いた後に再起動すると、正常に動くようになります。

物理interfaceの定義

ポート番号 device名
1 (LAN) eth0.1
2 (LAN) eth0.2
3 (LAN) eth0.3
4 (LAN) eth0.4
5 (WAN) eth0.5

macアドレスを指定しないと、同じmacアドレスが振られる事がありました。同じブロードキャストドメイン内に同じmacアドレスを持つinterfaceが存在すると通信が不安定になります。それを避けるために、全てのinterfaceに異なるmacアドレスを指定しています。

ここのポート番号とデバイス名のマッピングは、下に出てくるswitch_vlanで対応させます。

仮想interfaceの定義

br1は、staticでIPアドレスを付与します。
eth0.5は、dhcp経由でIPアドレスを取得します。

物理interfaceとポート番号のマッピング

option vlan ‘vlanID’のVlanIDが、eth0.x にマッピングされます。そしてそのeth0.xに、どの物理ポートが割り当てられるか?を option ports ‘0 5t’で指定します。

数字はポート番号。0から始まるので注意です。’t’が付くと、taggedを指定した事になります。

正しく書けている事を確認したら、一度再起動を行います。

確認

openvswitchの状態

interfaceの状態

意図した構成を作ることができました!

カテゴリー PC

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)