Raspberry pi を無線AP&ルータ化して佐倉綾音に接続(意味浅)する

作業メモです。

ドングルの用意

・・・の前に、今回の構築イメージです。
f:id:izugch73:20160223131200p:plain

もともと、RaspberryPiはBuffaloの無線APに WLI-UC-GNM で繋がっていました。
www.amazon.co.jp

当初、Raspberry piを有線で繋げ、WLI-UC-GNM を無線APにすればいいやと思っていたのですが、 WLI-UC-GNM は無線APにはならないっぽかったので、今回はPLANEXの GW-USNANO2A を別挿しして、無線2台体制で使用します。

www.amazon.co.jp

というわけで、用意したドングルは上記2つになります。

静的IPの割り当て

まずは GW-USNANO2A を挿し、状態を確認します。

pi@raspberrypi:~ $ lsusb
Bus 001 Device 005: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 004: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Device005で認識されていることが確認できました。
なお、もとからLANに繋がっている WLI-UC-GNM が Device 004にて認識されています。

IPを割り振ります。

pi@raspberrypi:~ $ cat /etc/network/interfaces
()
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.4.168
netmask 255.255.255.0
gateway 192.168.4.254
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet static
address 192.168.168.168
netmask 255.255.255.0
gateway 192.168.168.168

WLI-UC-GNM がwlan0、 GW-USNANO2A がwlan1になるので、冒頭のイメージ通りに指定します。

hostapd の設定

AP化するためにhostapdを使用します。
hostapdは sudo apt-get install hostapd でも落ちてくるのですが、GW-USNANO2A 用ではありません(ドライバが違います)。
ここでは手動でダウンロードします。

$ wget http://www.adafruit.com/downloads/adafruit_hostapd.zip 
$ unzip adafruit_hostapd.zip 
$ sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.org 
$ sudo mv hostapd /usr/sbin
$ sudo chmod 755 /usr/sbin/hostapd

次にhostapd用の設定を行います。
このファイルは存在していないはずなので、新規に作成してください。
内容のSSID、passphrase等は適宜変更してください。

$ cat /etc/hostapd/hostapd.conf
interface=wlan1
driver=rtl871xdrv
ssid=佐倉綾音
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=ayanesakura
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

/etc/default/hostapd に、hostapd起動時に先ほど作ったファイルを読み込むよう指定します。

pi@raspberrypi:~ $ cat /etc/default/hostapd
# Defaults for hostapd initscript
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
DAEMON_CONF="/etc/hostapd/hostapd.conf"

(後略)

では起動テストしてみます。

pi@raspberrypi:~ $ sudo hostapd /etc/hostapd/hostapd.conf
Configuration file: /etc/hostapd/hostapd.conf
drv->ifindex=4
l2_sock_recv==l2_sock_xmit=0x0x1bc8638
(略)
Using interface wlan1 with hwaddr 00:22:cf:fa:84:2a and ssid '佐倉綾音'

SSID '佐倉綾音' でAPが立ち上がりました。
ただしまだDHCPを立ててないので、接続するには静的IPを求めに行く必要があります。

ではサービスとして立ち上げておきましょう。

$ sudo service hostapd start

DHCPの設定

IPを動的に佐倉サーバ(?)に払い出してもらうために、DHCPを設定しましょう。

$ sudo apt-get install isc-dhcp-server

※ updateしないと見つからない場合もあるようです。

$ sudo apt-get update
$ sudo apt-get install isc-dhcp-server

/etc/dhcp/dhcpd を設定します。

pi@raspberrypi:~ $ cat /etc/dhcp/dhcpd.conf
(前略)
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative; # ← コメントアウトを外します
(中略)
# 以下、作成したいネットワーク環境に応じて変更します。
subnet 192.168.168.0 netmask 255.255.255.0 {    # サブネット
    range 192.168.168.10 192.168.168.100;       # DHCP払い出し範囲
    option broadcast-address 192.168.168.255;   # ブロードキャストアドレス
    option routers 192.168.168.168;             # ルータアドレス
    default-lease-time 600;                     # 秒
    max-lease-time 7200;                        # 秒
    option domain-name "ayane-l-ocal";          # ドメイン名
    option domain-name-servers 8.8.8.8, 8.8.4.4;    # DNS
}

続いて、IP払い出しを行うネットワークをwlan1側に設定します。

pi@raspberrypi:~ $ cat /etc/default/isc-dhcp-server
(前略)
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="wlan1"

起動しましょう。

$ sudo service isc-dhcp-server start

これで佐倉綾音LANに接続するとIPが動的に払い出されます。

IPルーティングの設定

さて、アクセスポイントにはなりましたが、ルータとして機能して欲しいので、ip forwardingの設定をします。

まずは /etc/sysctl.conf の設定。

pi@raspberrypi:~ $ cat /etc/sysctl.conf
(前略)
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1   # ← コメントアウトを外します
(後略)

この設定によりip forwardingが有効になりますが、そのためには再起動の必要があります。
再起動せずに有効化したい場合は、/proc/sys/net/ipv4/ip_forward に1を打ち込んでください。

$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

続いてiptablesの設定を行います。
wlan0 ~ wlan1 の通信をforwardingしてあげましょう。

$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
$ sudo iptables -A FORWARD -i wlan0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT

最後に、 /etc/iptables.ipv4.nat に書き込みます。

$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

設定したiptablesのデータをwlan1起動時に読み込んでもらうよう、 /etc/network/interfaces を再度編集します。

pi@raspberrypi:~ $ cat /etc/network/interfaces
()
allow-hotplug wlan1
iface wlan1 inet static
address 192.168.168.168
netmask 255.255.255.0
gateway 192.168.168.168
up iptables-restore < /etc/iptables.ipv4.nat    # 追記

以上で設定は全て完了です。


接続テスト

SSID'佐倉綾音'に接続し(hostapd)、IPが自動的に払い出され(dhcp)、外部ネットワークに繋がれば(ip forwarding)、すべて正常に完了です。
おつかれさまでした。
f:id:izugch73:20160223131211j:plain:w240 f:id:izugch73:20160223131218j:plain:w240