タイトル通りですが、ラズパイ+メカトラックス様の「3GPi」を、ufw/hostapd/dnsmasqでモバイルWi-Fiルータ化し、格安SIMで使ってみます。
何ができるの?
- 固定回線や無線LANが無い環境でも、制御機器やGoogle Homeが使えます。(HT100LNなど市販の据置LTEルータと同じです)
- 格安SIMに固定IPアドレスのイプシムを使うと、ラズパイ自身や配下の無線LAN機器をInternet側から制御できます。(構築事例と、Google Homeと組み合わせた活用例(?))
参照サイト
- Using your new Raspberry Pi 3 as a WiFi access point with hostapd ほぼこの内容通り
- Raspberry Pi 3 アクセスポイント化 〜hostapd〜 isc-dhcp-server、DNS無し
- [メモ] Raspberry Pi 3で、Wi-Fi アクセスポイントルータ isc-dhcp-server、DNS無し
- Raspberry Piでローカルアクセスポイントを立てる isc-dhcp-server、DNS無し、hostapdをmake
- Raspberry Piの無線LANアクセスポイント化 isc-dhcp-server、DNS無し、無線⇔有線LANをルーティング
- Raspberry Pi 3 を WiFi アクセス・ポイント化する 無線APのみ、DHCP/DNS無し、無線⇔有線LANをブリッジ
※何故かdnsmasqの代わりにisc-dhcp-serverが多いようですが、元記事に従ってdnsmasqを使い、DHCP兼DNSサーバにします。
ネットワーク構成
Internet --(3G回線)-- <ppp0>[3GPi+格安SIM]+[RPi]<wlan0> --(無線LAN)-- [制御機器、Google Home等]
準備するもの
- Raspberry Pi 3 Model B(またはRPi2とUSB無線LANドングルの組み合わせ+追加設定)
- 3GPi+同梱Raspbian(3gpi2-jessie-20170904)(またはUSBモデム+追加設定)
- 3GPiで使える格安SIM
- 無線LAN機器(スマートフォン、タブレット、制御機器、Google Home等)
構築手順
- ラズパイ+3GPiをNATルータにします [ufw]
- ラズパイを無線LANのAP(アクセスポイント)にします [hostapd]
- ラズパイをDHCPサーバ・DNSサーバにします [dnsmasq]
※今回ラズパイの有線LANは利用しません。(無線LANとブリッジする、別LANで使う、などの応用は可能です)
ufwでラズパイ+3GPiをNATルータに
-
ufwのインストール、初期設定
インストールsudo apt-get install ufw
IPv6無効
sudo vi /etc/default/ufw
/etc/default/ufw#IPV6=yes IPV6=no
全ての接続を拒否
sudo ufw default deny
default denyでもpingには応答してしまうので、ppp0(SIM側)のみ拒否
sudo vi /etc/ufw/before.rules
/etc/ufw/before.rules#「# ok icmp codes」の直前 # ppp0 -A ufw-before-input -p icmp -i ppp0 --icmp-type echo-request -j DROP
ufw有効化、状態確認
sudo ufw enable sudo ufw status
-
格安SIMのAPN設定
sudo nmcli con add type gsm ifname "*" con-name [名称] apn [APN名] user [ID] password [Password]
-
IPv4フォワーディングを有効に変更(コメントアウトを外す)
sudo vi /etc/sysctl.conf
/etc/sysctl.confnet.ipv4.ip_forward=1
-
ufwのNAPT設定
IPv4フォワードポリシーを有効に変更sudo vi /etc/default/ufw
/etc/default/ufw#DEFAULT_FORWARD_POLICY=”DROP” DEFAULT_FORWARD_POLICY=”ACCEPT"
NAPT(MASQUERADE)を設定
sudo vi /etc/ufw/before.rules
/etc/ufw/before.rules#「# Don't delete these required lines, otherwise there will be errors」の直前に追加 # NAPT *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 192.168.168.0/24 -o ppp0 -j MASQUERADE COMMIT
hostapdでラズパイを無線APに
-
wlan0(無線LAN I/F)をDHCPから固定IPアドレスに変更
wlan0をDHCPクライアントの対象から除外sudo vi /etc/dhcpcd.conf
/etc/dhcpd.conf#(最終行に追加) denyinterfaces wlan0
wlan0にIPアドレスを指定(このIPアドレスが無線LAN機器のdefault gwになります)
sudo vi /etc/network/interfaces
/etc/network/interfaces#iface wlan0 inet manual # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf iface wlan0 inet static address 192.168.168.1 netmask 255.255.255.0 network 192.168.168.0 broadcast 192.168.168.255
DHCPクライアントの再起動、wlan0のdown/up
sudo service dhcpcd restart sudo ifdown wlan0; sudo ifup wlan0
wlan0の確認
ifconfig$ ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr b8:27:eb:xx:xx:xx inet addr:192.168.168.1 Bcast:192.168.168.255 Mask:255.255.255.0 UP 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)
-
hostapdのインストール、設定
インストールsudo apt-get install hostapd
設定ファイルを新規作成
sudo vi /etc/hostapd/hostapd.conf
/etc/hostapd/hostapd.conf# This is the name of the WiFi interface we configured above interface=wlan0 # Use the nl80211 driver with the brcmfmac driver driver=nl80211 # This is the name of the network ※SSID名 ssid=RPi # Use the 2.4GHz band hw_mode=g # Use channel 6 ※チャンネル channel=6 # Enable 802.11n ieee80211n=1 # Enable WMM wmm_enabled=1 # Enable 40MHz channels with 20ns guard interval ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40] # Accept all MAC addresses macaddr_acl=0 # Use WPA authentication auth_algs=1 # Require clients to know the network name ignore_broadcast_ssid=0 # Use WPA2 wpa=2 # Use a pre-shared key wpa_key_mgmt=WPA-PSK # The network passphrase ※WPAパスワード wpa_passphrase=*** # Use AES, instead of TKIP rsn_pairwise=CCMP
ブート時の設定ファイルを指定
sudo vi /etc/default/hostapd
/etc/default/hostapd#DAEMON_CONF="" DAEMON_CONF="/etc/hostapd/hostapd.conf"
-
hostapdの動作確認
hostapdをフロントでテスト起動sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
無線LAN機器からSSIDが見えること、および無線LAN機器にIPアドレス等を以下の通り手動設定して接続
IPアドレス:192.168.168.2
ネットマスク:255.255.255.0
ゲートウェイ:192.168.168.1無線LAN機器上で疎通を確認
無線LAN機器で実行ping 192.168.168.1 ping 8.8.8.8
dnsmasqでラズパイをDHCP/DNSサーバに
-
/etc/hostsにwlan0のIPアドレスとホスト名を追加(dnsmasqのwarning対策)
sudo vi /etc/hosts
/etc/hosts192.168.168.1 rpi3
-
dnsmasqのインストール、設定
インストールsudo apt-get install dnsmasq
デフォルト設定ファイルをリネーム、設定ファイルを新規作成
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig sudo vi /etc/dnsmasq.conf
/etc/dnsmasq.confinterface=wlan0 # Use interface wlan0 listen-address=192.168.168.1 # Explicitly specify the address to listen on bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere domain-needed # Don't forward short names bogus-priv # Never forward addresses in the non-routed address spaces. dhcp-range=192.168.168.11, 192.168.168.20, 24h # Assign IP addresses between 192.168.168.11 and 192.168.168.20 with a 24 hour lease time
※
server=8.8.8.8 # Forward DNS requests to Google DNS
は指定しません。 -
dnsmasqの動作確認
無線LAN機器を手動設定からDHCPに戻して再接続し、以下のようにIPアドレス等が割り当てられていることを確認IPアドレス:192.168.168.11 ~ 192.168.168.20のいずれか
ネットマスク:255.255.255.0
ゲートウェイ:192.168.168.1
DNSサーバ:192.168.168.1Wi-Fiルータとして使えることを確認
無線LAN機器で実行ping 192.168.168.1 ping 8.8.8.8 ping www.google.co.jp
-
【参考】DHCPでしか動作しない機器1に対し、常に同一のIPアドレスを割り当てる設定
対象機器のMACアドレスを調べる(例:arpコマンド)arp -na
dnsmasq.confに、MACアドレスとIPアドレスを指定する(IPアドレスはdhcp-rangeの範囲外でOK)
/etc/dnsmasq.confdhcp-host=XX:XX:XX:XX:XX:XX, GoogleHome, 192.168.168.2, infinite
実際に接続してみて
無線LAN機器がつながってしまえば、ラズパイを意識することはありません。当然ですが、それだけの用途であればHT100LNなどを利用する方が楽です。やはり、無線APがラズパイである、(DDNSやsshトンネルをうまく使ったり、固定IPアドレスSIMと組み合わせるなどして)Internet側からラズパイ自身や配下の無線LAN機器が制御できる、といった利点を活かすことができるかが鍵になると思います。
-
Google Homeとか。 ↩