« SFのアイデア | Main | Raspberry Pi Zero W CPUの謎とカメラ »

July 29, 2017

Raspberry Pi Zero Wを買った アクセスポイント化に成功

先日 (7月18日)、Raspberry Pi Zero Wが、やっと技適を取得し、販売が開始された。早速購入。7月21日に届いたので、約一週間。
その間、Rasbianのデスクトップ版やCUI版を試すが、この辺の話はネット上にも多数載っているので、特に報告することはない。

その後、USBケーブルだけで Raspberry Pi Zero W をセットアップする方法と、それを使って、無線アクセスポイント・ルーター化することに成功した。この2つは一寸特殊な使い方なので、これらを紹介する。

前半:USBケーブルだけで Raspberry Pi Zero W をセットアップ
E312_1私は、母艦に Windows10マシンを使ったが、UbuntuでもMACでも使えるらしい。(Ubuntuは確認済み。MACについては、私がMACを持っていないので未確認)

まず、https://www.raspberrypi.org/downloads/raspbian/ から、2017-07-05-raspbian-jessie-lite.zipをダウンロード。
これを解凍して得た 2017-07-05-raspbian-jessie-lite.img を Win32DiskImager を使って、microSDに書き込む。
microSDは、8GB以上が推奨されているようだが、2GBでも動いた。

Windows10が microSD を識別すると boot ドライブが見つかるが、このなかに
・ssh と言う名の空ファイルを作る
・cmdline.txt を次のようにする
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh quiet splash plymouth.ignore-serial-consoles
・config.txt の最後に下行を追加
dtoverlay=dwc2

Windows10側としては、
RPI Driver OTG:URLからドライバーをダウンロードして解凍しておく
・iTunes もしくは、Bonjour Print Services (Windows)をダウンロードしてインストしておく

最初の接続
・先ほど作った microSD を Raspberry Pi Zero W に挿入
・USBケーブルで、母艦PCとRaspberry Pi Zero Wを接続
・Windows10側のコントロールパネルのデバイスマネージャーのCOMの項目に「USBシリアルデバイス(COM6)」が増えている(COMの番号は、異なる場合があるので注意)
・「USBシリアルデバイス(COM6)」を右クリックし、ドライバーソフトウェアの更新
・「コンピューターを参照して、ドライバーソフトウェアを検索します」で、先ほどダウンロード・解凍しておいた RPI Driver をインスト
・デバイスマネジャーのネットワークアダプターに「USB EthernetRNDIS Gadget」が追加される
・しかし、エラーが出ている(どうも、1回目にエラーが出るのは、共通らしい)
2回目の接続

・Windows10 の再起動
・デバイスマネジャーのネットワークアダプターに「USB EthernetRNDIS Gadget」が追加される
・ Raspberry Pi Zero W に接続しても、今度はエラーなし

・Puttyjp.exe や TeraTerm で、raspberrypi.local を SSH 接続できる。
・デフォルトでは、IDは pi パスワードは raspberry
・このままでは、Raspberry Pi Zeroからインターネットをアクセスできない

Raspberry Pi Zeroからインターネットをアクセス

・Windows10側「コントロールパネル」「ネットワークとインターネット」「ネットワークと共有センター」
・Wifi(xxx:貴方が接続しているWifiのSSID)をクリック「プロパティ」「共有タブ」「インターネットのほかのユーザーに、このコンピューターのインターネット接続をとおしての接続を許可する」を選択
・「コントロールパネル」以下のダイアログを「OK」ボタンなどで全て消す
・しばらくすると、Raspberry Pi Zero Wからインターネットをアクセスできるようになる
・sudo apt-get install で、Apache2をインストールすると、母艦のWindows10から http://raspberrypi.local でアクセスできるようになる

後半:アクセスポイント化

これは、Raspberry Pi 3に内蔵の WiFiを使った無線LANアクセスポイント化 hostapd + isc-dhcp-server編を参考にしたが、Raspberry Pi Zero W にアレンジしている

$ sudo apt-get install hostapd isc-dhcp-server


/etc/network/interfaces を次のようにする

source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
iface eth0 inet manual
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.123.234
netmask 255.255.255.0
network 192.168.123.0
broadcast 192.168.123.255
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

/etc/dhcpcd.conf を次のようにする

hostname
clientid
persistent
option rapid_commit
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
option ntp_servers
require dhcp_server_identifier
slaac private
nohook lookup-hostname
denyinterfaces wlan0

$ sudo service dhcpcd restart
$ sudo ifdown wlan0; sudo ifup wlan0

/etc/dhcp/dhcpd.conf を次のようにする

ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 192.168.123.0 netmask 255.255.255.0 {
range 192.168.123.100 192.168.123.120;
option routers 192.168.123.234;
option broadcast-address 192.168.123.255;
option domain-name local_pi_dns;
option domain-name-servers 8.8.8.8 4.4.4.4;
default-lease-time 600;
max-lease-time 7200;
}

なお、「8.8.8.8 4.4.4.4」を「192.168.137.1」にすると、母艦 Windows10 のドメインサーバーの設定を引き継ぐようである

/etc/default/isc-dhcp-server を次のようにする
INTERFACES="wlan0"

$ sudo bash -c "zcat /usr/share/doc/hostapd/examples/hostapd.conf.gz > /etc/hostapd/hostapd.conf"

/etc/hostapd/hostapd.confは長いので、変更点のみ記す

「# driver=hostap」を「driver=nl80211」に
「ssid=test」を「ssid=WIFISSID」に
「#wpa=1」を「wpa=2」に
「#wpa_passphrase=secret passphrase」を「wpa_passphrase=PASSWORD」
(さすがに SSID と パスワードは書き換えてね)

/etc/default/hostapd を次のようにする
DAEMON_CONF="/etc/hostapd/hostapd.conf"

/etc/sysctl.conf を次のようにする
net.ipv4.ip_forward=1
net.ipv6.conf.all.disable_ipv6 = 1

/etc/rc.local を次のようにする
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
iptables-restore < /etc/iptables.ipv4.nat
exit 0

$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
$ sudo iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE
$ sudo iptables -A FORWARD -i usb0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o usb0 -j ACCEPT
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
$ sudo reboot

とやって、再起動
これで、アクセスポイント化ができた

アクセスポイント化して、どうするの?
E312_2これを説明したのが、2つ目の絵。

例えば、出先で、仲間だけでネットを組みたい場合。
図のようにアクセスすれば、Raspberry Pi Zero W にファイルサーバーを立てておけば、ファイルの共有化ができる。
ファイルサーバーが無くても、フォルダーを共有化しておけば、仲間内だけで、ファイルの共有も可能だ。
この場合、パスワードさえ破られなければ、仲間以外からファイルを守ることができる。外から中には入って来れないが、中から外をアクセスすることは可能なので、Googleでの検索やLine、メールなどは普通に使える。

まあ、正直、ファイルの共有くらいなら、外部のクラウドサービスを使った方が早いのだが、むしろ、Apache2やNode.jpを使って、WebSocketを駆使したチャットや対戦ゲームやチェックリストの方が効果があるだろう。
チャットや対戦ゲームやチェックリストのオリジナルなプログラムを作って、仲間内だけで使う。
この場合、山奥とか離れ小島とか、インターネットにアクセスする方法がない場所でも、(もちろんインターネットアクセスはできないが)仲間内でのチャットや対戦ゲームやチェックリストを使うことができる。

一番やってみたいのは、最後のチェックリストなんだよね。
WebSocketを駆使して、誰が何を何時何分に作業し、チェックしたのかを、メンバー全員にリアルタイムで配信して、作業効率を上げるんだ・・

2017.08.05 誤記があったので、少し修正

|

« SFのアイデア | Main | Raspberry Pi Zero W CPUの謎とカメラ »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/94422/65593806

Listed below are links to weblogs that reference Raspberry Pi Zero Wを買った アクセスポイント化に成功:

« SFのアイデア | Main | Raspberry Pi Zero W CPUの謎とカメラ »