OpenWRTに関するページです。

OpenWRTとは

本家サイトのWebページによると、OpenWRTは組み込み系Linuxのディストリビューションのようなものである。ipkgの仕組みにより、ユーザは必要なプログラムパッケージをファームウェア(FlashROM)に追加して、カスタマイズ可能である。

ここからは無線アクセス・ポイントの代替ファームウエア:「OpenWRT」:ITproからの引用

無線AP用の様々な代替ファームウエアが現れたきっかけは,無線APの大手メーカーである米Linksysが,自社のAPハードウエア用に Linuxベースの小さなオープン・ソースOSを開発したことにさかのぼる。やがてこのコードのコピーを入手して,自分の必要な機能を追加するよう変更する人々が現れ始めた。こうした流れがまず,「Alchemy」と呼ばれる代替ファームウエアを生み出した。Alchemyも,はオープン・ソースとして公開されている。そしてAlchemyは,「OpenWRT」という副産物を生み出し,OpenWRTはDD-WRTという別の副産物を生み出した。 DD-WRTと違ってOpenWRTは,完全なコマンド・ライン・ベースである。

DD-WRT同様、firewall機能、WPA暗号化、RADIUS認証、VPN機能やSSHなどの機能も利用可能である。(from 同上)

ブートスクリプト

/etc/functions.sh

/lib/config/uci.sh

/etc/rc.common

Buffalo WZR-HP-G54への書き込み

インストール

手順はDD-WRTとほとんど同じ。WZR-HP-G54を初期化した後、192.168.11.1に対してtftpでOpenWRT用のファームウェアを流し込むだけ。

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

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

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

pre> D:\Download\Firmware\OpenWRT> tftp -i 192.168.11.1 PUT openwrt-brcm47xx-2.6-squashfs.trx

/pre> を実行すればよい。

赤いDiagランプが点滅しなくなったら、しばらく待ち、電源を入れ直す。ルータのIPが192.168.1.1に変わるので、PCのIPも192.168.1.xに変更する。最初はpingが返ってこないのであせったが、ルータを底の設定初期化SWを押しながら電源を入れて初期化したら、無事に起動した。

pre> D:\Download\Firmware\OpenWRT> telnet 192.168.1.1

=== IMPORTANT ============================
 Use 'passwd' to set your login password
 this will disable telnet and enable SSH
------------------------------------------

BusyBox v1.4.2 (2007-09-29 09:36:14 CEST) Built-in shell (ash) Enter 'help' for a list of built-in commands.

 _______                     ________        __
|       |.-----.-----.-----.|  |  |  |.----.|  |_
|   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
|_______||   __|_____|__|__||________||__|  |____|
         |__| W I R E L E S S   F R E E D O M
KAMIKAZE (7.09) -----------------------------------
 * 10 oz Vodka       Shake well with ice and strain
 * 10 oz Triple sec  mixture into 10 shot glasses.
 * 10 oz lime juice  Salute!
---------------------------------------------------

root@OpenWrt:/#

/pre>

Buffalo純正ファームに戻す

とある理由で OpenWrt 化したBuffaloの無線LANルータを純正ファームに戻す必要がでた。当初は、Buffalo提供の純正ファームウェアから不要なヘッダを削除して、例の電源投入時の tftp で入れりゃいいやと考えていたが、そんなに甘くはなかった。DD-WRT化 → ヘッダを削除したBuffalo純正ファームウェアで Upgrade → リセットSWで設定を初期化 の順に作業する必要があるようだ。(根拠なし)

各種設定

各種設定のページへ

ipkgによるパッケージの管理

データベースの更新

pre>

# ipkg update Downloading http://downloads.openwrt.org/kamikaze/7.09/brcm47xx-2.6/packages/Packages Updated list of available packages in /usr/lib/ipkg/lists/release Downloading http://downloads.openwrt.org/kamikaze/packages/mipsel/Packages Updated list of available packages in /usr/lib/ipkg/lists/packages Done.

/pre> 上のメッセージにあるように、/usr/lib/ipkg/lists/release と /usr/lib/ipkg/lists/packages にパッケージの情報が記載されている。

パッケージのインストール

pre>

# ipkg install パッケージ名

/pre>

パッケージ一覧の表示

pre>

# ipkg list aiccu - 20070115-1 - SixXS Automatic IPv6 Connectivity Client Utility aircrack-ng - 0.9.1-1 - next generation of aircrack with new features aircrack-ptw - 1.0.0-1 - A tool using a new method for breaking WEP Keys alsa-lib - 1.0.13-1 - This is the library package for alsa, needed by some user space programs. alsa-utils - 1.0.13-1 - ALSA (Advanced Linux Sound Architecture) utilities amwall - 0.1.0-1 - PF to iptables apache-icons - 2.2.6-2 - Icons from Apache apache-server - 2.2.6-2 - The apache server & and some tools apr - 1.2.9-1 - Apache Portable Runtime Library apr-util - 1.2.8-1 - Apache Portable Runtime Library Util arpd - 0.2-1 - A daemon to fake ARP replies arptables - 0.0.3-2-1 - ARP firewalling software arpwatch - 2.1a11-1 - Ethernet station activity monitor asterisk-prompt-de - 2.0-1 - German asterisk prompts atftp - 0.7-1 - TFTP client atftpd - 0.7-1 - TFTP server autossh - 1.4a-1 - Autossh client axhttpd - 1.1.6-1 - A small embedded web server using the axTLS library base-files-brcm47xx-2.6 - 10-9078 - Base filesystem for OpenWrt bash - 3.2-1 - The GNU Bourne Again SHell batman - 0.2-rv478-1 - B.A.T.M.A.N. Better Approach To Mobile Ad-hoc Networking batman-advanced - 0.1-alpha-rv466-1 - B.A.T.M.A.N. Advanced (Layer2 Version)

続く

/pre>

インストールされているパッケージ一覧表示

pre>

# ipkg list_installed base-files-brcm47xx-2.6 - 10-9078 - bridge - 1.0.6-1 - busybox - 1.4.2-2 - dnsmasq - 2.39-1 - dropbear - 0.50-2 - hotplug2 - 0.9+r102-2 - iptables - 1.3.7-1 - kernel - 2.6.22-brcm47xx-1 - kmod-diag - 2+2.6.22-brcm47xx-1 - kmod-madwifi - 2.6.22+r2568-20070710-brcm47xx-2 - kmod-ppp - 2.6.22-brcm47xx-1 - kmod-pppoe - 2.6.22-brcm47xx-1 - kmod-switch - 2.6.22-brcm47xx-1 - kmod-tun - 2.6.22-brcm47xx-1 - libgcc - 4.1.2-10 - liblzo - 2.02-1 - libopenssl - 0.9.8e-1 - mtd - 5 - ntpclient - 2003_194-4 - openntpd - 3.9p1-1 - openvpn - 2.0.9-2 - ppp - 2.4.3-8 - ppp-mod-pppoe - 2.4.3-8 - uclibc - 0.9.28-10 - udevtrigger - 106-1 - wireless-tools - 29-1 - zlib - 1.2.3-4 - Done.

/pre>

パッケージに含まれるファイル一覧表示

pre>

# ipkg files ntpclient Package ntpclient (2003_194-4) is installed on root and has the following files: /etc/hotplug.d/iface /usr/sbin/rate.awk /etc/hotplug.d/iface/20-ntpclient /etc/config /etc /usr /usr/sbin /etc/hotplug.d /usr/sbin/adjtimex /etc/config/ntpclient /usr/sbin/ntpclient

Done.

/pre>

cron

OpenWrt では、デフォルトでユーザが root しか存在しないので、/etc/crontabs ディレクトリ配下に root という名前のファイルを作成し、そこに cron の内容を記述する。

crontab ファイルの作成

pre>

# mkdir /etc/crontabs

# touch /etc/crontabs/root

# ln -s /etc/crontabs/root /etc/crontab

/pre>

  • /etc/crontabs/root の例

    #pre{{
    */5 * * * * /root/scripts/chkclock.sh
    }} crontab を変更した場合、普通は crond が自動的に検知してくれるが、OpenWrt ではすぐに反映されないようなので、手動で crond を再起動するとよい。

スクリプトが cron で呼ばれる度に、ログに cron.err.crond として記録されるが、これは busybox が LOG_ERR を使ってシステムログを記録するためであり、今のところどうしようもないようだ。(情報:#3981 (crond errors in logread) – OpenWrt

#pre{{
Jul 12 19:10:02 OpenWrt cron.err crond[992]: USER root pid 1224 cmd /root/date.sh
Jul 12 19:10:02 OpenWrt cron.err crond[992]: USER root pid 1227 cmd /root/scripts/chkclock.sh
Jul 12 19:12:01 OpenWrt cron.err crond[992]: USER root pid 1234 cmd /root/date.sh
}}

crond の自動起動。

pre>

# /etc/init.d/cron enable

# /etc/init.d/cron start

/pre> /etc/init.d/cron へのシンボリックリンクとして /etc/rc.d/S50cron が作成され、次回からは自動起動する。

USBストレージを使う

USBストレージを自動認識させる

openntpd

pre>

# ipkg install openntpd Installing openntpd (3.9p1-1) to root... Downloading http://downloads.openwrt.org/kamikaze/packages/mipsel/./openntpd_3.9p1-1_mipsel.ipk Configuring openntpd

adding group ntp to /etc/group adding user ntp to /etc/passwd Done.

/pre> /etc/ntpd.confを編集して、ネットワーク的に近いNTPサーバを指定する。

pre>

# see http://twiki.ntp.org/bin/view/Servers/NTPPoolServers

#servers pool.ntp.org

#servers ntp.nict.jp servers ntp.ring.gr.jp ←ntpdと違い、serverssが付くのに注意。

/pre>

PPTPD

以下の内容は少し古くなっているかもしれない。Kamikaze 8.09 での設定例は、OpenWrt/PPTPに解説してある。

必要なパッケージのインストール

pre>

# ipkg update Downloading http://downloads.openwrt.org/kamikaze/7.09/brcm47xx-2.6/packages/Packages Updated list of available packages in /usr/lib/ipkg/lists/release Downloading http://downloads.openwrt.org/kamikaze/packages/mipsel/Packages Updated list of available packages in /usr/lib/ipkg/lists/packages Done.

# ipkg install pptpd Installing pptpd (1.3.0-1) to root... Downloading http://downloads.openwrt.org/kamikaze/packages/mipsel/./pptpd_1.3.0-1_mipsel.ipk Installing kmod-gre (2.6.22-brcm47xx-1) to root... Downloading http://downloads.openwrt.org/kamikaze/7.09/brcm47xx-2.6/packages/./kmod-gre_2.6.22-brcm47xx-1_mipsel.ipk Configuring kmod-gre Configuring pptpd Done.

# ipkg install kmod-crypto Installing kmod-crypto (2.6.22-brcm47xx-1) to root... Downloading http://downloads.openwrt.org/kamikaze/7.09/brcm47xx-2.6/packages/./kmod-crypto_2.6.22-brcm47xx-1_mipsel.ipk Configuring kmod-crypto Done.

# ipkg install kmod-mppe Installing kmod-mppe (2.6.22-brcm47xx-1) to root... Downloading http://downloads.openwrt.org/kamikaze/7.09/brcm47xx-2.6/packages/./kmod-mppe_2.6.22-brcm47xx-1_mipsel.ipk Configuring kmod-mppe Done.

/pre>

起動スクリプトの有効化

pre>

# /etc/init.d/pptpd enable →/etc/init.d/pptpdへのリンクとして/etc/rc.d/S60pptpdが作成される。

/pre>

MPPE required, but kernel has no support. というエラーが出て、PPTP接続できない。

  • 原因
    ppp_mppeモジュールをロードするのに必要なモジュールが自動的にロードされない。モジュールの依存情報が落ちているのか?
    情報:OpenWrt / unable to load ppp_mppe module
  • 対策
    必要なモジュールが自動的にロードされるようにする。
    • /etc/modules.d/31-mppe

      pre> blkcipher ←追加 ecb ←追加 ppp_mppe

      /pre> これでうまくいくと思ったけど、追加したモジュールは自動的にロードするものの、肝心のppp_mppeはロードされない。うーん、どうしてだろう? 手動でinsmodすればロードされるのに。

設定ファイル

/etc/init.d/pptpd

kernel 2.6からMPPEのモジュール名がppp_mppeに変わったので、スクリプトを少し書き換える。ついでに、blkcipherとecbモジュールも自動的にロードされるように追加する。

pre>

#!/bin/sh /etc/rc.common

# Copyright (C) 2006 OpenWrt.org

START=60 BIN=pptpd DEFAULT=/etc/default/$BIN RUN_D=/var/run PID_F=$RUN_D/$BIN.pid

start() {

       [ -f $DEFAULT ] && . $DEFAULT
       mkdir -p $RUN_D
       for m in arc4 sha1 slhc crc-ccitt ppp_generic ppp_async &color(red){blkcipher ecb ppp_mppe};; do
               insmod $m >/dev/null 2>&1
       done
       $BIN $OPTIONS

}

stop() {

       [ -f $PID_F ] && kill $(cat $PID_F)

}

/pre> 情報:OpenWrt / PPTPD troubles

/etc/pptpd.conf

pre>

#debug option /etc/ppp/options.pptpd speed 115200 stimeout 10

#localip & remoteip are not needed, ip management is done by pppd localip 192.168.xx.yy remoteip 192.168.xx.aaa-bbb

/pre>

/etc/ppp/options.pptpd

pre>

#debug ←デバッグを有効にする場合はコメントをはずす

#logfile /tmp/pptp-server.log ←デバッグ用ログファイルの指定 #192.168.xx.yy:PPTPサーバ側トンネルのIPアドレス /etc/pptpd.confで設定するように変更 auth name "pptp-server" lcp-echo-failure 3 lcp-echo-interval 60 default-asyncmap mtu 1482 mru 1482 nobsdcomp nodeflate

#noproxyarp

#nomppc mppe required,no40,no56,stateless require-mschap-v2 refuse-chap refuse-mschap refuse-eap refuse-pap

#ms-dns 172.16.1.1

#plugin radius.so

#radius-config-file /etc/radius.conf

/pre>

/etc/ppp/chap-secrets

pre>

#USERNAME PROVIDER PASSWORD IPADDRESS ユーザ名 PPTPサーバ名 パスワード *(IPアドレス:固定する場合はここに記述)

/pre> パスワードが平文で記述されるので、root以外からは見られないようにアクセス権を変更する。

pre>

# chmod 600 /etc/ppp/chap-secrets

/pre>

Firewallの設定変更

  • /etc/firewall.user
    PPTPパケット(TCP port 1723およびGRE)の通過を許可

    pre>

    ### Allow PPTP control connections from WAN iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 1723 -j ACCEPT iptables -A input_rule -i $WAN -p tcp --dport 1723 -j ACCEPT

    ### Allow GRE protocol (used by PPTP data stream) iptables -A output_rule -p 47 -j ACCEPT iptables -A input_rule -p 47 -j ACCEPT

    /pre> PPTPクライアントからLAN上マシンへの通信許可

    pre>

    ### VPN Section iptables -A forwarding_rule -s 192.168.xx.0/24 -d 192.168.xx.0/24 -j ACCEPT iptables -A output_rule -o ppp+ -s 192.168.xx.0/24 -d 192.168.xx.0/24 -j ACCEPT iptables -A input_rule -i ppp+ -s 192.168.xx.0/24 -d 192.168.xx.0/24 -j ACCEPT

    # allow VPN connections to get out WAN interface (to internet) iptables -A forwarding_rule -i ppp+ -o $WAN -j ACCEPT</pre>

    /pre>

スクリプトの起動

pre>

# /etc/init.d/firewall restart

# /etc/init.d/pptpd start

/pre>

OpenVPN

OpenVPNのページへ

dropbear

dropbearの利用に関するTIPSです。OpenWrt/dropbear

busybox

OpenWrtで用いられる busybox に関するTIPSです。

-mtime, -mmin オプション

日付の古いファイルから削除するスクリプトを動かそうと思ったが、そんなオプションないよって怒られた。

pre>

# find /tmp -name "*" -mtime "+30" find: unrecognized: -mtime BusyBox v1.11.2 (2009-01-06 15:14:38 CET) multi-call binary

/pre> OpenWrtのデフォルトでは busybox のビルドで MTIME を有効にするオプションが無効になっている。menuconfig で busybox のオプションを変更する画面を見つけられなかったので、行儀が悪いが手動で .config を書き換えた。

pre>

# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_MTIME is not set

CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_MTIME=y

/pre>

スクリプト集

OpenWrt マシン用に作成したスクリプト集です。OpenWrt/ShellScripts

UCI

Unified Configuration Interfaceの略。OpenWrtDocs/KamikazeConfiguration/UCI - OpenWrtに簡単な解説あり。従来NVRAMに保存されていた設定情報を /etc/config/<config> ファイルにテキスト形式で保存する。

オプション一覧

#pre{{
# uci
Usage: uci [<options>] <command> [<arguments>]

Commands:
batch
export [<config>]
import [<config>]
changes [<config>]
commit [<config>]
add <config> <section-type>
add_list <config>.<section>.<option>=<string>
show [<config>[.<section>[.<option>]]]
get <config>.<section>[.<option>]
set <config>.<section>[.<option>]=<value>
delete <config>[.<section[.<option>]]
rename <config>.<section>[.<option>]=<name>
revert <config>[.<section>[.<option>]]

Options:
-c <path> set the search path for config files (default: /etc/config)
-d <str> set the delimiter for list values in uci show
-f <file> use <file> as input instead of stdin
-m when importing, merge data into an existing package
-n name unnamed sections on export (default)
-N don't name unnamed sections
-p <path> add a search path for config change files
-P <path> add a search path for config change files and use as default
-q quiet mode (don't print error messages)
-s force strict mode (stop on parser errors, default)
-S disable strict mode
-X do not use extended syntax on 'show'
}}

uci showの一例

#pre{{
# uci show
dhcp.@dnsmasq[0]=dnsmasq
dhcp.@dnsmasq[0].domainneeded=1
dhcp.@dnsmasq[0].boguspriv=1
dhcp.@dnsmasq[0].filterwin2k=0
dhcp.@dnsmasq[0].localise_queries=1
dhcp.@dnsmasq[0].local=/lan/
dhcp.@dnsmasq[0].domain=lan
dhcp.@dnsmasq[0].expandhosts=1
dhcp.@dnsmasq[0].nonegcache=0
dhcp.@dnsmasq[0].authoritative=1
dhcp.@dnsmasq[0].readethers=1
dhcp.@dnsmasq[0].leasefile=/tmp/dhcp.leases
dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto
dhcp.lan=dhcp
dhcp.lan.interface=lan
dhcp.lan.start=100
dhcp.lan.limit=150
dhcp.lan.leasetime=12h
dhcp.wan=dhcp
dhcp.wan.interface=wan
dhcp.wan.ignore=1
dropbear.@dropbear[0]=dropbear
dropbear.@dropbear[0].PasswordAuth=on
dropbear.@dropbear[0].Port=22
firewall.@defaults[0]=defaults
firewall.@defaults[0].syn_flood=1
firewall.@defaults[0].input=ACCEPT
firewall.@defaults[0].output=ACCEPT
firewall.@defaults[0].forward=REJECT
firewall.@zone[0]=zone
firewall.@zone[0].name=lan
firewall.@zone[0].input=ACCEPT
firewall.@zone[0].output=ACCEPT
firewall.@zone[0].forward=REJECT
firewall.@zone[1]=zone
firewall.@zone[1].name=wan
firewall.@zone[1].input=ACCEPT
firewall.@zone[1].output=ACCEPT
firewall.@zone[1].forward=REJECT
firewall.@zone[1].masq=1
firewall.@forwarding[0]=forwarding
firewall.@forwarding[0].src=lan
firewall.@forwarding[0].dest=wan
firewall.@forwarding[0].proto=tcp
firewall.@forwarding[0].dest_dport=22
firewall.@forwarding[0].src_dport=22
fstab.@mount[0]=mount
fstab.@mount[0].target=/home
fstab.@mount[0].device=/dev/sda1
fstab.@mount[0].fstype=ext3
fstab.@mount[0].options=rw,sync
fstab.@mount[0].enabled=0
fstab.@swap[0]=swap
fstab.@swap[0].device=/dev/sda2
fstab.@swap[0].enabled=0
httpd.@httpd[0]=httpd
httpd.@httpd[0].port=80
httpd.@httpd[0].home=/www
network.eth0=switch
network.eth0.vlan0=1 2 3 4 5*
network.eth0.vlan1=0 5
network.loopback=interface
network.loopback.ifname=lo
network.loopback.proto=static
network.loopback.ipaddr=127.0.0.1
network.loopback.netmask=255.0.0.0
network.lan=interface
network.lan.type=bridge
network.lan.ifname=eth0.0
network.lan.proto=static
network.lan.ipaddr=192.168.1.1
network.lan.netmask=255.255.255.0
network.wan=interface
network.wan.ifname=eth0.1
network.wan.proto=static
network.wan.ipaddr=aa.bb.cc.dd
network.wan.netmask=255.255.255.0
network.wan.gateway=aa.bb.cc.254
network.wan.dns=aa.bb.cc.1
ntpclient.@ntpserver[0]=ntpserver
ntpclient.@ntpserver[0].hostname=0.openwrt.pool.ntp.org
ntpclient.@ntpserver[0].port=123
ntpclient.@ntpserver[1]=ntpserver
ntpclient.@ntpserver[1].hostname=1.openwrt.pool.ntp.org
ntpclient.@ntpserver[1].port=123
ntpclient.@ntpserver[2]=ntpserver
ntpclient.@ntpserver[2].hostname=2.openwrt.pool.ntp.org
ntpclient.@ntpserver[2].port=123
ntpclient.@ntpserver[3]=ntpserver
ntpclient.@ntpserver[3].hostname=3.openwrt.pool.ntp.org
ntpclient.@ntpserver[3].port=123
ntpclient.@ntpdrift[0]=ntpdrift
ntpclient.@ntpdrift[0].freq=0
ntpclient.@ntpclient[0]=ntpclient
ntpclient.@ntpclient[0].interval=60
system.@system[0]=system
system.@system[0].hostname=OpenWrt
system.@system[0].zonename=Asia/Tokyo
system.@system[0].timezone=JST-9
}}

参考

ファームウェアの構造

.trx

Building the custom firmware [Archive] - AsusForum.NET -- WL500gに詳しい解説あり。vmlinuz, cramfs, trailerの3つのファイルが含まれる。以下の方法でそれぞれのファイルが取り出せる。

pre> dd if=wg01060503_WL500g_en.trx of=1.6.5.3.vmlinuz skip=28 ibs=1 count=705256 dd if=wg01060503_WL500g_en.trx of=1.6.5.3.cramfs skip=705284 ibs=1 dd if=wg01060503_WL500g_en.trx of=1.6.5.3.trailer skip=3769092 ibs=1

/pre> 先頭の28バイトにヘッダがついているが、以下の形式である。

pre> typedef struct {

	uint32 magic; /* "HDR0" */
	uint32 len; /* Length of file including header */
	uint32 crc32; /* 32-bit CRC from flag_version to end of file */
	uint32 flag_version; /* 0:15 flags, 16:31 version */
	uint32 offsets[3]; /* Offsets of partitions from start of header */

} TRXHDR, *PTRXHDR;

/pre>

.bin

.trxファイルに付加的な情報を加えた形式。

リンク


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-10-04 (金) 02:11:44 (1475d)