アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【RaspberryPIDebian
【Raspberry Piメモ・4】オンボード無線LANでRaspberry Piをアクセスポイントにする
POSTED BY
2023-05-31

ひかり電話ルーターなど、無線LANのついていない環境の場合、Raspberry Piを無線LANアクセスポイントにすることができる。構成は以下のような感じとなる。

家庭内PC 無線 → (wlan0)RaspberryPi(eth0) 有線 → ルーター → インターネット

フレッツ光ネクストのように付属するのはDSUのみでルーターは自分で用意する場合、Raspberry PiにPPPoEをしゃべらせてアクセスポイントのみならず上記ルーターの役割も担わせられるが、それはまた次の機会に記事にしたい。

1、デフォルトのwpa_supplicantを無効にする

wlan0をアクセスポイント用途にするなら、クライアント用途であるwpa_supplicantはクローズしなければならない。

sudo -s

cd /etc/wpa_supplicant
mv wpa_supplicant.conf wpa_supplicant.conf.default
systemctl disable wpa_supplicant

reboot

ps aux | grep wpa # wpa_supplicantが居なくなってる事を確認

2、wlan0に固定IPアドレスを設定する

PC(無線)→(wlan0)Pi のところは有線→ルーターとは別の独自のネットワーク空間を構築する。
ルーターの空間が192.168.1.0/24であるなら、wlanのところは192.168.50.0/24 などと設定する。

/etc/network/interfaces.d/wlan0を作成する。

cd /etc/network/interfaces.d
vi wlan0

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.50.100
netmask 255.255.255.0

3、DHCPサーバーのインストールと設定、起動

wlan0へアクセスしてきた家庭内PCへIPアドレスを割り当て、ルーター、ネームサーバを知らせる。wlan0→eth0へNATフォワーディングするので、家庭内PCへ知らせるルーターIPはwlan0自身のIP=192.168.50.100であり、ネームサーバーはeth0側のルーターアドレス=192.168.1.1を知らせている。

apt install isc-dhcp-server

cd /etc/default
vi isc-dhcp-server

DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
DHCPDv4_PID=/var/run/dhcpd.pid
INTERFACESv4="wlan0"

とする。

cd /etc/dhcp

vi dhcpd.conf

option domain-name-servers 192.168.1.1;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
subnet 192.168.50.0 netmask 255.255.255.0 {
  option routers 192.168.50.100;
  option broadcast-address 192.168.50.255;
  option subnet-mask 255.255.255.0;
  range 192.168.50.101 192.168.50.254;
}

などとする。

よくauthoritative;とする例を見かけるが、これはこのDHCPサーバーが家庭内ネットワークの代表DHCPサーバーである場合に記述するものであるので、今回のようなサブネットワーク用のDHCPには記述しない。

4、wlan0←→eth0間相互フォワーディング設定

家庭内PCからインターネットへ出ていくためにはパケットを有線LAN→ルータへ中継しなければならない。
また逆に、家庭内PCからRaspberryPiへ無線接続している機器(プリンターなど)にアクセスするためには有線LAN→無線LANへの中継も必要である。

sudo -s

vi /etc/sysctl.conf

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.tcp_syncookies=1
net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv4.conf.all.log_martians = 0

とする。

続いてip_forwardフラグを立てる。

echo 1 > /proc/sys/net/ipv4/ip_forward

続いて本設定 wlan0→eth0への中継設定

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

さらにeth0→wlan0への中継設定

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT

設定内容のファイルへの書き出し

iptables-save > /etc/iptables.ipv4.nat

このルールをiface起動時に読み込ませる。

/etc/network/if-pre-up.d/iptablesを作成する。

cd /etc/network/if-pre-up.d
vi iptables # 新規作成

#!/bin/sh
iptables-restore 

なお、Raspberry PiにSquidなどのプロキシサーバを立ててそれを家庭内PCに使わせるだけの用途なら、これら4、の設定は必要ない。(そのほうがセキュアではある)

<b style="color:#0000ff;">5、hostapdのコンパイル・インストール</b>

無線LANクライアントソフトがwpa_supplicantなら、サーバーソフト(アクセスポイント化)はhostapdである。
<a href="article.php?id=raspberrypi-note-3">wpa_supplicantをソースからインストール</a>したのであれば、対となるhostapdも同じように行える。

<pre>
sudo apt install libssl-dev libdbus-1-dev libnl-3-dev libnl-genl-3-dev libnl-route-3-dev

git clone git://w1.fi/srv/git/hostap.git
cd hostap/src
make clean
cd ../hostapd
cp defconfig .config
vi .config
 
以下のコンフィグを有効にする。

CONFIG_WPS=y
CONFIG_WPS_UPNP=y
CONFIG_WPS_NFC=y
CONFIG_IEEE80211R=y
CONFIG_WNM=y
CONFIG_IEEE80211AC=y
CONFIG_IEEE80211AX=y
CONFIG_DEBUG_FILE=y
CONFIG_DEBUG_SYSLOG=y

make
sudo make install
/usr/local/bin/hostapd,hostapd_cli}がインストールされる。 6、hostapdの設定ファイル作成と起動 /etc/hostapd/hostapd.confを作成する。
cd /etc
mkdir hostapd
cd hostapd
vi hostapd.conf

interface=wlan0
country_code=JP
driver=nl80211
hw_mode=g
ieee80211d=1
channel=6
auth_algs=1
ignore_broadcast_ssid=0
disassoc_low_ack=1
ieee80211n=1
ht_capab=[HT40] [SHORT-GI-20] [DSSS_CCK-40]
require_ht=0
rsn_pairwise=CCMP
max_num_sta=3
ssid=任意の ssid
wpa_passphrase=任意のパスワード
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_group_rekey=86400

などとする。
まず出力を見ながら起動する
/usr/local/bin/hostapd /etc/hostapd/hostapd.conf

wlan0: interface state UNINITIALIZED->COUNTRY_UPDATE
wlan0: interface state COUNTRY_UPDATE->ENABLED
wlan0: AP-ENABLED
問題なさそうならサービスファイルを作成して自動起動させる。 /lib/systemd/system/hostapd.serviceを作成する。
cd /lib/systemd/system
vi hostapd.service

[Unit]
Description=Advanced IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator
After=network.target

[Service]
Type=forking
PIDFile=/run/hostapd.pid
Restart=on-failure
RestartSec=2
ExecStart=/usr/local/bin/hostapd -B -P /run/hostapd.pid /etc/hostapd/hostapd.conf

[Install]
WantedBy=multi-user.target

などとする。
systemdでチェック、起動、登録。出力は今後/var/log/syslogで確認する。
systemctl status hostapd
systemctl start hostapd
systemctl enable hostapd
7、クライアント端末からの接続、通信 手持ちのiPhone8からテスト Wi-fi AP一覧にhostapd.confで指定したssidが出現して、電波状態を確認。 選択してhostapd.confで指定したwpa_passphraseを入力。 成功した場合のRaspberry Pi側のログ
May 19 10:45:52 raspberrypi hostapd: wlan0: STA c0:a5:3e:56:4a:11 IEEE 802.11: associated
May 19 10:45:52 raspberrypi hostapd: wlan0: STA c0:a5:3e:56:4a:11 RADIUS: starting accounting session 4900E171EB3D0EFA
May 19 10:45:52 raspberrypi hostapd: wlan0: STA c0:a5:3e:56:4a:11 WPA: pairwise key handshake completed (RSN)
May 19 10:45:52 raspberrypi dhcpd[490]: DHCPDISCOVER from c0:a5:3e:56:4a:11 via wlan0
May 19 10:45:53 raspberrypi dhcpd[490]: DHCPOFFER on 192.168.50.102 to c0:a5:3e:56:4a:11 (st3515iphone8) via wlan0
May 19 10:45:54 raspberrypi dhcpd[490]: DHCPREQUEST for 192.168.50.102 (192.168.50.100) from c0:a5:3e:56:4a:11 (st3515iphone8) via wlan0
May 19 10:45:54 raspberrypi dhcpd[490]: DHCPACK on 192.168.50.102 to c0:a5:3e:56:4a:11 (st3515iphone8) via wlan0
iPhone側はiマークから接続詳細を確認。 IPアドレス192.168.50.102、ルーター192.168.50.100、DNSを構成→eth0側である192.168.1.1がそれぞれ設定された。 iPhone/Safari等でwww.yahoo.co.jpなどインターネットにアクセスできれば、Raspberry Pi側のwlan0→eth0側へのDNS参照とIPフォワーディングが正常に働いていることがわかる。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】