ラズパイを無線LAN 2つでルーター化(アクセスポイント化)
自宅に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ルーター化する ~アクセスポイント編~
- Ubuntuで起動時に自動でShellScriptを実行する方法
- 第777回 Raspberry Pi Zero 2 WにUbuntuサーバーをインストール
追加無線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
再起動後にアクセスポイントとして機能していれば成功です。
以上になります。またお会いしましょう