・raspberry Pi Model 3B+  最新版OS 2020-02-05-raspbian-buster-full
  で ルーター機能付き WiFi中継器 を作ってみました。

raspiwifirep

S__43483159


今回の中継器概要
⓪raspberry Pi Model 3B+
①最新版OS 2020-02-05-raspbian-buster-full.img
②中華製格安WiFiドングルを挿してwlan1とする。
③内蔵WiFiをwlan0とする。
④wlan1で、上位WiFiを受け、wlan0に中継する。
⑤wlan0のIPアドレスは、192.168.4.1
⑥DHCPの範囲は、192.168.4.100,192.168.4.200,255.255.255.0,24h
⑦hostapd v2.8-devel (hostapd -v)
⑧Dnsmesq version 2.80 (dnsmesq -v)
⑨dhcpcd 8.1.2 (dhcpcd --version)

1.ソフトウェアのインストール

 sshしたら、必要なソフトウェアをインストールします。
 以下の順でコマンドを実行。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install dnsmasq hostapd

2.dnsmasqとhostapdのインストールが終わったら、
 これらのサービスを確認し、起動していたら終了させます。

$ service dhcpcd status
$ service dnsmasq status
$ service hostapd status

$ sudo systemctl stop dnsmasq
$ sudo systemctl stop hostapd

3.dhcpの設定

 次に設定ファイルを編集していきます。
 まずはdhcpの設定。

$ sudo nano /etc/dhcpcd.conf

「^w」「^v」で最後の行まで飛び、以下を追加します。

denyinterfaces wlan0

 wlan0をdhcpの対象から除外します。

「^o」で保存し、「^x」で終了します。

 ではdhcpを再起動させます。

$ sudo service dhcpcd restart


4.dnsmasqの設定

 次はdnsmasqの設定です。
 オリジナルの設定ファイルは、コピーしてバックアップを取っておきます。

$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.org
$ sudo nano /etc/dnsmasq.conf

「^w」「^v」で最後の行まで飛び、次の3行を追加します。

server=8.8.8.8
interface=wlan0
dhcp-range=192.168.4.100,192.168.4.200,255.255.255.0,24h

dhcp-rangeの設定は、適当に設定しています。

 同じく「^o」で保存し、「^x」で終了します。

5.hostapdの設定
 次はhostapdです。ここでアクセスポイントのSSIDやパスワードを設定していきます。

 まずは設定ファイルの例をコピーし開きます。

$ sudo cp /usr/share/doc/hostapd/examples/hostapd.conf /etc/hostapd/hostapd.conf
$ sudo nano /etc/hostapd/hostapd.conf

 開いたら以下を探して確認及び修正。

interface=wlan0
driver=nl80211
ssid=[SSID]
country_code=JP
hw_mode=g
channel=6
auth_algs=1
ieee80211n=1
wpa=2
wpa_passphrase=[PASS]
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

 同じく「^o」で保存し、「^x」で終了します。
 相当大きいファイルですので、下記コマンドで比較して変更されていることを再確認します。

$ sudo diff /usr/share/doc/hostapd/examples/hostapd.conf /etc/hostapd/hostapd.conf

 保存して終了したら、この設定ファイルを読むようにhostapdの動作ファイルを書き換えます。

$ sudo nano /etc/default/hostapd

#
#DAEMON_CONF=""

ここの#DAEMON_CONF=""をDAEMON_CONF="/etc/hostapd/hostapd.conf"と書き換えます。


 ここまで来たら、dnsmasqとhostapdを起動します。

$ sudo systemctl start hostapd
$ sudo systemctl start dnsmasq

Failed to start hostapd.service: Unit hostapd.service is masked.
もし、hostapdを起動させようとした時、上記エラーが出た場合、以下の手順でコマンドを実行してください。

$ sudo systemctl unmask hostapd
$ sudo systemctl enable hostapd
$ sudo systemctl start hostapd


$ sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf


起動したことを確認してみます。

$ service dhcpcd status
$ service dnsmasq status
$ service hostapd status

*緑色で active (running) と表示されていればOKです。
 違ってたら、設定ファイルを見直してみて下さい。


6.次に、IP転送の設定をします。

$ sudo nano /etc/sysctl.conf

 次の行を探しコメントを外して保存終了します。

#net.ipv4.ip_forward=1

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

 下記コマンドを実行してください。

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

$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

8.次に、ラズパイが起動後に自動実行するように下記のファイルに追記します。
 *どうしてもwlan0に固定IPアドレスを振ることが出来なかったのでここで
  192.168.4.1の固定アドレスを設定しています。
 *他の方法で、設定できた方は、お教えください。

$ sudo nano /etc/rc.local

 一番下にexit 0とあるので、その上に以下の2行を追加します。

sudo ifconfig wlan0 192.168.4.1
iptables-restore < /etc/iptables.ipv4.nat

 追加したら保存して終了。

9.これでルーター機能付きWiFi中継器の設定は終わりです。
最後にRaspberryPiを再起動しましょう。

$ sudo reboot

しばらくすると、先程hostapdで設定したSSIDが見えるようになってますので、
設定したパスワードで繋いでみましょう。
めでたしめでたし

10.付録 複数の上位WiFiに自動接続させるために
***********************************************************************
WiFi設定ファイル
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
        ssid="AP-1"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=6
}
network={
        ssid="AP-2"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=5
}
network={
        ssid="AP-3"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=4
}
network={
        ssid="test-ap"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=3
}


*********************************************************
以上 お疲れ様でした。