WZR-HP-AG300HにDD-WRTを入れた

WZR-HP-AG300Hを買った.
Amazonの定価では14,400円だが,中古で2,300円だったので買ってしまった.
この機種を選んだ理由はDD-WRTとの親和性が高く,ネットにも多くの情報があるからである.

ルータに手を出そうと思ったきっかけは,手元に1台Linuxのマシンが欲しいと思っていたらから.
このブログを載せているVPSもあるけどVPSなので回線が必要だし,ちょこっとしたLinuxマシンが欲しかった.
安いノートパソコンとかRaspberry Piとかも考えたけれど,ノートパソコンは高いしRPiはカメラとかGPIOとか使ってるしよく初期化するからダメ.
そう考えると安い機械を買ってLinuxを使ったほうがよく,ルータなら安くてLinuxだし電波も飛ばせるので適してる.
 
ここからは復旧用の備忘録を兼ねて,届いてからの設定とか.
ちなみに,設定が全部終わった後ガーッと書いてるので,間違ってることも多々あると思われ.許して.
 

DD-WRT化

家に届いた後イーサネットで接続し,PCのIPを192.168.11.2に固定し,ブラウザから192.168.11.1に接続してAirStationの管理ページにアクセスした.
WZR-HP-AG300Hで使えるファームウェアは純正ファームが日本版とUS版との2つあり,DD-WRTが普通のDD-WRTとUSバッファローが改造したものの2つある.また,他にOpenWRTなどもある.

・純正ファーム

・日本バッファロー

・USバッファロー

・DD-WRT

・公式

・USバッファロー

・OpenWRT

 
最初に日本バッファロー管理ページからアップデートを行い,USバッファローのDD-WRTを入れた.
その後,接続できない状態となり,起動直後にTFTPでファームウェアを送ろうとしたり,PCの固定IPを変えたりしていたが,よくわからないまま接続でき,USバッファロー製のDD-WRTの起動画面にたどり着いた.
今にして思えば,日本バッファロー製純正ファームの管理画面からUSバッファロー製DD-WRTのファームウェアの転送に成功し,そのときルータのIPアドレスのネットワーク部が変わり(192.168.11.0→192.168.1.0),接続できなくなり,起動直後に転送しようとしたファームウェアはすべて失敗,PCの固定IPをいろいろいじってるうちにルータのIPアドレスのネットワーク部に合い(たぶん192.168.1.0)接続できるようになった.ということだろうと思う.
最初にファームウェアを転送してからランプのパターンが変わらなかったので,最初の転送のみがうまくいき,TFTPはすべて失敗したのだろう.TFTPの転送タイミングは難しいらしいし,そもそも最初の管理画面でTFTPをONにせずファームウェアを転送したから.
 
まあ,そういうわけでUSバッファロー製DD-WRTを入れることに成功した.その後,USバッファロー製DD-WRTの最終更新は2012年なのに対し,公式DD-WRTの最終更新は2014年だということに気付き,やっぱり公式が良いと思い公式DD-WRTを入れた.

ルータへの接続

 
公式DD-WRTを入れ終わった後,ルータのIPを192.168.12.1に設定し,PCのイーサネットの固定IPを192.168.12.2とした.サブネットマスクは255.255.255.0
これにより
WZR-HP-AG300H—–PC—–家のルータ~~~internet
となり,ググりながら設定できるようになった.ちなみに左はイーサネットで右はWi-Fi.
なお,telnetを使うため[Services]->[Services]からtelnetをenableとする.
 

Web server

IPアドレスの設定が終わり,軽いWebサーバを立てることにした.
DD-WRTではlighttpdを標準で載せている.なのでこれを使えばWebサーバを立てることができる.
[Services]->[Webserver]から
Lighttpd:enable
とし,オプションが表示されたら
HTTPS Port:444
HTTP Port:81
WAN Access:enable
とする.HTTPSを444に変更しているのは管理画面のやつと重ならないようにするため.WAN Accessをenableに設定しているのはなんとなくで特に意味は無い.
これでブラウザからhttp://192.168.12.1/で管理画面,http://192.168.12.1:80/で作成したページが見れるはず.ただし,まだページは作成していない.
Lighttpdのデフォルトルートは/jffs/wwwである.ただし,初期状態では/jffsは書き込み不可なので,USBメモリを/jffsにマウントする.
USBメモリを使うには[Services]->[USB]から
Core USB Support:enable
USB Printer Support:disable
USB Storage Support:enable
USB Over IP:disable
Automatic Drive Mount:enable
Run-on-mount Script Name:
Mount this Partition to /jffs:
Mount this Partition to /opt:
Use SES Button to remove drives:disable
とする.ここで,USBメモリを/jffsや/optにマウントするにはMount this Partion to ・・・でできる.ただしこれはUUIDを設定してUSBメモリを全部マウントすることになるみたい.
なのでUSBメモリにjffsというディレクトリをつくり,それを/jffsにマウントすることにした.なお,USBメモリは/mnt/sda1なので,
mkdir /mnt/sda1/jffs
mount -w /mnt/sda1/jffs /jffs
とする.ただしこれは一時的なものなので,[Administration]->[Commands]から
mount -w /mnt/sda1/jffs /jffs
をSave Startupし,起動時に実行するようにする.
その後,テスト用のhtmlを作成する.ちなみに,テスト用のindex.htmlには煽り画像とcontrol panelへのリンクを置いておいた.
mkdir /jffs/www
vi /jffs/www/index.html
これでブラウザからhttp://192.168.11.1:80/でテスト用のindex.htmlが表示される.
次に,ポートを変える.この状態では80番が管理画面,81番がLighttpdとなっているが,これを逆にしたい.Lighttpdのポート番号は管理画面からできるが,管理画面のポート番号は管理画面から変更することはできない.そのため,telnetからnvramの値を変更する.
nvram set http_lanport=81
nvram set lighttpd_lanport=80
nvram commit
nvram show
これでブラウザからhttp://192.168.12.1/でブラウザからアクセスできる.

DNS

ふと思いつき,DNSの結果をすべて192.168.12.1に飛ばすことにした.
これをやるにはルータをDNSサーバとする.
DD-WRTにはDnsmasqという簡易なDNSサーバが載せてあるのでこれを使う.
[Setup]->[Basic Setup]から
DHCP Type:DHCP Server
DHCP Server :enable
(略)
Static DNS 1 : 192.168.12.1
(略)
Use DNSMasq for DHCP : checked
Use DNSMasq for DNS : checked
DHCP-Authoritative: checked
とする.また,[Services]->[Services]からDNSMasqを
DNSMasq:enable
Local DNS:enable
No DNS Rebind:enable
Add Requestor MAC to DNS Query:enable
Additional DNSMasq Options:address=/#/192.168.12.1
とする.address=/#/192.168.12.1とすることでどんなドメインも192.168.12.1に飛ばされる.

404ページの変更

デフォルトでは「404 Not Found」と表示されるだけだが,これをindex.htmlに変更したくなった.
これはつまりLighttpdのコンフィグを変更することになるのだが,これに意外とハマった.
404ページをindex.htmlに変えるにはlighttpd.confに
server.error-handler-404=”/index.html”
と追記すれば良い.
find / -name “*lighttpd*”でコンフィグが/tmp/lighttpd.confにあることは分かったが,変更してrebootをかけても元に戻っている.どうやら,/tmpの実体はRAMにあり,lighttpd.confは起動時にその都度生成されるようだ.生成はソースコードから,いくつかのNVRAMの値を読み,生成していることがわかった.しかしそのなかにserver.error-handler-404についてのものはなく,設定できないことがわかった.
ちなみに,
nvram set lighttpd_root=”/jffs/www
>server.error-handler-404=\”/index.html\””
としても効果はないようだった.
そこで,/mnt/sda1/lighttpd/lighttpd.confを作成し,/tmp/lighttpd.confの内容をコピーし,server.error-handler-404=”/index.html”を追記した.その後psでLighttpdのPIDを見てkillし,lighttpd -f /mnt/sda1/lighttpd/lighttpd.confとしてもなぜか接続できなかった.そこで,起動時にLighttpdを動かさず,ソースコードの真似をすることとした.
nvram set lighttpd=0
nvram commit
を実行し,Startupに
mkdir -p /tmp/lighttpd/logs;
lighttpd -f /mnt/sda1/lighttpd/lighttpd.conf;
を追記した.これで自作したlighttpd.confを読み込ませてLighttpdを起動することができた.

NAS

USBメモリをsambaで共有したいと思った.
sambaで共有するには[Services]->[NAS]からsambaをenableにしてFile Sharingからパスとユーザを設定することで繋がる.

まとめ

今回は つなげると絶対に煽り画像を見せてくるルータ が作成できた.
なぜこんなものになったのかよくわからないが,作っているときは楽しかった.