ラズパイをACCESSPOINTにセットアップする方法(Bridge編)

ラズパイにACCESSPOINT機能をインストールしておくと、ラズパイを有線LAN接続しておいて、インターネットに接続したい端末をラズパイACCESSPOINTに接続することで、インターネットを使用できるようにできます。

大まかに、Bridge機器としてセットアップする方法と、ラズパイにIPパケットをIPフォワードさせる方法があると思いますが、本日はBridgeでの設定をします。ラズベリーパイ財団のWebサイトにあった設定方法をベースにしています。
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にパスフレーズ指定して、接続を確認できる

 bridge-utilsのインストール

sudo apt-get install -y bridge-utils
有線LANとWifiインタ-フェイスをブリッジ接続する
sudo vi /etc/network/interfaces

auto br0 eth0 wlan0
iface eth0 inet manual
iface wlan0 inet manual
iface br0 inet manual
   bridge_ports wlan0 eth0
   bridge_stp off
   bridge_maxwait 30
sudo vi /etc/dhcpcd.conf

denyinterfaces wlan0 eth0

interface br0
static ip_address=192.168.8.100/24
static routers=192.168.0.1 ←ブリッジで、インターネット接続を借りるデフォルトゲートウエイとなるルータ
static domain_name_servers=8.8.8.8
自動起動を設定
sudo vi /etc/rc.local で exit 0 の上に以下を追記
/usr/sbin/hostapd /etc/hostapd/hostapd.conf

一旦、リブート後、ACCESSPOINTとして動き出します。
ラズパイが接続している有線LAN経由して、インターネットも利用できます。

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
}

WPA2へセキュリティアップグレード  2021.06.10追加 記載漏れ(ただし、ここら辺は色々試したので、やらなくてもつながるかも)

※ この手順では、DNSMASQでのDHCPを入れていないが、DHCP配布するのであれば、DNSMASQのインターフェイスを wlan0 から br0 に変更する

root@rp0-bsf-apf:/home/pi# sudo mv /etc/hostapd/hostapd.conf /etc/hostapd/hostapd.conf.wpa
root@rp0-bsf-apf:/home/pi# sudo vi /etc/hostapd/hostapd.conf

interface=wlan0
bridge=br0     ← 変更
#driver=nl80211  ← 削除
ssid=NameOfNetwork
hw_mode=g
channel=6
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

まとめ

ラズパイにACCESSPOINT機能をインストールしました。
ラズパイをインターネットに対して、有線LAN接続しておいて、
インターネットに接続したい端末を、ラズパイACCESSPOINTに接続することで、インターネットを使用できるようにできます。

ラズパイをACCESSPOINTにする方法は2つあります。
今回はBridgeさせる方法でした。
この方法はRasbianの公式HPに紹介されていた方法を試しながら、はまったところはググりながら動作するところまでたどり着きました。

もうひとつはIPパケットをIPフォワードさせる方法です。

また、さらにそこにMotioneyeをインストールすることで、ドライブレコーダーに仕立てることもできます。