ラズパイを無線LAN 2つでルーター化(アクセスポイント化)

最終更新日

Raspberry Pi

自宅にWi-Fiの電波がちょっと届かない場所があったので、アクセスポイントを作ってみることにしました。
ラズパイのZero 2 Wに、内蔵無線LANと追加無線LAN(TL-WN725N)、この2つを使ってアクセスポイント化したいと思います。

以下の環境で、OSは起動出来る状態から設定を始めます。

  • Raspberry Pi Zero 2 W
  • Raspberry Pi OS Lite (64-bit)
  • TP-Link TL-WN725N (無線LAN)
> lsusb
Bus 001 Device 002: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network Adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ラズベリーパイをアクセスポイント化

参考にさせていただきました

今回の設定は下記サイトを参考にしてほぼ同じ様に作成しています。ありがとうございました。

その他、参考にさせて頂いたサイトです。

追加無線LAN(TL-WN725N)のドライバのインストール

まずは追加の無線LANの設定からです。私が使おうとしているTP-LinkのTL-WN725Nは、Realtekの8188euが対応するドライバということで、インストールしていきます。

詳しくは参考リンク先を参照ということで、叩いたコマンドだけ。

echo 'blacklist r8188eu' | sudo tee -a '/etc/modprobe.d/realtek.conf'

# 念の為以前のデータは残す
cd /lib/modules/$(uname -r)/kernel/drivers/net/wireless
sudo mv -r realtek ~/tools/.

# 適当な場所に移動してから(例:cd ~)
mkdir tools
cd tools
git clone https://github.com/aircrack-ng/rtl8188eus
cd rtl8188eus
make
sudo make install

再起動してTP-Linkの無線LANが認識しているか確認できたらOKです。

インストールしていくアプリケーション・パッケージ

今回の機能を実現するために、以下のアプリやパッケージをインストールします。

  • hostapd
  • dnsmasq
  • iptables
  • aircrack-ng

インストール・設定

hostapd

アクセスポイント化、認証サーバーとして使えるようにするパッケージのようです。

sudo apt install hostapd

hostapd.confに以下を追加します。interface, ssid, wpa_passphraseの[]の中をそれぞれの環境に合わせて記述が必要です。

sudo nvim /etc/hostapd/hostapd.conf

interface=[wlan0]
driver=nl80211
ssid=[YOUR-WIFI-NAME]
hw_mode=g
channel=11
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
ieee80211n=1
wme_enabled=1

# 以下はPWを付ける場合に記載
wpa=2
wpa_passphrase=[yourpassword]
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_group_rekey=86400

起動

sudo hostapd /etc/hostapd/hostapd.conf

追加したTP-Linkの無線LANにIPアドレスを割り振ります。

sudo ifconfig wlan0 up 192.168.0.1 netmask 255.255.255.0

IPアドレスは192.168.0.1/24を割り当てることにしました。
ここまででiPhoneなどのWi-Fi設定で、アクセスポイントとして選択できるようになってます。

dnsmasq

次にDNSサーバのインストールと起動設定です。

(IT用語辞典より)
小規模な内部ネットワーク向けのDNSキャッシュサーバとDHCPサーバを兼ねたソフトウェア

sudo apt install dnsmasq

dnsmasq.confに以下を追加します。

sudo nvim /etc/dnsmasq.d/dnsmasq.conf

interface=wlan0
dhcp-range=192.168.0.2,192.168.0.30,255.255.255.0,12h
dhcp-option=3,192.168.0.1
dhcp-option=6,192.168.0.1
server=1.1.1.1
log-queries
log-dhcp
listen-address=127.0.0.1

192.168.0.2〜.30までをDHCPサーバで払い出す設定です。DNSにはパブリックな1.1.1.1を設定しました。

起動

sudo systemctl start dnsmasq

iptables (IPマスカレードの設定)

iptablesが入ってなかったのでインストールします。

sudo apt install iptables

IPマスカレードの設定をします。

sudo iptables --table nat --append POSTROUTING --out-interface wlan0 -j MASQUERADE

ポートフォワーディング

最後の設定として、2つの無線LAN間でのポートフォワーディングを設定します。

/proc/sys/net/ipv4/ip_forwardに"1"を記入します。(0 -> 1 へ修正して上書き保存)

設定はここまでです。これでアクセスポイント化出来ました。

ただラズパイを起動したら自動でアクセスポイント化の設定をしたいので、次に自動起動の設定をしたいと思います。

アクセスポイント化の自動起動

それでは最後に、ということで自動起動できれば楽になるので、設定してみます。

aircrack-ng

airmon-ngというコマンドを使いネットワークのInterface名を取得する為、aircrack-ngをインストールします。

sudo apt install -y aircrack-ng

hostapdを再設定

hostapdをsystemctlで起動できるように設定変更します。

sudo systemctl enable hostapd

自動起動スクリプトの作成

nvim /home/[ユーザー名]/wifihosting.sh

#! /bin/bash

NIC=$(airmon-ng|grep 8188eu|awk '{print $2}')
out=$(airmon-ng|grep brcmfmac|awk '{print $2}')

systemctl stop dnsmasq
systemctl stop hostapd


if [ "$NIC" != "" ]; then
	sed -i "s/wlan[0-9]\{1\}/$NIC/g" /etc/hostapd/hostapd.conf
	sed -i "s/wlan[0-9]\{1\}/$NIC/g" /etc/dnsmasq.d/dnsmasq.conf

	systemctl start hostapd

	ifconfig $NIC up 192.168.1.1 netmask 255.255.255.0

	systemctl start dnsmasq

	if [ "$out" != "" ]; then
		iptables --table nat --append POSTROUTING --out-interface $out -j MASQUERADE
	fi

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

systemctlを使って起動制御

sudo nvim /etc/systemd/system/wifihosting.service

[Unit]
Description=wifi hosting service

[Service]
ExecStart=/home/[ユーザー名]/wifihosting.sh
Restart=always
type=simple

[Install]
WantedBy=multi-user.target

作成した設定ファイルでサービスの起動が出来るようにします。

sudo systemctl enable wifihosting.service

再起動後にアクセスポイントとして機能していれば成功です。

以上になります。またお会いしましょう

鹿児島県の出水市という所に住んでいまして、インターネット周辺で色々活動して行きたいと思ってるところです。 Webサイト作ったり、サーバ設定したり、プログラムしたりしている、釣りと木工好きなMacユーザです。 今はデータサイエンスに興味を持って競馬AI予想を頑張ってます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください