Hack a Dayで紹介されていたAdafruitsの記事に従ってOnion-Piをセットアップしてみようと思い試してみました。その際の備忘録です。結論から言うとTorにたどり着く前に失敗です。
ハードウェアは Raspberry Pi モデルBの256MB版とバッファロー WLI-UC-GNMの組み合わせです。RasPiの方は512MB版も持っているので256MB版はそろそろ何か専用機にしてしまおうかな・・・と思っていたところにOnion-Piの記事が出ていたので、試してみようと思った次第です。(別に怪しいことをするわけじゃないんですが・・・・どんな挙動をするのか見てみたかったんです^^;)
WLI-UC-GNMはRT3070チップ搭載の安価な11n対応のUSB無線LANアダプタです。今回は、改めてSDカードを作るところからスタートです。
※赤文字なのは失敗の原因だからです。
1.Raspbian Wheezyをダウンロード
http://www.raspberrypi.org/downloads からRaspbian Wheezyをダウンロードし、
$ sha1sum 2013-05-25-wheezy-raspbian.zip 131f2810b1871a032dd6d1482dfba10964b43bd2 2013-05-25-wheezy-raspbian.zip
として正しくダウンロードできていることを確認する
2.ダウンロードしたWheezyを展開し、4GB以上のSDカードに書き込む
$ unzip 2013-05-25-wheezy-raspbian.zip $ sudo dd if=2013-05-25-wheezy-raspbian.img of=/dev/sde bs=1M $ sync
3.SDカードを取り出し、Raspberry Piに装着して起動する
今回はHDMI経由でモニタに接続して起動した。
起動すると、Raspi-Configが立ち上がるので、以下の作業を実施。
- ファイルシステムの拡張(Expand Filesystem)
- パスワードの変更(Change User Password)
パスワードは実験用のものを付与した - オーバースキャンの許可(Advanced-Option → Overscan)
- SSHログインの許可(Advanced-Option → SSH)
- タイムゾーンの変更(Internationalisation Options → Change Timezone)
Asia → Tokyo に設定
※タイムゾーンの設定をすると後でhostapdなどで挙動が怪しい感じがする
設定後、再起動する。以降はHDMIで出力される起動時画面のIPアドレスを参考に、SSHでログインして作業する。
4.Raspberry-Piを無線LANのアクセスポイントとして設定
Adafruitのこの記述を参考に実施
(1) hostapdとisc-dhcp-serverをインストールする。
$ sudo apt-get install hostapd isc-dhcp-server
/etc/dhcp/dhcpd.conf を編集する。
$ sudo nano /etc/dhcp/dhcpd.conf
(2) DHCPサーバの設定を行う
以下の行をコメントアウトする(下記は修正前)
option domain-name "example.org"; option domain-name-servers ns1.example.org, ns2.example.org;
下記の行の3行目のauthoritative; のコメントアウトを外す(下記は修正前)
# If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. #authoritative;
最後の行に以下の記述を追加する。
subnet 192.168.42.0 netmask 255.255.255.0 { range 192.168.42.10 192.168.42.50; option broadcast-address 192.168.42.255; option routers 192.168.42.1; default-lease-time 600; max-lease-time 7200; option domain-name "local"; option domain-name-servers 8.8.8.8, 8.8.4.4; }
次に、/etc/default/isc-dhcp-server を編集する
$ sudo nano /etc/default/isc-dhcp-server
対象とする interface を指定するため、「INTERFACES=””」を探して、「INTERFACES=”wlan0″」に修正する。
(3) wlan0のIPアドレスを設定する
$ sudo ifdown wlan0 $ sudo nano /etc/network/interfaces
で以下の内容を /etc/network/interfaces に対して修正する。
- 「auto wlan0」で始まる行をコメントアウトする
- 以下の行を「allow hotplug wlan0」の後に書き足す
iface wlan0 inet static address 192.168.42.1 netmask 255.255.255.0
- そこから後ろの行はコメントアウトする
修正後のファイルはこんな感じ
auto lo
iface lo inet loopback iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static address 192.168.42.1 netmask 255.255.255.0
#iface wlan0 inet manual #wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf #iface default inet dhcp
(4) とりあえず wlan0 を起動する
$ sudo ifconfig wlan0 192.168.42.1
(5) アクセスポイントとしての設定を行う
$ sudo nano /etc/hostapd/hostapd.conf
として新規のファイル作成を行う。内容は、
interface=wlan0 driver=rtl871xdrv ssid=Pi_AP hw_mode=g channel=6 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=Raspberry wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
2行目の driver の行が気になる・・・・が、とりあえずこのまま進んでみます。
次に、/etc/default/hostapd に設定ファイルの在り処を記述する。
/etc/default/hostapd を編集し、「DAEMON_CONF=””」と言う箇所を「DAEMON_CONF=”/etc/hostapd/hostapd.conf”」に修正する。
(6) IPパケット転送の設定を行う
$ sudo nano /etc/sysctl.conf
で /etc/sysctl.conf を開き、最後に以下の記述を追加する。
net.ipv4.ip_forward=1
これで起動時にIP転送が有効となる。
(7) ネットワーク転送の設定
以下のコマンドを実行する。
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE $ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT $ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
結果を以下の方法で確認する。
$ sudo iptables -t nat -S $ sudo iptables -S
上記設定を起動時に行うため、設定を保存する。
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
起動時に反映させるため、/etc/network/intefaces の最後に以下の記述を追加する
up iptables-restore < /etc/iptables.ipv4.nat
(8) hostapdをアップデートする
以下の手順で hostapd をアップデートする
$ wget http://www.adafruit.com/downloads/adafruit_hostapd.zip $ unzip adafruit_hostapd.zip $ sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.ORIG $ sudo mv hostapd /usr/sbin $ sudo chmod 755 /usr/sbin/hostapd
(9) 起動テスト
$ sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
うーん、やっぱりドライバが違うとのこと。いろいろあたってみて、わずかに「rt2x00で動いた」と言う情報をみかけるので「rt2800usb」「rt2x00usb」「rt2800」「rt2x00」「nl80211(これはAtheros用のようだ)」などいろいろ試してみたけどダメ。
探しているうちに見つかったのが、参考の3番目(AP-mode Howto From Rt2x00Wiki)の冒頭の「This is a short guide to setting up AP-mode on rt2x00 chips. Note that this will not work with Ralink’s USB chips because we don’t know how to get status messages (ACK/FAIL) for sent packets.」という記述。
・・・・USB版のRalinkチップのアダプタはダメって書いてある・・・orz
というわけでOnion-Piどころかhostapdの時点で諦めました。またの機会にということで。
参考
- hostapd を用いた無線 LAN アクセスポイントの構築
- hostapd: IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
- AP-mode Howto From Rt2x00Wiki