(2022-09-19)
自宅にWiFiアクセスポイント(WiFi AP)が必要になっため、その構築、およびメモ。
WiFiルーターとは別の単なるアクセスポイントでルーティング等なし。
環境
関係ありそうなファイル。
/etc/systemd/network/bridge-br0.netdev /etc/systemd/network/br0-member-eth0.network /etc/hostapd/hostapd.conf /etc/dhcpcd.conf /etc/sysctl.conf
おまけのファイル。
/etc/avahi/avahi-daemon.conf
$ sudo apt install hostapd
これらのファイルは存在しないので、自分で作る。
/etc/systemd/network/bridge-br0.netdev
[NetDev] Name=br0 Kind=bridge
大文字小文字を間違えると動かないような。
/etc/systemd/network/br0-member-eth0.network
[Match] Name=eth0 [Network] Bridge=br0
/etc/hostapd/hostapd.conf
country_code=JP interface=wlan0 bridge=br0 ssid=EnterYourFavouriteSSIDHere hw_mode=g channel=4 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=PassPhraseHere (または外部ファイル wpa_psk_file=/etc/hostapd/psk) wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
パスフレーズを外部ファイルにする場合~| /etc/hostapd/psk
00:00:00:00:00:00 PassPhraseHere
/etc/dhcpcd.conf
#最初の方に追加 denyinterfaces wlan0 eth0 #適当な場所に追加 interface br0
hostapdを自動起動するようにするには下記。
$ sudo systemctl unmask hostapd $ sudo systemctl enable hostapd
公式の手順では大体こんなところ。
avahiが動いているなら以下も直しておいた方がいいかも。
avahi-daemon.conf
< allow-interfaces=eth0,wlan0 インターフェース名を直す。 > allow-interfaces=br0
ここまでの手順だけだと、時折ESET(Windowsのウィルスチェッカー)がエラーを表示する。
hostapdを起動すると100%発生するよう。
原因は多分、Raspberry PiのIPアドレスをWindows端末がARPで問い合わせを出したとき、 Raspbery Piがeth0とwlan0のMACアドレスを両方回答してしまうこと、のようだがよくわからん。
/etc/systemd/network/27-wlan0.network
[Match] Name=wlan0 [Link] ARP=false
LinuxでのARPへの応答方法などを変えてやればよいようだがはっきりしない。
/etc/sysctl.conf
net.ipv4.conf.all.arp_announce = 1 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_filter = 1
どれが効き目があるのかいまいち不明。多分最後のはおまけ。
arp_なんちゃらを設定すると、ひとまずESETはエラー通知を出さなくなったようだ。
→やっぱエラー出るわorz
しばらく様子見。
この辺りを参考にした。
hostapdを起動する前と後で、ブリッジのインターフェースbr0 のMACアドレスが異なるではないですかい!
hostapd状態 | br0のMACアドレス | eth0のMACアドレス | wlan0のMACアドレス |
停止 | b8:2*:**:**:*3:04 | b8:2*:**:**:*3:04 | 00:2*:**:**:*5:22 |
起動 | 00:2*:**:**:*5:22 | 同上 | 同上 |
hostapdが停止中にARPに応答すると、eth0と同じMACアドレスを返し、 hostapdが起動中だと、wlan0のMACアドレスを返す。
なので、hostapdを起動したり停止したりを連続で行うと、タイミングによっては同一IPアドレスに対してMACアドレス2通りの応答をするので、 前述の「ARPポイズニング」の判定がされてしまうようだ。
hostapd停止中に別の端末からpingを飛ばして応答あり、hostapdを起動したらそのpingが通らなくなる、なんてことが発生する。
ブリッジbr0にMACアドレスを固定で与えればよさそう。
ということで、先ほど作ったファイル bridge-br0.netdev へ1行追加する。
/etc/systemd/network/bridge-br0.netdev(ファイル名は人によりけり)
[NetDev] Name=br0 Kind=bridge MACAddress=b8:2*:**:**:*3:84 <<< この1行を追加
MACアドレスに指定する値は、まあ適当ですな。
再起動してbr0のMACアドレスがどうなるか確認・・・hostapd停止時と起動後で、br0のMACアドレスは変化なし。
他のWindowsマシンからpingなどでIPアドレスを参照し、ARPテーブルを見てみると、常にbr0のMACアドレスになっていたので、これもOK。
以上。