BeagleBoneBlackを無線LAN親機にするまで

# 概要
BeagleBoneBlackを無線LANの親機(アクセスポイント)にするまでの設定手順をまとめました。

- [BeagleBoneBlack](http://beagleboard.org/BLACK) Rev.C (OS:Debian Wheezy)を使用
- WindowsマシンとのUSB接続での接続機能を生かしたままにする。
- 無線LANアダプタは[BuffaloのWLI-UC-GNME](http://buffalo.jp/product/wireless-lan/client/wli-uc-gnme/)を使用。
- 本体のIPは任意だが、ここでは固定IP「192.168.100.100」を使うものとする。
- DHCPで貸与するIPの範囲は「192.168.100.101～192.168.100.110」とする。
- アクセスポイント名は任意だが、ここでは「BBB」を使うものとする。
- アクセスポイントのパスフレーズは任意の8文字以上の文字列が使えるが、ここでは「beaglebone」を使うものとする。

## Windowsマシンとの接続
参考URL: [http://beagleboard.org/getting-started](http://beagleboard.org/getting-started)

- WindowsマシンのUSBポートにBBBを接続する。
- 参考URLに記載されたリンクから合致するOSのドライバをダウンロードし、インストールする。
- [http://192.168.7.2](http://192.168.7.2)にブラウザからアクセスできれはOK。
- SSHで192.168.7.2にログインする。(ユーザ名: root, パスワード: root)

## 固定IP付与とLANインターフェース間転送設定
固定IPを付与し、無線LANインターフェースwlan0の内容をeth0に転送する設定を追記する。

- /etc/network/interfacesを編集する。以下の内容を追記する。

```
auto wlan0
iface wlan0 inet static
    address 192.168.100.100
    netmask 255.255.255.0
    pre-up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    up iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
```

- IPフォワード設定を有効化する。

`echo 1 > /proc/sys/net/ipv4/ip_forward`

- IPフォワード設定の設定ファイル/etc/sysctl.confを編集する。下記内容を追記する。

```
net.ipv4.ip_forward=1
```

## hostapdの設定
hostapdは無線アクセスポイント機能を提供するデーモンです。BeagleBoneBlackにはプリインストール(ver1.0)されています。この時点でUSBに無線LANのアダプタを挿入しておきます。

- 設定ファイル/etc/hostapd/hostapd.confを作成する。下記内容を追記する。

```
interface=wlan0
driver=nl80211
ssid=BBB
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=beaglebone
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
```

- hostapdデーモンが上記設定ファイルで起動するようにする。/etc/default/hostapdを編集し、下記内容を追記する。

```
DAEMON_CONF="/etc/hostapd/hostapd.conf"
```

## DHCPの設定
アクセスポイントだけではアクセス元のIPが付与されず、接続できません。DHCPでアクセスしてくるPCにIPを貸し与える必要があります。
WindowsマシンとのUSB接続でも裏でudhcpdというデーモンが動いてIPを付与しています。しかしこのデーモンは貧弱で２つのネットワークにIPを貸与できないので、以下の手順では無効化して別のDHCPデーモンを使っています。

- Windowsマシンでdnsmasqをダウンロードする。

http://www.thekelleys.org.uk/dnsmasq/
http://www.thekelleys.org.uk/dnsmasq/doc.html

- dnsmasqをビルドしてインストールする。ここではバージョン2.75を使う。

`tar -zxvf dnsmasq-2.75.tar.gz`
`cd dnsmasq-2.75`
`make`
`sudo make install`

- dnsmasqのtarの中の設定ファイルテンプレートをコピーする。

`cp dnsmasq.conf.example /etc/dnsmasq.conf`

- dnsmasqの設定ファイル/etc/dnsmasq.confを編集する。下記の内容を追記する。usb0はWindowsマシンとの接続設定、wlan0が無線LANでの接続設定となっている。

```
interface=usb0
interface=wlan0
dhcp-range=usb0,192.168.7.1,192.168.7.1,255.255.255.252,4h
dhcp-range=wlan0,192.168.100.101,192.168.100.110,255.255.255.0,4h
```

- dnsmasqのsystemd自動起動設定ファイル/lib/systemd/system/dnsmasq.serviceを作成する。

```
[Unit]
Description=DNS caching server.
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/var/run/dnsmasq.pid
ExecStart=/usr/local/sbin/dnsmasq

[Install]
WantedBy=multi-user.target
```

- dnsmasqをsystemdで自動起動するように設定する。

`systemctl daemon-reload`
`systemctl enable dnsmasq.service`

- udhcpdを無効化する。

`insserv -r udhcpd`

- dnsmasqを起動する。

`systemctl start dnsmasq.service`

- BeagleBoneBlackを再起動する。

`reboot`

## 確認
再起動後アクセスポイントBBBが見えるはずです。アクセスポイントBBBに接続している間は192.168.100.100からBeagleBoneBlackに接続できるようになります。

WindowsマシンとのUSB接続機能も生かしたままなので、USB接続中は192.168.7.2で接続できます。