ラズパイとWN-G300UAとOpenWrtを、しなやかに融合させてみた（ブリッジモード編）

はじめに
---

ルータを高機能化するカスタム・ファームウェアに[OpenWrt](https://openwrt.org/)や[dd-wrt](https://dd-wrt.com/)等がありますが、導入にあたって最初の難関はファームウェアを流し込むことです。私自身、失敗で何度も苦い経験をしています。
そこでSDカードが使えて入手が容易なラズパイと、アンテナ型Wi-Fi子機を使い、OpenWrtを「**ブリッジモード**」で使えるようにしてみました。

主役たち
---

- [Raspberry Pi 1 Model B+](https://www.raspberrypi.org/products/raspberry-pi-1-model-b-plus/)
- [I-O DATA Wi-Fi 無線LAN 子機 11n/g/b 300Mbps アンテナ型 WN-G300UA](https://www.iodata.jp/product/network/adp/wn-g300ua/index.htm)
- [OpenWrt Project: OpenWrt v18.06.1](https://openwrt.org/releases/18.06/start)

<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/309379fe-50a2-eabe-a8e4-0fd16380133b.jpeg">



参考
---
- [pslaboが試したことの記録 - Raspberry Pi 3 や Zero W に OpenWrt/LEDE 18.06 をインストールしてルータにする](https://pslabo.hatenablog.com/entry/2018/08/25/194329)
- [OpenWrt - Dumb AP / Access Point Only](https://oldwiki.archive.openwrt.org/doc/recipes/dumbap)


パソコンでOpenWrtのファームウェアをダウンロード、解凍し、SDカードへ書き込みます。
---

下記はUbuntu 18.04.1での実行例です。

```shell-session
$ wget https://archive.openwrt.org/releases/18.06.1/targets/brcm2708/bcm2708/openwrt-18.06.1-brcm2708-bcm2708-rpi-ext4-factory.img.gz
$ gzip -d openwrt-18.06.1-brcm2708-bcm2708-rpi-ext4-factory.img.gz
$ sudo dd if=openwrt-18.06.1-brcm2708-bcm2708-rpi-ext4-factory.img of=/dev/sdb bs=1M
```

rootパーティションを拡張します。
---

[ラズパイにOpenWrtを書き込んだ後、rootパーティションを拡張する方法](https://qiita.com/somainit/items/4de7187f41406d7ee1f1)

ラズパイのパスワードを設定します。
---

OpenWrtの初期IPアドレスは192.168.1.1です。
ラズパイにSDカードを挿入します。ラズパイとパソコンをLANケーブルで直結し電源を入れます。パソコン側のLANアドレスをDHCPにしておけば、そのままsshでコンソール接続できます。
rootのパスワードは何も設定されていないので、お好みに変更します。

```shell-session
$ ssh root@192.168.1.1

root@OpenWrt:~# passwd
Changing password for root
New password: 
Retype password: 
passwd: password for root changed by root
```

ラズパイのLANポートの設定をします。
---

OpenWrtをブリッジモードで設定します。
ラズパイのLANポートのIPアドレスを192.168.3.2にします。
既にインターネットに接続されているルータ192.168.3.1があることが前提条件です。デフォルト・ゲートウェイやDNSサーバは192.168.3.1になります。

```shell-session
root@OpenWrt:~# cp -p /etc/config/network /etc/config/network.org
root@OpenWrt:~# vi /etc/config/network
```

(変更前)

```shell:/etc/config/network
config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '60'
```

(変更後)

```shell:/etc/config/network
config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
#       option ipaddr '192.168.1.1'
        option ipaddr '192.168.3.2'   
        option netmask '255.255.255.0'
        option gateway '192.168.3.1'
        option dns '192.168.3.1'
#        option ip6assign '60'
```

設定が終わったら一度ラズパイの電源を落とします。

```shell-session
root@OpenWrt:~# halt
```

アンテナ型Wi-Fi子機WN-G300UAの設定をします。
---

ルータ192.168.3.1とラズパイ192.168.3.2をLANケーブルで繋げます。
sshでラズパイへコンソール接続します。

```shell-session
$ ssh root@192.168.3.2
root@192.168.3.2's password:
```

WN-G300UAのドライバをインストールし、再起動します。

```shell-session
root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install kmod-rtl8192cu
root@OpenWrt:~# reboot
```

WN-G300UAのドライバを認識しているか確認します。

```shell-session
$ ssh root@192.168.3.2
root@192.168.3.2's password:

root@OpenWrt:~# dmesg | grep rtl8192cu
[    7.513146] rtl8192cu: Chip version 0x11
[    7.659574] rtl8192cu: Board Type 0
[    7.675383] rtl8192cu: Loading firmware rtlwifi/rtl8192cufw_TMSC.bin
[    7.687639] usbcore: registered new interface driver rtl8192cu
```

Wi-Fiの設定をします。
---

Wi-Fiをアクティブにし、認証パスワード等を設定します。

```shell-session
root@OpenWrt:~# cp -p /etc/config/wireless /etc/config/wireless.org
root@OpenWrt:~# vi /etc/config/wireless
```

(変更前)

```shell:/etc/config/wireless
config wifi-device 'radio0'
        option type 'mac80211'
        option channel '11'
        option hwmode '11g'
        option path 'platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0'
        option htmode 'HT20'
        option disabled '1'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option ssid 'OpenWrt'
        option encryption 'none'
```

(変更後)

```shell:/etc/config/wireless
config wifi-device 'radio0'
        option type 'mac80211'
        option channel '11'
        option hwmode '11g'
        option path 'platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0'
        option htmode 'HT20'
#        option disabled '1'
        option disabled '0'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option ssid 'OpenWrt'
#        option encryption 'none'
        option channel 'auto'
        option txpower '10'
        option country 'JP'
        option encryption 'psk-mixed'
        option key 'PASSWORD'
```

再起動します。

```shell-session
root@OpenWrt:~# reboot
```

wlan0が出てるか確認します。

```shell-session
$ ssh root@192.168.3.2
root@192.168.3.2's password:

root@OpenWrt:~# ifconfig
br-lan    Link encap:Ethernet  HWaddr B8:27:EB:3F:33:23  
          inet addr:192.168.3.2  Bcast:192.168.3.255  Mask:255.255.255.0
          inet6 addr: fe80::ba27:ebff:fe3f:3323/64 Scope:Link
          inet6 addr: fd4c:e901:b36e::1/60 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:171 errors:0 dropped:0 overruns:0 frame:0
          TX packets:169 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:17093 (16.6 KiB)  TX bytes:42675 (41.6 KiB)

eth0      Link encap:Ethernet  HWaddr B8:27:EB:3F:33:23  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:177 errors:0 dropped:0 overruns:0 frame:0
          TX packets:166 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:17369 (16.9 KiB)  TX bytes:44213 (43.1 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:32 errors:0 dropped:0 overruns:0 frame:0
          TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:2688 (2.6 KiB)  TX bytes:2688 (2.6 KiB)

wlan0     Link encap:Ethernet  HWaddr 34:76:C5:8E:D6:67  
          inet6 addr: fe80::3676:c5ff:fe8e:d667/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:1230 (1.2 KiB)
```

DHCPサーバとファイアウォールを無効にします。
---

```shell-session
root@OpenWrt:~# /etc/init.d/dnsmasq disable
root@OpenWrt:~# /etc/init.d/dnsmasq stop
root@OpenWrt:~# /etc/init.d/odhcpd disable
root@OpenWrt:~# /etc/init.d/odhcpd stop
root@OpenWrt:~# /etc/init.d/firewall disable
root@OpenWrt:~# /etc/init.d/firewall stop
```

再起動します。

```shell-session
root@OpenWrt:~# reboot
```

さいごに
---
以上でブリッジモードとして最低限の設定が終わりました。後はお好みでチューニングを楽しんでくださいね。
ちなみに私のおすすめルータは[GL-AR150 - GL.iNet](https://www.gl-inet.com/products/gl-ar150/)です。OpenWrt, dd-wrtどちらも使えて価格も安いです。