2012/11/11

MicroServerをアクセスポイント化

実はしばらく前からルータ、 NFS/NTP サーバとして運用している MicroServer ですが
ずるずるとやっていなかった AP 化をしました
今までの構成はオンボードの NC107i(eth0) が光回線のモデムに PPPoE で繋がっていて
82574L(eth1) がハブに接続していて DHCP でアドレスを配っていました

ここに WLI-UC-GNM を追加してアクセスポイントとして動作させました
この製品は USB 接続で a/b/g/n 対応、さらにアクセスポイントモードもサポートしています
RT3070V というチップを使用していて Linux では rt2800usb というドライバでサポートされています
Drivers - Linux Wireless
devices - Linux Wireless

基本的にこのあたりを参考に進めました
Ralink RT2870 - Gentoo Linux Wiki
Wireless/Access point - Gentoo Linux Wiki

まずカーネルの設定を変更します
ドライバを追加するのと、 LAN 向けのインターフェースをひとつにまとめたいのでブリッジを有効に
Device Drivers -> Network device support -> Wireless LAN -> Ralink driver support -> Ralink rt27xx/rt28xx/rt30xx (USB) support
Networking support -> Networking options -> 802.1d Ethernet Bridging

ファームウェアが必要なのでインストールします
sys-kernel/linux-firmware に含まれているらしいです
/lib/firmware/rt3070.bin あたりにインストールされます
# emerge -v sys-kernel/linux-firmware

次に iwconfig が必要なのでこれもインストール
# emerge -v net-wireless/wireless-tools

この時点で iwconfig を実行して wlan0 が見えれば認識されているはずです
# iwconfig
ppp0      no wireless extensions.

eth0      no wireless extensions.

eth1      no wireless extensions.

lo        no wireless extensions.

wlan0     IEEE 802.11bgn  Mode:Managed  Frequency:2.412 GHz  Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:on

その他必要なものもインストールします
# emerge -v net-misc/bridge-utils net-wireless/hostapd net-wireless/iw

ブリッジの設定をして eth1 と wlan0 をひとまとめに扱えるようにします
/etc/conf.d/net の設定内容は以下のような感じに (必要箇所のみ抜粋)
preup の部分はこれを追加しないとブリッジの作成時に失敗するため
ブリッジへの追加前にこのコマンドが実行されるようにしました
How To: Create an 802.11n AP (Access Point) w/ Debian on a Dockstar/Pogoplug/kirkwood device
Gentoo Linux ドキュメント -- 機能の追加
Bridging Network Interfaces - Gentoo Linux Wiki
preup() {
    if [ ${IFACE} = "br0" ]; then
        iw dev wlan0 set 4addr on
    fi
}

config_eth1="null"

modules_wlan0="!iwconfig !wpa_supplicant"
config_wlan0="null"

bridge_br0="eth1 wlan0"
config_br0="10.0.0.254 broadcast 10.0.0.255 netmask 255.255.255.0"

起動用のシンボリックリンクを作成して起動してみる
正しく起動できれば br0 にアドレスが割り当てられているのが確認できる
# cd /etc/init.d/
# ln -s net.lo net.eth1
# ln -s net.lo net.wlan0
# ln -s net.lo net.br0
# /etc/init.d/net.br0 start
# ifconfig br0
br0       Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          inet addr:10.0.0.254  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:56649 errors:0 dropped:6 overruns:0 frame:0
          TX packets:59924 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:7172489 (6.8 MiB)  TX bytes:44825137 (42.7 MiB)
# /etc/init.d/net.br0 stop

最後に hostapd の設定をする
/etc/hostapd/hostapd.conf の変更した部分を列挙しておく
interface=wlan0
bridge=br0
ssid=access_point_name
ieee80211n=1
wpa=3
wpa_passphrase=passphrase
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP

あと忘れてはいけないのが今まで eth1 と書いていた部分を br0 に変更すること
自分の場合は /etc/dnsmasq.conf と iptables のルールを修正した

以下のようにするとネットワークとアクセスポイントが起動して他の端末から接続できるようになる
# /etc/init.d/net.br0 start
# /etc/init.d/hostapd start

0 件のコメント:

コメントを投稿