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つのコマンドプロンプトで

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

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

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

を実行すればよい。

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

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:/#

Buffalo純正ファームに戻す

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

各種設定

各種設定のページへ

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

データベースの更新

# 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.

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

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

# ipkg install パッケージ名

パッケージ一覧の表示

# 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)

続く

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

# 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.

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

# 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.

cron

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

crontab ファイルの作成

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

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

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 の自動起動。

# /etc/init.d/cron enable
# /etc/init.d/cron start

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

USBストレージを使う

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

openntpd

# 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.

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

# see http://twiki.ntp.org/bin/view/Servers/NTPPoolServers
#servers pool.ntp.org
#servers ntp.nict.jp
servers ntp.ring.gr.jp	←ntpdと違い、serverssが付くのに注意。

PPTPD

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

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

# 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.

起動スクリプトの有効化

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

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

  • 原因
    ppp_mppeモジュールをロードするのに必要なモジュールが自動的にロードされない。モジュールの依存情報が落ちているのか?
    情報:OpenWrt / unable to load ppp_mppe module
  • 対策
    必要なモジュールが自動的にロードされるようにする。
    • /etc/modules.d/31-mppe
      blkcipher	←追加
      ecb		←追加
      ppp_mppe
      これでうまくいくと思ったけど、追加したモジュールは自動的にロードするものの、肝心のppp_mppeはロードされない。うーん、どうしてだろう? 手動でinsmodすればロードされるのに。

設定ファイル

/etc/init.d/pptpd

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

#!/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 blkcipher ecb ppp_mppe; do
                insmod $m >/dev/null 2>&1
        done
        $BIN $OPTIONS
}

stop() {
        [ -f $PID_F ] && kill $(cat $PID_F)
}

情報:OpenWrt / PPTPD troubles

/etc/pptpd.conf

#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

/etc/ppp/options.pptpd

#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

/etc/ppp/chap-secrets

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

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

# chmod 600 /etc/ppp/chap-secrets

Firewallの設定変更

  • /etc/firewall.user
    PPTPパケット(TCP port 1723およびGRE)の通過を許可
    ### 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
    PPTPクライアントからLAN上マシンへの通信許可
    ### 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>

スクリプトの起動

# /etc/init.d/firewall restart
# /etc/init.d/pptpd start

OpenVPN

OpenVPNのページへ

dropbear

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

busybox

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

-mtime, -mmin オプション

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

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

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

# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_MTIME is not set
		↓
CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_MTIME=y

スクリプト集

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

UCI

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

オプション一覧

# 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の一例

# 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つのファイルが含まれる。以下の方法でそれぞれのファイルが取り出せる。

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

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

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;

.bin

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

リンク


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-10-04 (金) 02:11:44 (966d)