raspberry piでwifiルータを作る

25
Raspberry PiWifiルータを作る 2016-07-15 サイボウズ・ラボ 西尾泰和

Upload: nishio

Post on 16-Apr-2017

3.304 views

Category:

Education


1 download

TRANSCRIPT

Raspberry PiでWifiルータを作る

2016-07-15サイボウズ・ラボ

西尾泰和

今回の目的

Raspberry PiをWifiアクセスポイントにする。

DHCPサーバもRaspberry Pi上で動かす。

そしてそのネットワークへのアクセスを、既存のWifiにルーティングする。

その手順を一歩一歩確認しながらやることでネットワークの知識を深める。

2

前回のあらすじ

Wifiに接続できるチップESP8266EXについて解説した。

しかし会社のWifiに接続できなかった。

3

おさらい

前回の資料:Wifiにつながるデバイス(ESP8266EX, ESP-WROOM-02, ESPr Developerなど)http://www.slideshare.net/nishio/wifiesp8266ex-espwroom02-espr-developer

ESP8266EXEspressif Systemsの出しているWifiチップ

802.11 b/g/n、WPA/WPA2

Arduinoスケッチを書きこめる

4

http://espressif.com/en/products/hardware/esp8266ex/overview

おさらい

ESP-WROOM-02

ESP8266EXとアンテナとをセットにして日本の技適マークを取得した、日本で合法的に使えるWifiモジュール。

550円@秋月電子

5

http://akizukidenshi.com/catalog/g/gM-09607/

おさらい

APに接続してPING

AT+CWJAP=“ssid”,“password”

WIFI CONNECTED

WIFI GOT IP

OK

AT+PING=“www.google.com”

+6

OK

6

おさらい

HTTP

AT+CIPSTART=“TCP”,“www.google.com”,80でGoogleのサーバの80番にTCP接続しHTTPヘッダを送ればレスポンスが返ってくる

7

おさらい

ここまでのまとめ

Wifiのアクセスポイントに接続できる。

TCPでコネクションを張れる。

HTTPヘッダを送ってやればレスポンスが返ってくる。

8

おさらい

APにつながらないケース

AP接続後にDHCPでIPアドレスを得るのに失敗している。

9

AT+CWJAP=“****”,“****”WIFI CONNECTED(この後10秒以上)

WIFI DISCONNECT+CWJAP:1

FAIL

理想と現実

理想:各種デバイスが既存のオフィスインフラ(Wifiアクセスポイント)につながって手軽に通信できる。

現実:DHCPに失敗してつながらない。

10

今回の目的(再掲)

Raspberry PiをWifiアクセスポイントにする。

DHCPサーバもRaspberry Pi上で動かす。

そしてそのネットワークへのアクセスを、既存のWifiにルーティングする。

その手順を一歩一歩確認しながらやることでネットワークの知識を深める。

11

手順

• Raspberry Pi 3にWifiドングル追加

• IPアドレス固定

• hostapdでアクセスポイント化

• isc-dhcp-serverでDHCPサーバ化

• ルーティングの設定

12

Wifiドングル

BUFFALO 無線LAN子機WLI-UC-GNM

Raspberry Pi 2を買ったときにWifi化のために一緒に買ったWifiドングル

13

購入時にはまったく意識してなかったが「パソコン用の無線LAN子機として使える子機モードと、パソコンを無線LAN親機にしてゲーム機などを接続できる親機モードの2つのモードに対応」「インターネット接続状況を自動で判別してモード切替」とのこと。

https://www.amazon.co.jp/dp/B003NSAMW2/

IPアドレス固定

USBに刺すと/etc/network/interfacesに勝手に設定が書き加わって設定済みのAPにつなぎに行ってしまう。固定IPに書き換えておく。

終ったら ifdown wlan1で一旦OFFにする

14

#iface wlan1 inet manual

# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

iface wlan1 inet static

address 192.168.10.1

netmask 255.255.255.0

アクセスポイント化

sudo apt-get install hostapd

/etc/hostapd/hostapd.confに設定を置く

15

interface=wlan1

ssid=MyPi

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

サンプルはdriverの設定が含まれており、デバイスに合わせてどう設定すべきか?→「削除してもOK」という意見があり、試したら確かにその通りだった他のデバイスではhostpadへのドライバの追加などが必要かもしれない

参考文献

How to Set up a Raspberry Pi as a

Wireless Access Point

https://www.maketecheasier.com/set-

up-raspberry-pi-as-wireless-access-

point/

実行sudo hostapd -dd /etc/hostapd/hostapd.conf

(-dd: デバッグメッセージ多めで実行)

→アクセスポイント一覧で見えた

16

ESP8266でも一覧で見える:

AT+CWLAP

+CWLAP:(3,"MyPi",-41,"00:24:a5:a3:24:96",6,11,0)

接続しようとするとエラーになる:

AT+CWJAP="MyPi","raspberry"

WIFI CONNECTED

+CWJAP:1

FAIL

WIFI DISCONNECT

↑アクセスポイント一覧に見えているが接続はエラーになる

DHCPサーバ化

sudo apt-get install isc-dhcp-server

/etc/dhcp/dhcpd.confを編集:option domain-name,

domain-name-serverのコメントアウトauthoritative のコメント外す

17

DHCPサーバ化

/etc/dhcp/dhcpd.confに下記を追記:

18

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-network";

option domain-name-servers 8.8.8.8, 8.8.4.4;

}

←先ほど設定した固定IPと整合するように注意

詳細はこちら

How to Set up a Raspberry Pi as a Wireless Access Point

https://www.maketecheasier.com/set-up-raspberry-pi-as-wireless-access-point/

DHCPサーバ化

/etc/default/isc-dhcp-serverを編集:

INTERFACES="wlan1”

↑参考文献では有線LANとWifiを想定しているけど今回はWifiが2つなのでこう変える必要がある

19

DHCPサーバ起動

sudo service isc-dhcp-server start

ESP8266で接続すると正しくIPが得られる:

20

AT+CWJAP="MyPi","raspberry"

WIFI CONNECTED

WIFI GOT IP

OK

AT+CIFSR

+CIFSR:STAIP,"192.168.10.11“

OK

PCから接続してみる

コマンドプロンプトでipconfigするとIPアドレスがDHCPサーバから配られているのがわかる

21

接続固有の DNS サフィックス . . . . .: local-network

リンクローカル IPv6 アドレス. . . . .: (略)

IPv4 アドレス . . . . . . . . . . . .: 192.168.10.13

サブネットマスク . . . . . . . . . .: 255.255.255.0

デフォルトゲートウェイ . . . . . . .: 192.168.10.1

GUI上は「インターネット接続なし」「制限あり」という表現になる

NAT(Network Address Translation)

wlan1と、インターネットに接続しているwlan0

との間でIPパケットの転送を行う

/etc/sysctl.confにnet.ipv4.ip_forward=1と加筆

IP転送を開始:sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

具体的に何をどこに転送するか指定:sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADEsudo iptables -A FORWARD -i wlan0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPTsudo iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT

22

インターネットに接続できた23

AT+PING="www.google.com"

+3

OK

普通にTwitterができた

ESP8266からPINGが通った

予期せぬメリット

普段、ホテルや出先など「周りのネットワーク環境が変わる」という状況でRasPiをいじるためにUSBシリアル変換でシリアルコンソールに接続して使っている。

でもRasPiが固定IPでAPになるなら、PCからAPにつないで、sshでログインするのもよいかも。物理的なケーブルが必要なくなる。

24

補足

もちろんSSIDとパスワードは変更しました。

ついでにステルスSSIDにしておく:

ignore_broadcast_ssid=1

25