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

はじめに
---

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

「**ブリッジモード**」はこちらを参考にどうぞ。
[ラズパイとWN-G300UAとOpenWrtを、しなやかに融合させてみた（ブリッジモード編）](https://qiita.com/somainit/items/9f89f41ef5c10a4dccb8)

主役たち
---

- [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">

参考
---

- [OpenWrt - Routed AP](https://openwrt.org/docs/guide-user/network/wifi/routedap)
- [GitHubGist - vbajpai/gist:55091f8a066717bce9c4](https://gist.github.com/vbajpai/55091f8a066717bce9c4)


パソコンで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、Wi-FiのIPアドレスを192.168.2.1にします。
Wi-Fiのネットワーク・アドレスは192.168.2.0にします。

既にインターネットに接続されているルータ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'

config interface 'wifi'
        option proto 'static'
        option ipaddr '192.168.2.1'
        option netmask '255.255.255.0' 
```

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

```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 network 'wifi'
        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
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:69 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8149 (7.9 KiB)  TX bytes:9688 (9.4 KiB)

eth0      Link encap:Ethernet  HWaddr B8:27:EB:3F:33:23  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:78 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8563 (8.3 KiB)  TX bytes:10424 (10.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:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:1408 (1.3 KiB)  TX bytes:1408 (1.3 KiB)

wlan0     Link encap:Ethernet  HWaddr 34:76:C5:8E:D6:67  
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          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:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:864 (864.0 B)
```

DHCPサーバの設定をします。
---

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

（追加）

```shell:/etc/config/dhcp
config dhcp 'wifi'                               
        option interface 'wifi'                  
        option start '100'       
        option limit '150'       
        option leasetime '12h'
```

ファイアウォールの設定をします。
---

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

（変更前）

```shell:/etc/config/firewall
config zone
        option name             lan
        list   network          'lan'
        option input            ACCEPT
        option output           ACCEPT
        option forward          ACCEPT
```

（変更後）

```shell:/etc/config/firewall
config zone
        option name             lan
        list   network          'lan'
        option input            ACCEPT
        option output           ACCEPT
        option forward          ACCEPT
        option network          'lan wifi'
        option masq             1 
```


（追加）

```shell:/etc/config/firewall
config zone
        option name       wifi
        list   network    'wifi'
        option input      ACCEPT
        option output     ACCEPT
        option forward    REJECT

config forwarding                               
        option src        wifi                  
        option dest       lan                   
                                                
config forwarding                               
        option src        lan                   
        option dest       wifi
```

再起動します。

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

ルーティングを確認します。
---

```shell-session
root@OpenWrt:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.3.1     0.0.0.0         UG    0      0        0 br-lan
192.168.2.0     *               255.255.255.0   U     0      0        0 wlan0
192.168.3.0     *               255.255.255.0   U     0      0        0 br-lan
```

ルータ192.168.3.1で192.168.2.0の経路設定をします。
---

|属性|値|
|:--|:--|
|ネットワーク・アドレス|192.168.2.0|
|サブネットマスク|255.255.255.0|
|ゲートウェイ|192.168.3.2|
|メトリック|1|

おわりに
---
以上でルータモードとして最低限の設定が終わりました。後はお好みでチューニングを楽しんでくださいね。