RaspberryPi
Raspberrypi3

Raspberry Pi 3 で BUFFALO WI-U2-433DM 動かして無線LANルータにする

More than 1 year has passed since last update.

Raspberry Pi で 無線ルータを作ります。
Raspberry Pi 3 や Raspberry Pi Zero W の場合は内蔵で Wi-Fi 機能が入ってますが今回はその機能を使いません。
こちらを使います。

IMG_20170419_191034 (1).jpg

BUFFALO WI-U2-433DM。802.11acのUSBドングルです。
RaspberryPiにWi-Fiドングルを刺して使おうとしても、不安定なことが多いのですが、これはいろいろ検証の結果、安定して使えるものです。

参考にしたサイト

https://raspberrypi.stackexchange.com/questions/67719/how-do-i-install-the-drivers-for-a-wifi-dongle-with-the-realtek-8812au-chipset-o

http://labs.beatcraft.com/ja/index.php?Raspberry%20Pi%202%20%A4%C7%20BUFFALO%20WI-U2-433DM%20%A4%F2%BB%C8%A4%A6%A1%CA%A5%BB%A5%EB%A5%D5%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB%A1%CB

環境

$ cat /etc/issue
Raspbian GNU/Linux 8 \n \l

$ uname -a
Linux raspberrypi 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linux

ちょっと前のRaspbian

作業

まずは、オンボードのWi-Fiを切る。

sudo iwconfig wlan0 txpower off
sudo reboot

再起動してから確認。

 ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス b8:27:eb:4e:68:13 
          inetアドレス:192.168.42.1 ブロードキャスト:192.168.42.255  マスク:255.255.255.0
          inet6アドレス: fe80::8c27:2c04:1750:9b0c/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:2942 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:2993 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000 
          RXバイト:452726 (442.1 KiB)  TXバイト:2100986 (2.0 MiB)

eth0:1    Link encap:イーサネット  ハードウェアアドレス b8:27:eb:4e:68:13 
          inetアドレス:169.254.12.25 ブロードキャスト:169.254.255.255  マスク:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1

eth1      Link encap:イーサネット  ハードウェアアドレス 98:f1:99:7f:9d:79 
          inetアドレス:192.168.179.2 ブロードキャスト:192.168.179.255  マスク:255.255.255.0
          inet6アドレス: fe80::e3d2:ef35:8418:f30/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:3075 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:2881 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000 
          RXバイト:2052042 (1.9 MiB)  TXバイト:608318 (594.0 KiB)

切れてます。では8821AUのドライバをインストールしていきます。

$ git clone https://github.com/abperiasamy/rtl8812AU_8821AU_linux.git
Cloning into 'rtl8812AU_8821AU_linux'...
remote: Counting objects: 1557, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 1557 (delta 4), reused 4 (delta 4), pack-reused 1544
Receiving objects: 100% (1557/1557), 3.56 MiB | 629.00 KiB/s, done.
Resolving deltas: 100% (958/958), done.
Checking connectivity... done.
pi@raspberrypi:~/433DM $ ls
rtl8812AU_8821AU_linux
pi@raspberrypi:~/433DM $ cd rtl8812AU_8821AU_linux/
pi@raspberrypi:~/433DM/rtl8812AU_8821AU_linux $ vim Makefile

architecture を i386をnにして、arm_rpiをyにする。

make するけどエラー。

$ make
make ARCH=arm CROSS_COMPILE= -C /lib/modules/4.9.24-v7+/build M=/home/pi/433DM/rtl8812AU_8821AU_linux  modules
make[1]: *** /lib/modules/4.9.24-v7+/build: そのようなファイルやディレクトリはありません.  中止.
Makefile:1584: recipe for target 'modules' failed
make: *** [modules] Error 2

real    0m0.078s
user    0m0.020s
sys 0m0.000s

kernel source をインストール

pi@raspberrypi:~/433DM $ sudo wget "https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source" -O /usr/bin/rpi-source
--2017-11-10 09:43:04--  https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source
raw.githubusercontent.com (raw.githubusercontent.com) をDNSに問いあわせています... 151.101.88.133
raw.githubusercontent.com (raw.githubusercontent.com)|151.101.88.133|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 12672 (12K) [text/plain]
`/usr/bin/rpi-source' に保存中

/usr/bin/rpi-source 100%[=====================>]  12.38K  --.-KB/s 時間 0.01s  

2017-11-10 09:43:05 (830 KB/s) - `/usr/bin/rpi-source' へ保存完了 [12672/12672]

pi@raspberrypi:~/433DM $ sudo chmod 755 /usr/bin/rpi-source 
pi@raspberrypi:~/433DM $ rpi-source

 *** Updating rpi-source
--2017-11-10 09:43:45--  https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source
raw.githubusercontent.com (raw.githubusercontent.com) をDNSに問いあわせています... 151.101.88.133
raw.githubusercontent.com (raw.githubusercontent.com)|151.101.88.133|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 12672 (12K) [text/plain]
`/usr/bin/rpi-source' に保存中

/usr/bin/rpi-source 100%[=====================>]  12.38K  --.-KB/s 時間 0.08s  

2017-11-10 09:43:46 (161 KB/s) - `/usr/bin/rpi-source' へ保存完了 [12672/12672]


 *** Set update tag: 0981c097215848b068a2d7ede5c348d68a8d486b

 *** Restarting rpi-source

 *** gcc version check: OK
ERROR:
bc is NOT installed. Needed by 'make modules_prepare'. On Raspbian, run 'sudo apt-get install bc' to install it.

Help: https://github.com/notro/rpi-source/wiki
pi@raspberrypi:~/433DM $ cd rtl8812AU_8821AU_linux/
pi@raspberrypi:~/433DM/rtl8812AU_8821AU_linux $ make
make ARCH=arm CROSS_COMPILE= -C /lib/modules/4.9.24-v7+/build M=/home/pi/433DM/rtl8812AU_8821AU_linux  modules
make[1]: *** /lib/modules/4.9.24-v7+/build: そのようなファイルやディレクトリはありません.  中止.
Makefile:1584: recipe for target 'modules' failed
make: *** [modules] Error 2

bcが無くてえら

pi@raspberrypi:~/433DM/rtl8812AU_8821AU_linux $ sudo apt-get install bc
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  bc
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
96.3 kB のアーカイブを取得する必要があります。
この操作後に追加で 195 kB のディスク容量が消費されます。
取得:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main bc armhf 1.06.95-9 [96.3 kB]
96.3 kB を 2秒 で取得しました (45.1 kB/s)
以前に未選択のパッケージ bc を選択しています。
(データベースを読み込んでいます ... 現在 38306 個のファイルとディレクトリがインストールされています。)
.../bc_1.06.95-9_armhf.deb を展開する準備をしています ...
bc (1.06.95-9) を展開しています...

もう一度

$ rpi-source

 *** gcc version check: OK

 *** Using: /usr/share/doc/raspberrypi-bootloader/changelog.Debian.gz

 *** Latest firmware revision: cb0b0ad6d11ddd251327303a97ba26a43e6b5b4b

 *** Linux source commit: ef3b440e0e4d9ca70060483aa33d5b1201ceceb8

 *** Download kernel source
--2017-11-10 09:45:21--  https://github.com/raspberrypi/linux/archive/ef3b440e0e4d9ca70060483aa33d5b1201ceceb8.tar.gz
・
・
・
  HOSTCC  scripts/conmakehash
  HOSTCC  scripts/recordmcount
  HOSTCC  scripts/sortextable

 *** ncurses-devel is NOT installed. Needed by 'make menuconfig'. On Raspbian sudo apt-get install libncurses5-dev

 *** Help: https://github.com/notro/rpi-source/wiki

makeする

pi@raspberrypi:~/433DM/rtl8812AU_8821AU_linux $ make
make ARCH=arm CROSS_COMPILE= -C /lib/modules/4.9.24-v7+/build M=/home/pi/433DM/rtl8812AU_8821AU_linux  modules
make[1]: Entering directory '/home/pi/linux-ef3b440e0e4d9ca70060483aa33d5b1201ceceb8'
  CC [M]  /home/pi/433DM/rtl8812AU_8821AU_linux/core/rtw_cmd.o
  CC [M]  /home/pi/433DM/rtl8812AU_8821AU_linux/core/rtw_security.o
  CC [M]  /home/pi/433DM/rtl8812AU_8821AU_linux/core/rtw_debug.o
  CC [M]  /home/pi/433DM/rtl8812AU_8821AU_linux/core/rtw_io.o
  CC [M]  /home/pi/433DM/rtl8812AU_8821AU_linux/core/rtw_ioctl_query.o
  CC [M]  /home/pi/433DM/rtl8812AU_8821AU_linux/core/rtw_ioctl_set.o
・
・
・
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/pi/433DM/rtl8812AU_8821AU_linux/rtl8812au.mod.o
  LD [M]  /home/pi/433DM/rtl8812AU_8821AU_linux/rtl8812au.ko
make[1]: Leaving directory '/home/pi/linux-ef3b440e0e4d9ca70060483aa33d5b1201ceceb8'

数分で終わった

pi@raspberrypi:~/433DM/rtl8812AU_8821AU_linux $ ls -alh *.ko
-rw-r--r-- 1 pi pi 1.8M 11月 10 09:55 rtl8812au.ko
pi@raspberrypi:~/433DM/rtl8812AU_8821AU_linux $ sudo make install
install -p -m 644 rtl8812au.ko  /lib/modules/4.9.24-v7+/kernel/drivers/net/wireless/
/sbin/depmod -a 4.9.24-v7+


インストールできたみたい

pi@raspberrypi:~/433DM/rtl8812AU_8821AU_linux $ lsmod | grep 8812
rtl8812au            1282312  0 
cfg80211              543027  2 rtl8812au,brcmfmac
pi@raspberrypi:~/433DM/rtl8812AU_8821AU_linux $ iwconfig
eth0      no wireless extensions.

wlan0     IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on

eth1      no wireless extensions.

lo        no wireless extensions.

wlan1     unassociated  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency=2.412 GHz  Access Point: Not-Associated   
          Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

hostapd

Raspberry Pi の Raspbianにはhostapdがパッケージとして用意されているが、

$ sudo apt-cache policy hostapd
hostapd:
  インストールされているバージョン: (なし)
  候補:               1:2.3-1+deb8u5
  バージョンテーブル:
     1:2.3-1+deb8u5 0
        500 http://mirrordirector.raspbian.org/raspbian/ jessie/main armhf Packages

バージョンが古いので

これに基づいて設定する
「Raspberry Pi / Banana Pi / Orange Pi / NanoPi などの Pi 系ボードでつくるニセアクセスポイント」
https://qiita.com/nanbuwks/items/c75f5ff8608e2060416a

なお、固定アドレスにするには記事とは異なり、以下のようにした。

IPアドレスの設定

「Raspberry Pi / Banana Pi / Orange Pi / NanoPi などの Pi 系ボードでつくるニセアクセスポイント」
https://qiita.com/nanbuwks/items/c75f5ff8608e2060416a

では /etc/network/interfaces を使って設定したが、
いまどきのRaspbianでは/etc/dhcpcd.confを使って設定する。

interface eth0
static ip_address=192.168.42.1/24
interface wlan1
static ip_address=192.168.42.254/24

としてみた。

sudo  hostapd /etc/hostapd/hostapd.conf &

としてクライアントから繋ぐと・・・つながらない。

コンソールに以下のような表示が出ている。

wlan1: AP-STA-DISCONNECTED 64:80:99:6c:d8:ec
wlan1: STA 64:80:99:6c:d8:ec IEEE 802.11: associated
wlan1: AP-STA-CONNECTED 64:80:99:6c:d8:ec
wlan1: STA 64:80:99:6c:d8:ec RADIUS: starting accounting session 54EB32C50552E9B9
wlan1: STA 64:80:99:6c:d8:ec WPA: pairwise key handshake completed (RSN)
wlan1: STA 64:80:99:6c:d8:ec IEEE 802.11: disassociated
wlan1: AP-STA-DISCONNECTED 64:80:99:6c:d8:ec
wlan1: STA 64:80:99:6c:d8:ec IEEE 802.11: associated
wlan1: AP-STA-CONNECTED 64:80:99:6c:d8:ec
wlan1: STA 64:80:99:6c:d8:ec RADIUS: starting accounting session B7162712FD1494C8
wlan1: STA 64:80:99:6c:d8:ec WPA: pairwise key handshake completed (RSN)
wlan1: STA 64:80:99:6c:d8:ec IEEE 802.11: disassociated
wlan1: AP-STA-DISCONNECTED 64:80:99:6c:d8:ec

isc-dhcp-serverが動いていなかったので再起動するとつながった。
しかし今度はつながっても通信ができない。
家庭用ルータだと、無線インターフェースも有線インターフェースも1つのIPアドレスを使っているが、今回は別々のIPアドレスを使っている。ルーティングやらiptablesの設定やらをしたら今のままでも使えるのだろうけれども、1つのIPアドレスで使えるように設定してみた。

まず、/etc/dhcpcd.confを以下のように修正。

#interface eth0
#static ip_address=192.168.42.1/24
#interface wlan1
#static ip_address=192.168.42.254/24

denyinterfaces eth0 wlan1

interface br0
static ip_address=192.168.42.1/24
static routers=192.168.179.1
static domain_name_servers=192.168.179.1

次に、/etc/network/interfacesを以下のように直した。

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto eth0:1
iface eth0:1 inet static
address 169.254.12.25
netmask 255.255.0.0

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

auto br0
iface br0 inet manual
    bridge_ports eth0, wlan1
    bridge_stp off
    bridge_maxwait 3

そうすると、うまくつながるようになりました。
まだDNSがうまく配信できないけど、今回はローカルサーバにだけアクセスさせるからこれでいいかな。