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 hostapd7、クライアント端末からの接続、通信 手持ちの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 wlan0iPhone側は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フォワーディングが正常に働いていることがわかる。
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Windowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
Windows版Google Driveが使用中と言われアンインストールできない場合
進研ゼミチャレンジタッチをAndroid端末化する
【Apache】サーバーに同時接続可能なクライアント数を調整する
VirtualBoxの仮想マシンをWindows起動時に自動起動し終了時に自動サスペンドする
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【Linux】iconv/libiconvをソースコードからインストール
Ubuntu Server 21.10でイーサリアムブロックチェーン【その5】