アクセスポイント(無線LANブリッジ)として使用する場合の設定を行ったときのメモです。
ドライバのビルドせずともWLI-UC-GNアダプタを刺すだけで認識した。
この rt2800usb はすんなりと動いた。
% uname -a #OBSA7標準のこのバージョンを使用
Linux obsa7 3.2.40 #1 Mon Oct 21 14:10:25 JST 2013 armv5tel GNU/Linux
遅ればせながら、# aptitude update と # aptitude safe-upgrade を行い
kernel-image や OpenSSL を含むアップデートを行う前に、wlan0のインターフェイス を確認しておく。
ここまでの約3ヶ月、WLI-UC-GNは問題なく、とても良く働いてくれている。
そして、iPerfでobsA7とiMac間をパフォーマンス測定すると。
ちなみに有線LANだと。以下のように132Mbits/secと計測した。
1.無線LAN子機 WLI-UC-GN
BUFFALO WLI-UC-GN、このWLI-UC-GNは、 obs600でも使用していたもの (記事2011年6月19日 obs600-10 BUFFALOアダブタ) で、やや安定感が低く時々はドライバをUnload/Loadしながらで、やがて使わなくなっています。linux-2.6.36のときから、linux-3.2.40にアップグレードした今回のドライバではどうでしょうか。 WLI-UC-GN抜き差ししやすいように、短めの延長ケーブルを使っている。ドライバのビルドせずともWLI-UC-GNアダプタを刺すだけで認識した。
まず始めは、rtl8192cu な GW-USValue-EZを試みたがうまく設定できなかった。
% tail -f /var/log/syslog
Jan 6 11:11:05 obsa7 kernel: usb 1-1.2: new high-speed USB device number 6 using orion-ehci
Jan 6 11:11:05 obsa7 kernel: usb 1-1.2: New USB device found, idVendor=0411, idProduct=015d
Jan 6 11:11:05 obsa7 kernel: usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jan 6 11:11:05 obsa7 kernel: usb 1-1.2: Product: 802.11 n WLAN
Jan 6 11:11:05 obsa7 kernel: usb 1-1.2: Manufacturer: Ralink
Jan 6 11:11:05 obsa7 kernel: usb 1-1.2: SerialNumber: 1.0
Jan 6 11:11:05 obsa7 kernel: usb 1-1.2: reset high-speed USB device number 6 using orion-ehci
Jan 6 11:11:05 obsa7 kernel: ieee80211 phy18: Selected rate control algorithm 'minstrel_ht'
Jan 6 11:11:05 obsa7 kernel: Registered led device: rt2800usb-phy18::radio
Jan 6 11:11:05 obsa7 kernel: Registered led device: rt2800usb-phy18::assoc
Jan 6 11:11:05 obsa7 kernel: Registered led device: rt2800usb-phy18::quality
Jan 6 11:11:05 obsa7 kernel: usbcore: registered new interface driver rt2800usb
# lsmod
Module Size Used by
rt2800usb 12586 0
rt2800lib 39792 1 rt2800usb
crc_ccitt 1045 1 rt2800lib
rt2x00usb 7293 1 rt2800usb
rt2x00lib 29900 3 rt2x00usb,rt2800lib,rt2800usb
この rt2800usb はすんなりと動いた。
% uname -a #OBSA7標準のこのバージョンを使用
Linux obsa7 3.2.40 #1 Mon Oct 21 14:10:25 JST 2013 armv5tel GNU/Linux
2.ralinkファームウェアインストール
# aptitude install firmware-ralink
The following NEW packages will be installed:
firmware-ralink
0 packages upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 21.4 kB of archives. After unpacking 96.3 kB will be used.
Get: 1 http://ftp.plathome.co.jp/pub/debian/ wheezy/non-free firmware-ralink all 0.36+wheezy.1 [21.4 kB]
Fetched 21.4 kB in 0s (82.6 kB/s)
Selecting previously unselected package firmware-ralink.
(Reading database ... 33634 files and directories currently installed.)
Unpacking firmware-ralink (from .../firmware-ralink_0.36+wheezy.1_all.deb) ...
Setting up firmware-ralink (0.36+wheezy.1) ...
# rt2*.bin rt3*.bin rt73.bin がインストールされる
# ls /lib/firmware/
RTL8192E mts_cdma.fw rt2661.bin rt3090.bin ti_5052.fw
RTL8192SU mts_edge.fw rt2860.bin rt73.bin whiteheat.fw
edgeport mts_gsm.fw rt2870.bin rtl_nic whiteheat_loader.fw
kaweth rt2561.bin rt3070.bin rtlwifi
keyspan_pda rt2561s.bin rt3071.bin ti_3410.fw
3.hostapdのインストール
% wget http://hostap.epitest.fi/releases/hostapd-2.0.tar.gz
% tar zxf hostapd-2.0.tar.gz
% cd hostapd-2.0/hostapd
% cp defconfig .config
% echo CONFIG_LIBNL32=y >> .config
% diff defconfig .config #CONFIG_IEEE80211N=yも変更した
139c139
< #CONFIG_IEEE80211N=y
---
> CONFIG_IEEE80211N=y
269a270
> CONFIG_LIBNL32=y
% sudo apt-get libnl-genl-3-dev libssl-dev
% make
# make install
# /usr/local/bin/hostapd -v
hostapd v2.0
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2012, Jouni Malinenand contributors
#hostapd.confはとりあえず動いた状態でまだ吟味できていない
# cat /etc/hostapd/hostapd.conf
interface=wlan0
bridge=br0
driver=nl80211
country_code=JP
ieee80211d=1
ssid=MYSSID
channel=6
hw_mode=g
wpa=2
wpa_passphrase=MYPASSPHRASE
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
ieee80211n=1
wmm_enabled=1
#
4.hostapdの実行
syslogにこのようなメッセージで"WPA: pairwise key handshake completed"がでてるとOK。
# /usr/local/bin/hostapd /etc/hostapd/hostapd.conf
Configuration file: /etc/hostapd/hostapd.conf
rfkill: Cannot open RFKILL control device
Using interface wlan0 with hwaddr 4c:e6:76:XX:XX:XX and ssid "MYSSID"
^C 起動を確認して中断し、backgroundの-Bをつけて起動。
# /usr/local/bin/hostapd -B /etc/hostapd/hostapd.conf
# iwconfig 2>&1|egrep -v "^$|no wireless"
wlan0 IEEE 802.11bgn Mode:Master Frequency:2.437 GHz Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:on
mon.wlan0 IEEE 802.11bgn Mode:Monitor Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:on
# ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 4c:e6:76:XX:XX:XX
inet6 addr: fe80::4ee6:76ff:XXX:YYYY/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36414 errors:0 dropped:0 overruns:0 frame:0
TX packets:48406 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4066244 (3.8 MiB) TX bytes:39695195 (37.8 MiB)
# tail -f /var/log/syslog
Jan 6 11:44:59 obsa7 kernel: device wlan0 entered promiscuous mode
Jan 6 11:44:59 obsa7 kernel: br0: port 2(wlan0) entering forwarding state
Jan 6 11:44:59 obsa7 kernel: br0: port 2(wlan0) entering forwarding state
Jan 6 11:45:02 obsa7 ntpd[3148]: Listen normally on 32 wlan0 fe80::4ee6:76ff:XXX:YYYY UDP 123
Jan 6 11:45:02 obsa7 ntpd[3148]: peers refreshed
Jan 6 11:45:10 obsa7 kernel: wlan0: no IPv6 routers present
Jan 6 11:45:14 obsa7 kernel: br0: port 2(wlan0) entering forwarding state
Jan 6 11:45:58 obsa7 hostapd: wlan0: STA 84:7a:88:XX:XX:XX IEEE 802.11: authenticated
Jan 6 11:45:58 obsa7 hostapd: wlan0: STA 84:7a:88:XX:XX:XX IEEE 802.11: associated (aid 1)
Jan 6 11:45:58 obsa7 hostapd: wlan0: STA 84:7a:88:XX:XX:XX RADIUS: starting accounting session 52CA18AB-00000000
Jan 6 11:45:58 obsa7 hostapd: wlan0: STA 84:7a:88:XX:XX:XX WPA: pairwise key handshake completed (RSN)
5.rt2800usbドライバのアンロード/ロード
別ドライバGW-USValue-EZなどrtl8192cuをテストするのにドライバのアンロード/ロードをするたびに、wlan0,wlan1,wlan2...とインターフェイス名が変わるのはおもしろくないので、wlan0固定で使えるように以下のようなスクリプトを書いて回避するようにした。インターフェイス名はこのファイルが影響するもよう/etc/network/interfaces に指定するのがスマートなのでしょうが、テスト時の柔軟さを優先すると、スクリプト書きが好みです。 安定して動作するか、転送速度・性能を含めて経過観察していきたい。
# tail -3 /etc/udev/rules.d/70-persistent-net.rules
# USB device 0x:0x (rt2800usb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="4c:e6:76:3c:a9:01", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"
#70-persistent-net.rulesの後ろ3行を削除して、ドライバをロードすると、
#いつも"wlan0"になるが、もっとスマートな方法がありそうな...
# cat /etc/init.d/bridge.sh
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
LINK=`cat /etc/LIF` #もしくはLINK=eth0
WIF=${WIF:=eth1}
case "$1" in
start)
echo -n "Configuring bridge interfaces..."
ps ax|grep dhclient|grep -qv grep
if [ $? != 1 ]; then
killall dhclient
fi
lsmod | grep -q rt2800usb
if [ $? != 1 ]; then
rmmod rt2800usb rt2800lib crc_ccitt rt2x00usb rt2x00lib
fi
RDIR="/etc/udev/rules.d"
RULE="70-persistent-net.rules"
RSRC=${RDIR}/${RULE}
WLAN="wlan0"
if [ -f $RSRC ]; then
grep -q $WLAN $RSRC
if [ $? = 0 ]; then
RTMP="/tmp/${RULE}"
cp -p $RSRC $RTMP
POS1=`egrep -n $WLAN $RTMP |head -1| cut -d: -f1`
POS0=`expr ${POS1} - 2`
sed -e ${POS0},${POS1}d $RTMP > $RSRC
fi
fi
#diff /tmp/70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules
# vi /etc/udev/rules.d/70-persistent-net.rules ... sed /wlan0/d
brctl addbr br0
brctl addif br0 $LINK
ifconfig $LINK 0.0.0.0 up
sleep 1
modprobe rt2800usb
( sleep 2; /sbin/dhclient -q ${WIF}; sleep 5; \
/usr/local/bin/hostapd -B /etc/hostapd/hostapd.conf ) &
echo "done."
;;
stop)
echo -n "Deconfiguring bridge interfaces..."
ps ax|grep hostapd|grep -qv grep
if [ $? != 1 ]; then
killall hostapd
fi
killall dhclient
ifconfig -a|grep -q br0
if [ $? != 1 ]; then
ifconfig br0 0.0.0.0 down
fi
ifconfig $LINK 0.0.0.0 down
lsmod | grep -q rt2800usb
if [ $? != 1 ]; then
rmmod rt2800usb rt2800lib crc_ccitt rt2x00usb rt2x00lib
fi
brctl delif br0 $LINK
brctl show|grep -q $LINK
if [ $? != 1 ]; then
brctl delif br0 $LINK
fi
brctl show|grep -q br0
if [ $? != 1 ]; then
brctl delbr br0
fi
echo -n "dhclient $LINK . "
/sbin/dhclient -q $LINK
echo "done."
;;
*)
echo "Usage: $0 {start|stop}">&2
exit 1
;;
esac
#
6.WLI-UC-GN稼働状況(追記2014.4.21)
OBS A7 は実に安定している。堅牢ということばが似合うルータだ。遅ればせながら、# aptitude update と # aptitude safe-upgrade を行い
kernel-image や OpenSSL を含むアップデートを行う前に、wlan0のインターフェイス を確認しておく。
wlan0は連続93日稼働で、TX側36020512パケットで(3.6 GiB)となっている。
% date
Mon Apr 21 09:39:04 JST 2014
% uptime
09:39:29 up 93 days, 19:35, 2 users, load average: 0.05, 0.09, 0.06
% ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 4c:e6:76:3c:a9:01
inet6 addr: fe80::4ee6:76ff:fe3c:a901/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:34453010 errors:0 dropped:0 overruns:0 frame:0
TX packets:36020512 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2098197015 (1.9 GiB) TX bytes:3952858575 (3.6 GiB)
ちなみにブリッジinterface br0には77.8 GiB流量があったようだ。
br0 Link encap:Ethernet HWaddr 00:0a:85:09:01:74
inet addr:192.168.1.30 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20a:85ff:fe09:174/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:44300752 errors:0 dropped:2 overruns:0 frame:0
TX packets:67218375 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5603503687 (5.2 GiB) TX bytes:83616546596 (77.8 GiB)
ここまでの約3ヶ月、WLI-UC-GNは問題なく、とても良く働いてくれている。
そして、iPerfでobsA7とiMac間をパフォーマンス測定すると。
およそ無線LANでは、31Mbits/secと計測できた。
(obsA7側) % iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.1.30 port 5001 connected with 192.168.1.62 port 65098
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.1 sec 37.5 MBytes 31.1 Mbits/sec
(iMac側) % iperf -c obsa7
------------------------------------------------------------
Client connecting to obsa7, TCP port 5001
TCP window size: 129 KByte (default)
------------------------------------------------------------
[ 5] local 192.168.1.62 port 65098 connected with 192.168.1.30 port 5001
[ ID] Interval Transfer Bandwidth
[ 5] 0.0-10.1 sec 37.5 MBytes 31.2 Mbits/sec
ちなみに有線LANだと。以下のように132Mbits/secと計測した。
(obsA7側) % iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.1.30 port 5001 connected with 192.168.1.61 port 65039
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.0 sec 157 MBytes 132 Mbits/sec
(iMac側) % iperf -c obsa7
------------------------------------------------------------
Client connecting to obsa7, TCP port 5001
TCP window size: 129 KByte (default)
------------------------------------------------------------
[ 5] local 192.168.1.61 port 65039 connected with 192.168.1.30 port 5001
[ ID] Interval Transfer Bandwidth
[ 5] 0.0-10.0 sec 157 MBytes 132 Mbits/sec
今は、/etc/hostapd/hostapd.conf のhw_mode=gだが、ここが11nでいつか動けばいいなぁ。
# iwconfig
wlan0 IEEE 802.11bgn Mode:Master Frequency:2.437 GHz Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:on
mon.wlan0 IEEE 802.11bgn Mode:Monitor Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:on