(2022-09-19)

自宅にWiFiアクセスポイント(WiFi AP)が必要になっため、その構築、およびメモ。

WiFiルーターとは別の単なるアクセスポイントでルーティング等なし。

参考(いわゆる公式)
https://www.raspberrypi.com/documentation/computers/configuration.html#setting-up-a-bridged-wireless-access-point

環境

本体
Raspberry Pi 2 Model B V1.1
OS
Linux rasp2a 5.10.103-v7+ #1529 SMP Tue Mar 8 12:21:37 GMT 2022 armv7l GNU/Linux
WiFiドングル
PLANEX GW-USNano2 802.11n (2.4GHz)

関係ありそうなファイル。

/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

systemd-networkdによりブリッジを構築。

これらのファイルは存在しないので、自分で作る。

/etc/systemd/network/bridge-br0.netdev

[NetDev]
Name=br0
Kind=bridge

大文字小文字を間違えると動かないような。

/etc/systemd/network/br0-member-eth0.network

[Match]
Name=eth0

[Network]
Bridge=br0

hostapdによりWiFiアクセスポイントを立ち上げ

/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アドレスを両方回答してしまうこと、のようだがよくわからん。

ESET-ARPCachePoisoning.png

だめだったやつ

このチャレンジはうまくいかなかった

/etc/systemd/network/27-wlan0.network

[Match]
Name=wlan0

[Link]
ARP=false

sysctl.confでARPの挙動を変えてみる(これもだめだった)

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:04b8:2*:**:**:*3:0400: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。

以上。


添付ファイル: fileESET-ARPCachePoisoning.png 9件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-09-22 (木) 08:53:19