Raspberry Pi / Banana Pi / Orange Pi / NanoPi などの Pi 系ボードでつくるニセアクセスポイント

# Raspberry Pi / Banana Pi / Orange Pi / NanoPi などの Pi 系ボードで ニセアクセスポイントをつくる

## ニセアクセスポイント

- Linuxベースでhostapd でアクセスポイント化
- dnsmasq で特定のサイトをアレする

## Pi系ボード

Raspberry Pi、およびRaspberry Piのように使えるLinuxシングルボードコンピュータ。
以下のような感じで使うことができる。

- Debian系のLinuxが使える
- GPIOの並び、機能はRaspberry Piとよく似ている
- GPIOの操作ライブラリとしてWiringPiが使える


## 「オープンハードセキュリティ #3」のセミナー資料です。

https://atnd.org/events/83783

セミナーでは、講師のNanoPiのアドレスが192.168.100.38でした。sshでログインしてscreenを共有しましょう。
screenのセッションは「hogehoge」（root）です

以下はスーパーユーザ権限で作業して下さい



## WiFiアダプタに何が使えるか調べる

インストール、ログインなどは「Piで遊ぼう」を参照して済ましておいて下さい。
http://qiita.com/nanbuwks/items/11cba54cdc209db48f28

Raspberry Piで実験に使い、使いふるしのWi-Fiインターフェースをつなげてみた。
実験したのは以下の４つ。
RaspberryPiである程度放熱とか電波の到達とか入手性とかが良さそうなものということで選んでいたもの。
Buffalo WLI-UC-GNHP
Buffalo WLI-UC-G300HP
IODATA WN-G300U 
NEC Aterm WL300NU-GS

このうち、Aterm WL300NU-GSのみRaspberryPiで使えなかった。他はアクセスポイントも含めて使えることは確認してある。


WLI-UC-GNHP

dmesg で確認してみる

```
device descriptor read/64, error -62


```

デバイス不良かな？

WLI-UC-G300HP

```

・・・
usbcore: registered new interface driver rt2800usb


```

認識したっぽい

WN-G300U 

```


・・・
 Registered led device: rt2800usb-phy1::radio
[ 1388.386306] Registered led device: rt2800usb-phy1::assoc
[ 1388.386509] Registered led device: rt2800usb-phy1::quality

```

認識した

Aterm WL300NU-GS


```

[ 1469.698505] ehci_irq: highspeed device connect
[ 1469.960080] usb 4-1: new high-speed USB device number 21 using sunxi-ehci

```

残念！！

以下IODATA WN-G300U で試していく。

## wifi設定

まず、普通に無線LANの子機として設定してみる。

ifconfig -a で認識していることを確認

```
・・・
wlan0     Link encap:Ethernet  HWaddr 34:76:c5:4e:0a:46  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

```

ip コマンドでも確認できる

```
root@FriendlyARM:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 46:c4:17:89:48:ed brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.5/24 brd 192.168.11.255 scope global eth0
    inet6 fe80::44c4:17ff:fe89:48ed/64 scope link 
       valid_lft forever preferred_lft forever
3: tunl0: <NOARP> mtu 1480 qdisc noop state DOWN group default 
    link/ipip 0.0.0.0 brd 0.0.0.0
4: gre0: <NOARP> mtu 1476 qdisc noop state DOWN group default 
    link/gre 0.0.0.0 brd 0.0.0.0
5: sit0: <NOARP> mtu 1480 qdisc noop state DOWN group default 
    link/sit 0.0.0.0 brd 0.0.0.0
6: ip6tnl0: <NOARP> mtu 1452 qdisc noop state DOWN group default 
    link/tunnel6 :: brd ::
11: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 34:76:c5:4e:0a:46 brd ff:ff:ff:ff:ff:ff

```


試験環境のESSIDがcnccafe、passphaseがfreebeerです。このようにして設定します。


```
wpa_passphrase cnccafe freebeer >> /etc/wpa_supplicant/wpa_supplicant.conf 

 cat /etc/wpa_supplicant/wpa_supplicant.conf
network={
	ssid="cnccafe"
	#psk="freebeer"
	psk=b82b457e95ddee0bcb9dc242fb10403257083e430b7402ab795738e8037d5590
}

```

設定終わったら再起動。

認識しました。

```
wlan0     Link encap:Ethernet  HWaddr 34:76:c5:4e:0a:46  
          inet addr:192.168.11.6  Bcast:192.168.11.255  Mask:255.255.255.0
          inet6 addr: fe80::3676:c5ff:fe4e:a46/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:526 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:34028 (34.0 KB)  TX bytes:1128 (1.1 KB)

```

もし通信できなかったら、シリアルアダプタをつなげて診断してみる。
CH340Gのシリアルアダプタを使う場合の配線例
- CH340G側配線　赤（ジャンパー・ジャンパー）白青黒
- NanoPi Neo側配線 黒赤青白
- ボーレート115200
- 改行コードLF

## hostapd

うまくいったら、hostapd導入してみる

NanoPi-Neoのレポジトリにhostapdが無いので

http://w1.fi/hostapd/
で確認すると
Latest release:
hostapd-2.6.tar.gz (PGP sign)
ということなので取ってくる


```

  wget http://w1.fi/releases/hostapd-2.6.tar.gz
  tar xzvf hostapd-2.6.tar.gz 
  cd hostapd-2.6
  apt-get install libnl-genl-3-dev libssl-dev pkg-config
  cd hostapd
defconfigを.configとしてコピーし、.configにCONFIG_LIBNL32=yを追加します。
  cp defconfig .config
  echo CONFIG_LIBNL32=y >> .config
  make
  make install

```

mkdir /etc/hostapd
vim /etc/hostapd/hostapd.conf

```

interface=wlan0
ssid=badwifi
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=badwifi
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
~                       

```


固定アドレスにする

```

/etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

allow-hotplug eth0
        iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
                                                             
↓
...
#allow-hotplug wlan0
#iface wlan0 inet manual
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
address 192.168.91.1
netmask 255.255.255.0
gateway 192.168.91.0
...

```


として、再起動します。

```
root@FriendlyARM:~# hostapd /etc/hostapd/hostapd.conf 
Configuration file: /etc/hostapd/hostapd.conf
Using interface wlan0 with hwaddr 34:76:c5:4e:0a:46 and ssid "badwifi"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED 
```

のように、
```
hostapd /etc/hostapd/hostapd.conf
```

で起動します。
ところが、IPアドレスが割り振られてません。


```

root@FriendlyARM:~# ifconfig
wlan0     Link encap:Ethernet  HWaddr 34:76:c5:4e:0a:46  
          inet6 addr: fe80::3676:c5ff:fe4e:a46/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5189 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:430582 (430.5 KB)  TX bytes:2505 (2.5 KB)
```

手動で割り振ります。

```
root@FriendlyARM:~# ifconfig wlan0 192.168.91.1
root@FriendlyARM:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 46:c4:17:89:48:ed  
          inet addr:192.168.11.5  Bcast:192.168.11.255  Mask:255.255.255.0
          inet6 addr: fe80::44c4:17ff:fe89:48ed/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20660 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9654 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:17091425 (17.0 MB)  TX bytes:954276 (954.2 KB)
          Interrupt:114 

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:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 34:76:c5:4e:0a:46  
          inet addr:192.168.91.1  Bcast:192.168.91.255  Mask:255.255.255.0
          inet6 addr: fe80::3676:c5ff:fe4e:a46/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5189 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:430582 (430.5 KB)  TX bytes:2505 (2.5 KB)
```

## PCからつないでみる

PCから、UbuntuだとWiFiが新たに出現してもすぐ見えないので
root@LATITUDE:~# iwlist wlp2s0 scan | grep freewifi
とすると見えるようになります。
ネットワークマネジャでつなげてから

```

root@LATITUDE:~# ifconfig

wlp2s0    Link encap:イーサネット  ハードウェアアドレス e8:39:df:6c:03:18  
          inet6アドレス: fe80::ff4b:583:a298:c4ae/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:1085979 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:739004 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000 
          RXバイト:1179110025 (1.1 GB)  TXバイト:109834456 (109.8 MB)
```

となるので、明示的にIPアドレスを割り振ります。

```

root@LATITUDE:~# ifconfig wlp2s0 192.168.91.2
```

PINGを飛ばすと

```

root@LATITUDE:~# ping 192.168.91.1
PING 192.168.91.1 (192.168.91.1) 56(84) bytes of data.
64 bytes from 192.168.91.1: icmp_seq=1 ttl=64 time=999 ms
64 bytes from 192.168.91.1: icmp_seq=2 ttl=64 time=1.03 ms
64 bytes from 192.168.91.1: icmp_seq=3 ttl=64 time=0.926 ms
^C
--- 192.168.91.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.926/333.655/999.007/470.474 ms
```

OKですね。
## isc-dhcp-server

DHCPサーバをインストールします。

```

  apt-get install isc-dhcp-server
  vim /etc/dhcp/dhcpd.conf
```

末尾に以下の内容を加えます。

```

subnet 192.168.91.0 netmask 255.255.255.0 {
    range 192.168.91.2 192.168.0.99;
    option routers 192.168.91.1;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.91.255;
    option domain-name-servers 192.168.91;
    default-lease-time 600;
    max-lease-time 7200;
}

```

```

# vim /etc/default/isc-dhcp-server 
INTERFACES=""
↓
INTERFACES="wlan0"


```

```
/etc/init.d/isc-dhcp-server start
```

## syslogの設定

NanoPI-Neoはそのままではsyslogに何も書き込まれないので作っておきます。

```

# cat /etc/syslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* /var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
```

## IPフォワード

```

vim /etc/sysctl.conf

```

```

#net.ipv4.ip_forward=1
↓
net.ipv4.ip_forward=1

```


```

echo 1 > /proc/sys/net/ipv4/ip_forward

```


```

apt-get install iptables


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

iptables-save > iptables-router

```

として保存しておきます。


```

iptables-restore < iptables-router

```

で復元します。

ここまでで、badwifiに接続するとルーティングできるようになります。名前解決はまだできません。

```

## DNSMASQ
  wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.76.tar.gz
  tar xzvf dnsmasq-2.76.tar.gz 
  cd dnsmasq-2.76
  make
  make install
  dnsmasq
```

これで、名前解決もできるようになります。

# だましてみよう！
さあ、エントリを書いてだましてみよう！

ローカルにHTTPサーバを入れて、何かをの代わりにローカルを表示するようにしてみます。
```

 apt-get install apache2
```

ここに何かかけば・・・

```

 vim /etc/hosts
```