ラズパイをACCESSPOINTにセットアップする方法(IP Forward編)
ラズパイにACCESSPOINT機能をインストールしておくと、ラズパイを有線LAN接続しておいて、インターネットに接続したい端末をラズパイACCESSPOINTに接続することで、インターネットを使用できるようにできます。
大まかに、Bridge機器としてセットアップする方法と、ラズパイにIPパケットをIPフォワードさせる方法があると思います。
本日は、ラズパイにIPパケットをIPフォワードさせる方法での設定をします。
ラズベリーパイ財団のWebサイトにあった設定方法をベースにしています。
IP forward の前までは、Bridge編と同じ内容です。
Rasbianは、2020-02-13-raspbian-buster.zip を使用しました。
アクセスポイントには、DNSMasqとHostAPDが必要です。一度にインストールします。
sudo apt install dnsmasq hostapd
構成ファイルはまだ準備ができていないため、ソフトウェアを一旦、オフにします。
sudo systemctl stop dnsmasq
sudo systemctl stop hostapd
静的IPアドレスを構成します。ワイヤレスネットワークに標準の 192.168.8.xxx IPアドレスを使用していることを前提とします。
サーバーにIPアドレス 192.168.8.100 を割り当てます。無線デバイスは wlan0 とします。
sudo vi /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.8.100/24
nohook wpa_supplicant
#interface eth0
# static ip_address=0.0.0.0
wlan0 は開発環境LANのアドレスから変更するのであれば、通信がつながらなくなるので、eth0が必要になってくる。
eth0 を使わないのであれば、static_ip_address=0.0.0.0 を定義。DHCPでIPアドレス提供受けたい場合はコメントにする。
dhcpcdデーモンを再起動して、新しいwlan0構成をセットアップします。
sudo service dhcpcd restart
DHCPサーバーの構成(dnsmasq)
DHCPサービスはdnsmasqによって提供されます。
デフォルト構成ファイルには必要ない多くの情報が含まれているので、名前を変更して、簡単に開始します。
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.org
sudo vi /etc/dnsmasq.conf
interface=wlan0 # Use the require wireless interface - usually wlan0
dhcp-range=192.168.8.101,192.168.8.140,255.255.255.0,24h
dhcp-option=option:router,192.168.8.100 →ラスパイACCESSPOINTのIPアドレス
dhcp-option=option:dns-server,192.168.8.100 →ラスパイACCESSPOINTのIPアドレス
wlan0 を、24時間のリース時間で、192.168.8.101 から 192.168.8.140 のIPアドレスを提供します。
dnsmasq.conf の他の記述内容をインターネットなどで調べて追加できますが、基本、上記内容でOKです。
他のネットワークデバイス(eth0など)にヘッダーと提供アドレス範囲を含むセクションを追加して、DHCPサービスを提供できます。
ただし、domain-needed,bogus-privなどのオプションを下手に付けると名前解決できなくなるので、注意!!
dnsmasq を更新された構成を使用するためにリロードします。
sudo systemctl start dnsmasq
dnsmasq によるDNSキャッシュからの回答をコマンドで確認する
host rp0-bsf-apf (rp0-bsf-apfはホスト名)
rp0-bsf-apf has address 127.0.1.1
アクセスポイントホストソフトウェア(hostapd)の構成
初期インストール時、空のファイルの /etc/hostapd/hostapd.conf (hostapd構成ファイル)を編集します。
この構成では、ネットワーク名がNameOfNetworkで、パスフレーズがAardvarkBadgerHedgehogであるチャネル7を使用前提です。
名前とパスワードは引用符で囲まない。パスフレーズの長さは8〜64文字にする必要があります。
5 GHz帯域を使用するには、動作モードをhw_mode = gからhw_mode = aに変更できます。
vi /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=NameOfNetwork ← Wifi接続一覧に並ぶ表示内容になります
hw_mode=g
channel=7 ← つながりにくかったら、1~15での変更を検討します。(一般には,1,6,11)
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=AardvarkBadgerHedgehog
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP ←COUNTRYコードが設定されていることも注意点
network={
ssid="NameOfNetwork" ←上記で設定したssid
psk="oshigotoxxxx" ←ssidに対応したパスフレーズ
key_mgmt=WPA-PSK
}
次に、この構成ファイルの場所をシステムに伝える必要があります。
sudo vi /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostsapd.conf" # コメントはずして、左記のようにする
場所が違っていると何時まで経っても、つながりません。
/etc/hostsapd.conf になっているサイトもあるので、注意!!
hostapd を有効にして、起動します。
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
ステータスを確認します。
sudo systemctl status hostapd
● hostapd.service - Advanced IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator
Loaded: loaded (/lib/systemd/system/hostapd.service; enabled; vendor preset: enabled)
Active: activating (start) since Tue 2020-01-28 20:41:05 JST; 12ms ago
Cntrl PID: 1963 (hostapd)
Tasks: 1 (limit: 4915)
Memory: 128.0K
CGroup: /system.slice/hostapd.service
mq1963 /usr/sbin/hostapd -B -P /run/hostapd.pid -B /etc/hostapd/hostsapd.conf
hostapd がエラーになる場合がある。ラズパイの種類やRasbianのバージョンに拠るのか?
一応、hostapd エラーの対応
sudo vi /etc/rc.local で exit 0 の上に以下を追記
service dnsmasq stop
sleep 8
service dnsmasq start
dnsmasqを一旦止めて、数秒まってから再起動しています。
設定確認ポイント
/etc/hostapd/hostapd.conf
/etc/wpa_supplicant/wpa_supplicant.conf
interfacesの対応
vi /etc/network/interfaces
auto eth0 wlan0
iface eth0 inet manual
iface wlan0 inet manual
dhcpcd.confの対応
sudo vi /etc/dhcpcd.conf
denyinterfaces wlan0 ←wlan0 を消さないとACCESSPOINTになってこない
interface eth0 ←wlan0 を開発環境から変更するのであれば、eth0 は必要になってくる
interface wlan0
static ip_address=192.168.8.100/24
hostapd の再インストール(うまく動かなっかったら、検討[自己責任で])
(Rasbian Stretchの場合、Ver古かったので実施した:Rasbian Busterは2.8 だったので、良しとした)
hostapdの公式ページから最新のソースファイル(※エントリー作成時点でv2.9)を持ってきます。
https://w1.fi/hostapd/ の下部表示を確認して、最新のリリースを取得します。
pwd
/home/pi
wget https://w1.fi/releases/hostapd-2.9.tar.gz
tar zxvf hostapd-2.9.tar.gz ←すごくたくさん出力されます
apt-getで必要なパッケージをインストール
sudo apt-get install libnl-genl-3-dev libssl-dev
(続行しますか? に y 入力)
.configにオプションを追加してmakeします。
cd hostapd-2.9/hostapd
cp defconfig .config
echo CONFIG_LIBNL32=y >> .config
make
コンパイルが終わったら、hostapdファイルを差し替えます。
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd_v2.6org
sudo cp hostapd /usr/sbin/
sudo ifdown wlan0
sudo ifup wlan0
sudo reboot ←ifdown,ifupが効かなかったら、リブート
hostapd実行し、指定SSIDでアクセスポイントが立ち上がっているのを確認
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
うまく動けば、スマホ、WindowsパソコンからでもSSIDにパスフレーズ指定して、接続を確認できる
WPA2でパスワード強度を強化する設定wpa_passphraseユーティリティを使用して、暗号化されたPSKを生成できます。 これは、SSIDとパスワードを取得し、暗号化されたPSKを生成します。 wpa_passphrase “testing”入力でパスワードを求められます。 (SSIDが”testing”で、パスワードが”testingPassword”) 出力は次のとおりです。
wpa_passphrase "testing"
network={
ssid="testing"
#psk="testingPassword"
psk=131e1e221f6e06e3911a2d11ff2fac9182665c004de85300f9cac208a6a80531
}
「#psk=”testingPassword”」は、コメント化していますが、セキュリティを強化するためには、最終ファイルからこの行を削除する必要があります。
出力された文字列を基にして足りない項目を補完し、/etc/wpa_supplicant/wpa_supplicant.conf ファイルに追記します。
追記後のファイルは次のような感じ。
vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="testing"
#psk="testingPassword"
psk=87918c1e7c4e8fxxxxx‥‥‥‥‥‥‥‥‥‥xxxxx2b4b1fd524ab6d76
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}
ルーティングとマスカレードを追加する
/etc/sysctl.confを編集して、次の行のコメントを解除します。
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
eth0のアウトバウンドトラフィックのマスカレードを追加します。
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptablesルールを保存します。
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
/etc/rc.localを編集し、これを「exit 0」のすぐ上に追加して、ブート時にこれらのルールを再現します。
sudo vi /etc/rc.localiptables-restore < /etc/iptables.ipv4.nat
/usr/sbin/hostapd /etc/hostapd/hostapd.conf
再起動して、ワイヤレスデバイスが有効化されると、ネットワークに接続できるようになる。
reboot
hostapd構成で指定したネットワークSSIDが存在し、指定したパスワードでアクセスできる。
Raspberry PiアクセスポイントでSSHが有効になっている場合は、piアカウントからSSH接続できます。
まとめ
ラズパイにACCESSPOINT機能をインストールしました。
ラズパイをインターネットに対して、有線LAN接続しておいて、
インターネットに接続したい端末を、ラズパイACCESSPOINTに接続することで、インターネットを使用できるようにできます。
ラズパイをACCESSPOINTにする方法は2つあります。
今回はIPフォワードでした。
この方法はRasbianの公式HPに紹介されていた方法を試しながら、はまったところはググりながら動作するところまでたどり着きました。
もうひとつはBridgeさせる方法です。
また、さらにそこにMotioneyeをインストールすることで、ドライブレコーダーに仕立てることもできます。