OpenWRT wireless 設定編

OpenWRTのWiFiを設定してみる

Buffalo WSR-600DHPをOpenWRT化することができたので、早速動かしてみようと思ったが、無線機能が動いていない!?
ここからWi-Fiができるようになるまで奮闘する。
※奮闘した結果、まだ動いていませんorz....... OpenWRTの操作の参考になればと思います。 OpenWRT wiki にある通りに

#uci show wireless

uciを見ても何も表示されない。/etc/config/wirelessに設定を書く見たいだけど、そもそも/etc/config/wirelessのファイルが無かった。 これでは何もおきないはずなので、とりあえずこのファイルを作成することに。
wikiではこんな感じになってる。

#config 'wifi-device' 'wl0'
    option 'type'    'broadcom'
    option 'channel' '6's

typeとかwifi-deviceとかは自分の環境に合わせる必要がありそう。 必要そうなパッケージは入れておく。

#opkg install pciutils
#opkg install iwinfo

とりあえずルータの持っているwireless deviceを調べてみる。

root@OpenWrt:~# lspci
00:00.0 PCI bridge: Device 0e8d:0801 (rev 01)
00:01.0 PCI bridge: Device 0e8d:0801 (rev 01)
01:00.0 Network controller: Ralink corp. RT3091 Wireless 802.11n 1T/2R PCIe
02:00.0 Network controller: MEDIATEK Corp. Device 7603

チップセットは正しく認識されている様子。
「Ralink corp. RT3091 Wireless」用のモジュールをインストール

root@OpenWrt:~# opkg install kmod-rt2800-pci wireless-tools

上記でインストールされない場合は

https://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7621/packages/base/ からkmod-rt2800-pci_3.18.23+2015-03-09-3_ramips_1004kc.ipkをダウンロードして
同じく" opkg install ファイル名 "でインストールできるはず。
iw listコマンドでデバイスが正しく認識されていることがわかる。

root@OpenWrt:~# iw list
Wiphy phy0
        max # scan SSIDs: 4
        max scan IEs length: 2257 bytes
        Retry short limit: 7
        Retry long limit: 4
        Coverage class: 0 (up to 0m)
        Available Antennas: TX 0 RX 0
        Supported interface modes:
        .....
        .....

さらにlsmodで今まで「mac80211 381619 1 mt76pci」だったのが
「mac80211 381619 4 rt2800lib」になっていることが確認できる。
これで無線が使用できる。
はずだったが....
wireless signal がゼロになっているorz
以下デバックのために便利だったコマンド一覧

uci set wireless.@wifi-device[0].disabled=0; uci commit wireless; wifi
iw
iwconfig
iwinfo
iw dev wlan info
iw phy phy0 list
wifi up
wifi down
dmesg
logread /dev/log
uci show wireless

Buffalo WSR-600DHPにOpenWRTを入れる

ヨドバシカメラで購入したバッファロールータをOpenWRT化してみる

 SDNコントローラからコントロール可能な無線APが作りたかったので、OpenWRTを使ってみることにする。はじめはHostapdを使ってWhitebox switch的なものを作ろうとしていたが、2.4Ghzと5Ghzの両方をしゃべれるチップセットがかなり入手しにくかったのであきらめてOpenWRTを使うことにする。

OpenWRTにはOpen vSwichを入れることができるので、OpenFlowと連携が可能になる。また、市販のルータを使って実装できるのでかなり便利。

自分のルータがOpenWRTに対応しているかどうかはここで見ることができる。

https://wiki.openwrt.org/toh/start

 ここではBuffaloのWSR-600DHPを使用する。

buffalo.jp

準備として以下のことを行う。

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

OpenWRTのファームウェアは以下の公式サイトからダウンロードできる。

https://openwrt.org/

先ほどの対応機器一覧の画面から自身のルータを選び、その中にリンクのあるbinファイルをダウンロード。 公式サイトを読むと、ダウンロードしたbinファイルをルータの管理画面(WebUI)の「ファームウェア更新」のところでアップロードすればOpenWRTになると書いてあるが、今回のBuffaloルータだとそれが失敗してしまった。ほかのファームウェアでもやってみてだめだったので、別の方法を探すことにする。 参考にしたのは以下のサイト

http://www.srchack.org/article.php?story=20160503003415488

このサイトではtftpサーバからルータを起動しているようだ。

 サイトにしたがってopenwrt-ramips-mt7621-wsr-600-initramfs-kernel.binを入手

以下のサイトにあった。(自力で探しても見つからなかった....)

http://www.srchack.org/pub/openwrt/wsr-600dhp/r49177/openwrt-ramips-mt7621-wsr-600-initramfs-kernel.bin

「Tftp64」というWindowsftpサーバに変えてくれるツールを使う。

その後は下記の手順に従う。

  • 上記でダウンロードしたbinファイルの名前をfirmware_WSR-600DHP.ramに変更する。
  • tftpサーバを(アドレス:192.168.11.168)で公開する(サーバ上に上記.ramファイルを置く)
  • Windows PC(tftpサーバ)とバッファロールータをLANケーブルでつなげる。
  • Buffalloルータの電源を「AOSS」ボタンを押しながら入れる

これでBuffalloルータがOpenWRTとして起動してくれる。

あとはtelnetでルータに入り(192.168.1.1)以下のコマンドを実行

# fw_setenv dual_image 0

# sysupgrade -n openwrt-ramips-mt7621-wsr-600-squashfs-sysupgrade.bin

openwrt-ramips-mt7621-wsr-600-squashfs-sysupgrade.binはアップグレード用のファイルなので

https://downloads.openwrt.org/chaos_calmer/15.05/ramips/mt7621/

このあたりから適宜ダウンロードしてルータに配置する。

 最後にsshでログインできるようにrootパスワードを設定

 # passwd root

 

 

 

iptables -t nat -D POSTROUTING 1

 

iptables -t nat -A POSTROUTING -p TCP -s 192.168.122.0/24 -d 153.153.145.156/32 -j MASQUERADE --to-ports 1024-65535

ip netns exec test ip route

ip netns exec test route add default gw 192.168.122.1

 

gohanを触ってみる

以下からgohanのバイナリソースをダウンロードし、中身を解凍する。

https://github.com/cloudwan/ansible-gohan/releases


# unzip gohan_linux-amd64.zip
# cd gohan_linux-amd64
# ./gohan server --config-file etc/gohan.yaml

これだけで一応gohanが動き始める。以下のurlにアクセスして動きを確かめることができる。

初期状態ではID: admin  Passward: admin でログインが可能。

https://localhost:9443/webui/

ちなみにURLの最後のスラッシュを書き忘れるとページが表示されないので、ご注意を。

 

続いてetcdと連携させる。

gohan設定した情報を分散key/valueストアであるetcdに書き出し、etcdの情報を元にシステムを構築する仕組みを作ってみる。

Ubuntuへetcdをインストール


    # curl -L  https://github.com/coreos/etcd/releases/download/v2.0.9/etcd-v2.0.9-linux-amd64.tar.gz -o etcd-v2.0.9-linux-amd64.tar.gz
    #tar xzvf etcd-v2.0.9-linux-amd64.tar.gz
    #cd etcd-v2.0.9-linux-amd64
    #cp etcd /bin/
    #cp etcdctl /bin/

etcdのインストールが完了したので、etcdを起動する。


    #etcd

 gohanとの連携のために./etc/gohan.yamlファイルを編集し、etcdの項目のコメントアウトを外し、gohanをリスタートする。

ためしにgohanのwebUIから[network]や[server]の項目を追加し、etcdのに書き込まれていることを確認する。etcdctlコマンドを使うと/config/v2.0/以下にUIで設定したnetworks/id1が書き込まれていることがわかる。


# etcdctl ls  --recursive
/monitoring
/gohan
/gohan/cluster
/gohan/cluster/lockstate
/gohan/cluster/lockmonitoring
/gohan/cluster/sync
/config
/config/v2.0
/config/v2.0/networks
/config/v2.0/networks/id1
/config/v2.0/servers
/mykey
/state

 

 また、同じくetcdctlコマンドでwebUIから設定した内容を確認することができる。


# etcdctl --peers=http://127.0.0.1:4001 get /config/v2.0/networks/id1
{"body":"{\"description\":\"mizukoshi-description\",\"id\":\"id1\",\"name\":\"mizukoshi\",\"tenant_id\":\"tenant12\"}","version":1}

 githubで公開されているpython-etcdを使えば、pythonプログラム内でetcdを扱うことができて非常に便利だった。

github.com

 

 

dockerを使ってみる

Docker1.9をインストールすることにする。ついでにDocker ComposeとDocker Machineも一緒に入れてみる。

最新版のDockerをインストールする。

 # curl -sSL https://get.docker.com/ | sh 

インストールを完了しバージョンの確認を行う。 以下のようにVersion: 1.9.1がダウンロードされている。


# docker version
Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64
 

続いてdocker-composeをインストールする。これも最新の1.5.2をインストールする。


# curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose
#  chmod a+x /usr/local/bin/docker-compose

docker-machineをインストールする。


# wget https://github.com/docker/machine/releases/download/v0.5.4/docker-machine_linux-amd64
# mv docker-machine_linux-amd64 /usr/local/bin/docker-machine
# chmod a+x /usr/local/bin/docker-machine

今回はインストールのみなのでここまで。