DD-WRTに関するページです。

DD-WRTとは

既存の無線LANアクセスポイントや無線LANブロードバンドルータの代替ファームウェアとして機能し、VPN機能やQoS機能、SSH、Syslog、 Samba、SNMPによる管理、Telnet、UPnP、VLAN、Wake On Lanなどの機能も利用可能になり、暗号化もWPA/TKIP、AES、WPA2、RADIUS認証などが可能になるというとんでもないものです。(from GIGAZIEN)

リンク
本家
bogus weblog: DD-WRT
無線LANアクセスポイントの機能を強化するファームウェア「DD-WRT」 - GIGAZINE
日々の記録 >> WLA-G54をイーサネットコンバータみたいに使う
にょろまるのたわごと: Windows からMacminiをWOL (覚書)

Linksys WRT54Gへの適用

必要なDD-WRTファームウェアのダウンロード

DD-WRTのダウンロードページから必要なファイルを落とす。注意点としては、dd-wrt.v23_<type>_generic.binはWeb GUI経由で書き込むためのファームウェアで、dd-wrt.v23_<type>_wrt54g.binはTFTP経由で書き込むためのもの。今回はWeb GUI経由で書き込むので、dd-wrt.v23_<type>_generic.binが必要。Buffalo製のブロードバンドルータの場合にはTFTP経由がよいらしい。(未確認)

mini版の書き込み

WRT54G v4 Installation Tutorialによると、WRT54GのV4ではアップデートプログラムが3MBより大きな容量のファイルを認識できないので、先に最小機能が含まれるmini版のファームウェアを入れた後に、standard版なりを入れるとのことである。手持ちのWRT54GはV2.2なのでこの制約は関係ないかもしれないが、念のためmini→standardの順で入れていった。

具体的な手順は、WRT54G v4 Installation Tutorialにキャプチャ画面入りで解説されているので、それに従ってやるだけ。ファームウェアを書き換える前に、WRT54GのオリジナルファームウェアのWeb GUI画面か背面のリセットキー長押しで、初期状態に戻しておくように。

standard版の書き込み

mini版が書き込めたら、次にstandard版をインストールする。設定画面でユーザ名とパスワードを聞かれるが、username: root, password: admin と入力する。 最初、パスワードが違うよと怒られてあせったが、背面のリセットキーを長押ししてNVRAMの内容を初期状態に戻したら、アクセスできるようになった。確かに、WRT54G v4 Installation Tutorialにもそう書いてあった。(よく読めよ>俺)

無事、standard版のDD-WRTに書き換わったが、メニューの設定項目多すぎ。この他にも、Tomatoというがあって、こっちの方が評判がよいようだ。これも今後の課題。
Tomato Firmware | polarcloud.com
無線LANアクセスポイントを機能強化する無料ファームウェア「Tomato Firmware」 - GIGAZINE
時間の渦: 2005年11月 アーカイブ

SSHを起動して、puttyでログインした画面。

DD-WRT-login.jpg

La Foneraへの適用

最近話題のLa FoneraにもDD-WRTのファームウェアが開発されている。俺部屋用無線ルータ兼お出かけ用無線APとして活用できそう。既にファームウェアの書き換え方もいくつか発表されているので、それに従ってやるだけ。ただ、シリアルをつけるところでつまづいたので、メモしておく。

シリアルケーブルの接続

当初はLinkStation/玄箱で使っているUSBタイプのD-KEを使用したが、ぜんぜんだめ。RS-232Cタイプの9-KEに変えたら、問題なく使えた。

FON-serial.JPG

基板上のJ2にシリアルの信号が出ているので、ここに9-KEの線をつなげばよい。写真の左上のピンを1番とすると、

ピン番号信号名9-KE(Type A)9-KE(Type B)
4RXD
6TXD
10GND

参考:木の葉の家 >> FONルータ復旧大作戦

20070106_0406.jpg

TFTPサーバにファームウェアを上げる

La Fonera用のDD-WRTファームウェアをここ からダウンロードする。必要なのはroot.fsとvmlinux.bin.l7の2つ。

DebianマシンをTFTPサーバにした。手順は以下のとおり。

# apt-get install aftpd
# mkdir /tftpboot
# cp root.fs vmlinux.bin.l7 /tftpboot

DD-WRTファームウェアを書き込む

La FoneraのDD-WRT化 - FoNまとめwikiのとおりに実行するだけ。

・PHY ID is 0022:5521
Ethernet eth0: MAC address **:**:**:**:**:**
IP: 0.0.0.0/255.255.255.255, Gateway: 0.0.0.0
Default server: 0.0.0.0

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version v1.3.0 - built 16:57:58, Aug  7 2006

Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

Board: ap51
RAM: 0x80000000-0x81000000, [0x80040450-0x80fe1000] available
FLASH: 0xa8000000 - 0xa87f0000, 128 blocks of 0x00010000 bytes each.
== Executing boot script in 1.000 seconds - enter ^C to abort
^C
RedBoot> ip_address -l FonルータのIPアドレス/24 -h TFTPサーバのIPアドレス
IP: 192.168.10.2/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.10.155
RedBoot> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System [#a098ee8c]
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> load -r -v -b 0x80041000 root.fs
Using default protocol (TFTP)
-
Raw file loaded 0x80041000-0x802fdfff, assumed entry at 0x80041000
RedBoot> fis create -b 0x80041000 -f 0xA8030000 -l 0x002C0000 -e 0x00000000 rootfs
... Erase from 0xa8030000-0xa82f0000: ............................................
... Program from 0x80041000-0x80301000 at 0xa8030000: ............................................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> load -r -v -b 0x80041000 vmlinux.bin.l7
Using default protocol (TFTP)
-
Raw file loaded 0x80041000-0x80100fff, assumed entry at 0x80041000
RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
... Erase from 0xa82f0000-0xa83b0000: ............
... Program from 0x80041000-0x80101000 at 0xa82f0000: ............
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> fis create -f 0xA83D0000 -l 0x00010000 -n nvram
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> reset

NVRAMのクリア

変な設定をしてしまい、有線経由でも設定を戻せなくなった場合に用いる。

RedBoot> fis erase -f 0xA83D0000 -l 0x00010000
RedBoot> reset

参考:dd-wrt · Fonera wiki

起動画面

感想

確かにDD-WRTは多機能で、WPAによる認証も簡単に設定できた。ただ、La Foneraにはちょっと荷が重いようで、負荷がかかりすぎる印象を受けた。もともとLa Foneraが採用しているOpenWRTにKamikazeというのがあり、こちらはGUIを用いない分軽そうな気がする。無線ブリッジ化も可能なので、試してみたい。

Buffalo WHR2-G54へのインストール

Buffaloのルータは、電源投入時に一時的にtftpが受信可能な状態になり、その後正規のFirmwareが立ち上がるようになっている。試してみたところ、ルータに継続的にpingを飛ばすと、tftp受信状態ではTTL=128だがノーマル時はTTL=64になるので、割と簡単にタイミングをつかみやすい。たとえ一度失敗しても、やり直せばよいので気が楽である。ファームの書きかえ前に初期化するとIPが192.168.11.1になるので、Windowsで作業する場合、1つのコマンドプロンプトで

D:\Users\itou-r> ping -t 192.168.11.1

とpingを投げ続けた上でTTL=128のpingが返ってきたら、すばやく別コマンドプロンプト上で、

D:\Download\Firmware\DD-WRT> tftp -i 192.168.11.1 PUT dd-wrt.v24_vpn_generic.bin

を実行すればよい。

v24-SP1のインストール

2008年7月にv24-SP1が公開されたので、チェンマイ大学のルータをアップデータした。既にDD-WRT化が済んでいたので、インストール自体はWeb GUI画面上のFirmware upgradeメニューからファームウェアのファイルを指定して、更新するだけでOK。ただし、以下の点でトラブった。

VPN版にはjffsサポートが搭載されていない

DD-WRTのフォーラム(例えば、こことか、ここ>http://www.dd-wrt.com/phpBB2/viewtopic.php?t=31932&highlight=vpn+sp1+jffs+support]])を参照のこと。その代わりに、VPN版ではOpenVPNの設定がGUI上でできるようになった。DD-WRT Forum :: View topic - OpenVPN config docs for v24 SP1?

どうしてもVPN版でjffsサポート機能を使いたい場合には、Eko氏私家ビルドのNEWD_openvpn_jffs_small.binを使えばよいらしい。容量を稼ぐために、as missing "snmp, all languages, some GUI styles and more."とのこと。

ちなみに、EkoEko氏私家ビルド版のNEWDとVINTの違いは、

NEWD = Eko where listed and BS all the time.
VINT = legacy driver for those unable to use NEWD.

なそうな。DD-WRT Forum :: View topic - Eko NEWD vs. VINT vs. BS Builds.

iptablesに見知らぬIPからのアクセスを許可する設定が勝手に入ってしまう

194.231.229.20と212.65.2.116からのアクセスを許可する設定が入っている。DD-WRTのファーラム(ここ)によると、Chrisがどこかの顧客用に入れたコードがそのまま残ってしまったのが原因らしい。Eko氏による最新バイナリを用いるか、以下のコマンドをターミナルから実行して、再起動すればよい。nvram unset ralでは、再起動後にまた上記2つのIPアドレスが登録されてしまった。

nvram set ral=" "
nvram commit 

WHR2-G54VではFlashROMの容量も大きいようなので、Eko氏私家ビルドのNEWD_openvpn_jffs_small.binを使った。

GUIベースでのOpenVPNの設定

参考:DD-WRT Forum :: View topic - OpenVPN config docs for v24 SP1?

  • PKI(公開鍵基盤)を立てる
    Ubuntu 8.04では、ファイルの場所ややり方が微妙に異なるので、メモしておく。
  • マスタCA証明書と鍵を生成する
    $ mkdir workdir
    $ cd workdir
    $ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/vars .
    $ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf .
    $ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/whichopensslcnf .
    $ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/pkitool .
    $ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/build-* .
    varsの編集
    export KEY_COUNTRY=JP
    export KEY_PROVINCE=Mie
    export KEY_CITY=Tsu
    export KEY_ORG="OpenVPN-Echigoya"
    export KEY_EMAIL="hogehoge@somewhere"
    openssl.cnfの確認
    有効期限がデフォルトで3650日になっていた。
    $ $ source ./vars
    NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/itou-r/OpenVPN/workdir/keys
    $ /usr/share/doc/openvpn/examples/easy-rsa/2.0/clean-all
    $ /usr/share/doc/openvpn/examples/easy-rsa/2.0/build-ca
    $ /usr/share/doc/openvpn/examples/easy-rsa/2.0/build-key-server server
    $ /usr/share/doc/openvpn/examples/easy-rsa/2.0/build-key client1
    $ /usr/share/doc/openvpn/examples/easy-rsa/2.0/build-dh

v24betaのインストール

ただし、安定版である v23 SP2はだめで、ベータ版のv24 betaでないと動かなかった。さらに、2007/06/20版までは動くが、2007/07/30以降のバージョンだとルーティング(?)がうまくいかないせいか、外に出られなかった。設定ファイルを変更すれば動くのかもしれないが、時間がなかったので詳しくは調べていない。

v24 betaのファームウェアのWeb設定画面からv23のファームに書きかえたが、動かなくなってあせった。JTAGの出番かとあせったが、一度電源を切って再投入したらTTL=128のパケットが返ってきたので、tftp受信モードが残っていると判断し、OpenWRTのkamikazeバージョンを入れて、NVRAMをクリアしたら直った。OpenWRTはカーネル2.6版も出ていて、設定もコマンドから設定ファイルを編集するという漢なところが気に入った。時間があれば是非挑戦したい。

というか、WHR2-G54はRAM容量が64MBと大きいので、USB端子さえあれば例の簡易水位計プロジェクトには持って来いだ。やはりLinkSysのNSLU2が最適か? 日本製だとIO-DATAのULS-5Pになるのかな。

Buffalo BHR-4RVへのインストール

この機種は有線ブロードバンドルータだが、基板をWZR-RS-G54などと共有しているのではないかという疑問からOpenWRTを入れた人がいるので、それならDD-WRTも入るっしょってことで、試してみた。初期化後のIPが192.168.12.1になるのが違うくらいで、拍子抜けするくらいあっさりインストールできた。無線LAN機能はいらないので、チェンマイにはこれをもっていくつもり。

JFFS(Journalling Flash File System)

FlashROMの容量が大きい機種の場合、一部にユーザが自由に書き込みできる領域が用意されている。ipkgの管理やユーザ独自の設定ファイルの保管場所として重宝する。通常は見えないようになっているので、以下のコマンドで有効にする。

# nvram set jffs_mounted=1
# nvram set enable_jffs2=1
# nvram set sys_enable_jffs2=1
# nvram set clean_jffs2=1
# nvram set sys_clean_jffs2=1
# nvram commit
# reboot

PPTPの設定

Server

参考:PPTP Server Configuration - DD-WRT Wiki

  • 管理Web画面で servicesPPTPPPTP Server
  • enable ラジオボタンをクリック
  • Server IP
    VPN上におけるルータ自身のIPを設定する。例えば、DD-WRTルータのLAN側IPが 192.168.0.254 でネットマスクが 255.255.255.0 の場合、192.168.0.10 とかにすればよい。
  • Client IP(s)
    PPTPで接続にきた機器に与えるIPアドレス(の範囲)。上記例では、例えば 192.168.0.20-29 のように設定する。
  • CHAP-Secrets
    接続用ユーザ名とパスワードの組み合わせ。通常のPPTP Serverでは、「ユーザー名 サーバ名 パスワード IPアドレス」の順に与えるが、IPアドレスの部分を * にすれば、Client IP(s)で指定した範囲のIPアドレスが自動的に付与される。さらに、DD-WRTではサーバ名の欄も * と書くらしい。

OpenVPN

OpenVPN - DD-WRT Wiki

Server

公開鍵方式で行う。なんちゃってCA認証局を使ったやり方はここを参照のこと。

鍵と証明書の発行

まず、別マシンで、以下の作業を済ませる。

# mkdir workdir
# cd workdir
# cp /usr/share/doc/openvpn/examples/easy-rsa/vars .
# cp /usr/share/doc/openvpn/examples/easy-rsa/openssl.cnf .

varsの編集
openssl.cnfの確認

# . ./vars
# /usr/share/doc/openvpn/examples/easy-rsa/build-ca
# /usr/share/doc/openvpn/examples/easy-rsa/build-key-server server
# /usr/share/doc/openvpn/examples/easy-rsa/build-key client1
# /usr/share/doc/openvpn/examples/easy-rsa/build-dh

鍵と証明書を安全な方法でjffsに転送

再起動後もOpenVPNが自動的に実行されるためには、NVRAMのrc_startupに登録する必要がある。WebGUIから設定する方法もあるが、その場合は鍵や証明書ファイルの中身もWeb上から登録する必要があるため、美しくない。できるだけコマンドで設定できる方法を選択した。jffsを有効にする方法はここ

# mkdir /jffs/tmp/openvpn
# cd /jffs/tmp/openvpn
# mkdir keys etc
# scp hogehoge@鍵と証明書のあるサーバ:→/jffs/tmp/openvpn/keys/
転送するファイル:ca.crt, ca.key, dh1024.pem, server.crt, server.key

設定ファイルの作成

  • Server
    例えば、/jffs/tmp/openvpn/etc/server.conf という名前で保存する。
    # Tunnel options
    mode server       # Set OpenVPN major mode
    proto udp         # Setup the protocol (server)
    port 1194         # TCP/UDP port number
    dev tap0          # TUN/TAP virtual network device
    keepalive 15 60   # Simplify the expression of --ping 
    daemon            # Become a daemon after all initialization
    verb 3            # Set output verbosity to n 
    comp-lzo          # Use fast LZO compression proto
    
    # OpenVPN server mode options
    server-bridge 192.168.0.254 255.255.255.0 192.168.0.250 192.168.0.252
    duplicate-cn      # Allow multiple clients with the same common name
    
    # TLS Mode Options
    tls-server        # Enable TLS and assume server role during TLS handshake 
    ca /jffs/tmp/openvpn/keys/ca.crt         # Certificate authority (CA) file
    dh /jffs/tmp/openvpn/keys/dh1024.pem     # File containing Diffie Hellman parameters 
    cert /jffs/tmp/openvpn/keys/server.crt   # Local peer's signed certificate
    key /jffs/tmp/openvpn/keys/server.key    # Local peer's private key 
    
    persist-key
    persist-tun
  • Client
    Windowsの場合
    client
    dev tap
    proto udp
    remote サーバのIPアドレス or FQDN 1194
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca "D:\\Apps\\OpenVPN\\keys\\ca.crt"
    cert "D:\\Apps\\OpenVPN\\keys\\client-test.crt"
    key "D:\\Apps\\OpenVPN\\keys\\client-test.key"
    comp-lzo
    verb 3
    

起動スクリプトの作成

例えば、/jffs/tmp/openvpn/openvpn.sh という名前で以下の内容を保存する。

/usr/sbin/openvpn --mktun --dev tap0
/usr/sbin/brctl addif br0 tap0
/sbin/ifconfig tap0 0.0.0.0 promisc up
sleep 5

/usr/sbin/openvpn --config /jffs/tmp/openvpn/etc/server.conf --daemon

FireWallルールの追加

ルータ向けのUDP 1194 port が通過できるように以下のルールを追加する。

# /usr/sbin/iptables -I INPUT -p udp --dport 1194 -j ACCEPT

動作テスト

# /tmp/jffs/openvpn/openvpn.sh

不揮発メモリへの登録

  • 自動起動(rc_startup)
    # nvram set rc_startup="
    > /tmp/jffs/openvpn/openvpn.sh
    > "
    # nvram commit
    以下のコマンドできちんと設定されたか確認する。
    - FireWall(rc_firewall)
    <pre>
    # nvram set rc_firewall="
    > /usr/sbin/iptables -I INPUT -p udp --dport 1194 -j ACCEPT
    > "
    # nvram commit
  • 再起動して、自動的にOpenVPNが起動されるか確認する。
    # reboot

Client

MACアドレスの書き換え

インストールした状態では製品版ファームウェアの時とMACアドレスが変わってしまう。ここに情報あり。

Xbox360の無線LAN化

ソースコードをビルドする


添付ファイル: filefenora-dd-wrt-boot.txt 3280件 [詳細] fileFON-serial.JPG 1473件 [詳細] fileDD-WRT-login.jpg 817件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-25 (木) 17:13:02 (3770d)