RaspberryPi Wifi APを使った無線ルーターの設定

復習がてらRaspberryPiで遊ぶことに。RaspberryPiにWifi USBを2つ差して、片方はWifi AP、片方はWifiのクライアントにしてみた。

Wifiに繋がったAPができる。

ちなみに今これを書いている環境は、、、、ざっくり、、、

`pc <-> raspberrypi wifi ap <-> pockewifi <-> interent`

意味あるのかないのかぁ、、、で繋いでみている。

とりあえず、うちはLAN線が繋げるルータとやらが無いので、自前のマックにdhcpとdns upして、LANスイッチハブ経由でmacとraspberry piを繋いで、sshでraspberrypiにログインして作業することに。

自宅は光も繋がっていない、低速pocketwifiとau 4gが外に出るための手段。
家遅い環境に慣れておくと、会社の環境がまだマシなので、会社にいく喜びが一つ増える。

見た目はこんな感じ
![IMG_0453.JPG](https://qiita-image-store.s3.amazonaws.com/0/18766/241c86d3-a47b-1550-fa52-946526e38232.jpeg "IMG_0453.JPG")

wlan0のWifiのインターフェースをeth0に変更するとアップリンクはLAN線経由になる。

## パッケージのインストール


```shell
$ sudo apt-get install hostapd dnsmasq isc-dhcp-server iw rng-tools
```

## network interface の設定

```bash
$ sudo vi /etc/network/interfaces
```

以下の設定を追加
IPとかは自由に設定

```interfaces
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

allow-hotplug wlan1
iface wlan1 inet static
address 192.168.10.1
netmask 255.255.255.0
```


## dhcpサーバーの設定

```bash
$ sudo vi /etc/dhcp/dhcpd.conf
```

以下を設定ファイルに追加
rangeとかは自由に設定

```
subnet 192.168.10.0 netmask 255.255.255.0 {
    range 192.168.10.10 192.168.10.20;
    option broadcast-address 192.168.10.255;
    option routers 192.168.10.1;
    default-lease-time 600;
    max-lease-time 7200;
    option domain-name "local";
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    }
```

```bash
sudo vi /etc/default/isc-dhcp-server
```

INTERFACEの設定

```
INTERFACES="wlan1"
```

isc-dhcp-server起動

```
$ sudo service isc-dhcp-server start
```

起動設定

```bash
$ sudo update-rc.d isc-dhcp-server enable
```

## WIFI APの設定

```bash
$ sudo vi /etc/hostapd/hostapd.conf
```

以下をファイルに設定

```
interface=wlan1
driver=rtl871xdrv
ssid=MyHomePi
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=raspberry
wpa_key_mgmt=WPA-PSK
#wpa_pairwise=TKIP
rsn_pairwise=CCMP
```

以下に、コンフィグの場所を追記

```bash
$ echo 'DAEMON_CONF="/etc/hostapd/hostapd.conf"' | sudo tee -a /etc/default/hostapd
```

ドライバーの対応準備
以下のような状態なら

```bash
$ lsmod |grep 8192cu
8192cu                550797  0
$ iw list
nl80211 not found.
```

以下での方法で `rtl871xdrv` の対応をする

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

以下からDLして、make して hostapd をコピーした方が良いかも
http://github.com/jenssegers/RTL8188-hostapd/archive/v2.0.tar.gz

## wlan0とwlan1のルーティング

```bash
$ sudo vi /etc/sysctl.conf
```

以下のコメントアウト省く

```
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
```

```bash
$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
$ cat /proc/sys/net/ipv4/ip_forward
1
```

ルーティングの設定

```bash
$ 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
$ sudo iptables-save | sudo tee /etc/iptables.ipv4.nat
$ echo 'pre-up iptables-restore < /etc/iptables.ipv4.nat' | sudo tee -a /etc/network/interfaces
```

hostapの起動

```bash
$ sudo service hostapd start
```

起動設定

```bash
$ sudo update-rc.d hostapd enable
```

## ipのチェック

```
$ nmap -p 22 --open -sV 192.168.10.0/24
```

## ログイン

```
$ ssh 192.168.10.1 -l pi
password raspberry
```

## パフォーマンスチューニング
```
$ sudo vi /etc/sysctl.conf
以下を追加
net.ipv4.ip_forward = 1
net.ipv4.tcp_window_scaling = 1
net.core.rmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096        16384   16777216
```

設定を反映

```
$ sudo sysctl -p /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.tcp_window_scaling = 1
net.core.rmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096        16384   16777216
$ sudo su -
# echo '16777216' > /proc/sys/net/core/rmem_max
# echo '16777216' > /proc/sys/net/core/wmem_max
```

参照
http://www.slashroot.in/linux-network-tcp-performance-tuning-sysctl
https://korekontrol.eu/blog/linux-network-performance-tuning
http://raspberrypi.stackexchange.com/questions/50240/missing-build-file-when-building-for-rtl8812au-driver

## デフォルトGatewayの設定

wlan0がインターネットに繋げて、wla0経由で外につながるようにする

```bash:setup.sh
#!/bin/bash

sudo ifdown --force wlan0
sudo ifup wlan0
# 5秒ぐらい？
sleep 5
# $1 はdefault gatewayのアドレス
sudo route add default gw $1
```