1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【RasPi】アクセスポイントにする

Last updated at Posted at 2024-02-12

はじめに

おじさんは日夜頑張って報われない仕事をしているのですが、これが何度も挑戦してもうまくできなくて貴重な人生の時間をつぶしていました。それは、、、「RasPiをアクセスポイントにし、ノートPCやスマホからRasPiを操作する」です。まだ、できていません。。

今回、RasPiをアクセスポイントにするOSSがあり、本当に簡単にできたので紹介しておきます。また、関連する内容として、wlanの設定の確認のメモも書いておきます。

(修正) RasAPを使った生地を最初書きましたが、その後、もっと簡単にできる方法(Network Manager, nmcliの利用方法)が分かりました。記事を修正しましたが、もとのRaspAPの部分は残しておきます。

内容

GUIでの設定

Raspberry Pi OSでデスクトップ画面を開いている場合、最も簡単なのは画面右上にあるWiFIネットワークに関する設定を利用する方法です。"Advanced Options" から "Create Wi-Fi Hotspot" を選択します。network name, WI-FI security, Password を設定します。

CUIでの設定

Network Manager (nmcli)を用いて下記でできます。device で wifi を指定し、hotspot でモードでwlan0 というインターフェイスを動かします。

$ sudo nmcli device wifi hotspot ifname wlan0 ssid "myhotspot" password "mypassword"

設定したネットワーク接続 myhotspot をシステム起動時やネットワークを利用可能になった時に自動的に接続するように設定します。

$ sudo nmcli connection modify myhotspot autoconnect yes

設定の確認。

$ sudo nmcli connection show

参考情報(他の方法)

RaspAPでアクセスポイントにする

RaspAPというものが存在するようです。ありがたや、ありがたや。

image.png

RasPiとノートPCとモニターが手元にある環境で作業しました。

インストール

下記でインストールできました。最後 bash 以下でオプションを指定し、途中でY/nを答えることなく最後まで設定されます。

sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
curl -sL https://install.raspap.com | bash -s -- --yes --openvpn 1 --adblock 0

このinstall loader のオプションの説明はこちらのございます。

 https://docs.raspap.com/quick/

設定と接続確認

今、おいらはRasPiをモニターにつないでいるので、そのまま http://localhost をブラウザで開きました。
下記は、全てこのWebUIから全て行いました。デフォルトで、user: admin, password:secret のBasic認証で接続できたと思います。

  • SSIDの変更 (default: RaspAP-webgui)
  • channel 番号の設定(default: 1)
  • PSK: "hotspot"の項目で "Security"タブを開くとPSKを編集できます。

"start hotspot" のボタンを押してみると、何かが立ち上がり、Hstspotの画面の右上が hstapt up が緑色になりました。

次に、ノートPC側でWiFi接続先を、今用意したAPに変更します。要求されるパスワードは "ChangeMe"です。無事に接続できると、IPアドレスが降られているはずです。コマンドプロンプトでIPアドレスを確認してみました。

Wireless LAN adapter Wi-Fi:

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: fe80::52e0:d21d:add6:5bc9%3
   IPv4 アドレス . . . . . . . . . . . .: 10.3.141.108
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 10.3.141.1

この状態で、GetewayにもなっているRasPiのアドレス http://10.3.141.1 をブラウザで開くと、同じように管理画面を開けます。また、"ssh pi@10.3.141.1" でログインもできました。

systemctl で raspapd の制御

再起動したとき、動いていると思います。サービス?として動いているのを確認できます。

$ sudo systemctl status raspapd

systemctl stop raspapd.service で停止することも、systemctl disable raspapd.service として起動しないようにすることもできるようです。

Access point にするためのrouting設定

ここまでの状態では

(internet) <---> eth0 [RasPi] wlan0 <---

という感じでeth0からは外のインターネットに接続できる一方で、wlan0は外から接続を求めてくるスマホなどにIPアドレスを割り振りRasPiにはアクセスできます。が、wlan0からeth0経由で外のインターネットにはいけませんでした。

この掲示板を情報に、以下の設定を行うとできるようになりました。

IPv4 forwarding を有効にする。

(1) まず/etc/sysctl.conf で下記を有効にします。初期設定ではコメントアウトされていたので、uncomment します。

[/etc/sysctl.conf]
net.ipv4.ip_forward=1

と編集して

$ sudo sysctl -p

(2) 下記を実行して転送するようにします。

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

wlan設定の確認

こちらの公式ドキュメントを参考にしています。

APをスキャンする

自宅に設定したWiFiルータにつなげたい、とかするとき、アクセスポイントが見えているかを確認できます。

pi@raspberrypi:~ $ sudo iwlist wlan0 scan | grep ESSID
                    ESSID:"Family Room TV.v,"
                    ESSID:"0C67XXXXXXXX-5G"
                    ESSID:"F660A-xxxx-G"
                    ESSID:"USPOT_xxxxxxxx_5.0G"
                    ESSID:"aterm-xxxxxx-g"
                    ESSID:"E81XXXXXXXX-2G"
                    ESSID:"TP-Link_XXXX"
                    ESSID:"pr500m-xxxxxx-3"
                    ESSID:"BCW720J-XXXXX-G"
                    ESSID:"SPWH_H32_XXXXXXX"                    ESSID:"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
                    ESSID:"TownWiFi"00001240

接続するには、パスワードを書かなくてはいけません。暗合するには

$ sudo su -
# wpa_passphrase your_ssid password >> /etc/wpa_supplican/wpa_supplicant.conf
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

で行えるようです。最後のファイル編集は、暗号化されていない passwordの行を削除するためのものです。

さて、下記でwlan0で取れているIPアドレスはこちらでも確認できるのかな?

pi@raspberrypi:~ $ arp -a
? (172.20.10.1) at <不完全> on wlan0
? (192.168.3.1) at 0c:67:00:00:00:00 [ether] on eth0
? (192.168.3.7) at 7c:2a:00:00:00:00 [ether] on eth0

固定IPアドレスを割り当てに成功しているようです。

pi@raspberrypi:~ $ ifconfig wlan0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.20.10.10  netmask 255.255.0.0  broadcast 172.20.255.255
        inet6 fe80::e65f:1ff:0000:0000  prefixlen 64  scopeid 0x20<link>
        inet6 2400:2410:a9c1:b100:e65f:1ff:fea8:ab63  prefixlen 64  scopeid 0x0<global>
        ether e4:5f:01:00:00:00  txqueuelen 1000  (イーサネット)
        RX packets 51281  bytes 15158782 (14.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 98580  bytes 22841830 (21.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

WiFiをリセットする

よくWiFiをオフにして、再度オンにするとかやりますよね。同じことを行いたいと思いました。

$ wpa_cli -i wlan0 reconfigure
OK

また、昔はifdownifupのコマンドを使っていましたが、今では下記で行うようです。

$ sudo ifconfig wlan0 down
$ sudo ifconfig wlan0 up

とするようです。これ、忘れて何度も調べています。人生の時間の無駄だった。

IPアドレスの固定、動的取得

dhcpdがなくては。

$ sudo apt install dhcpcd

以前は /etc/network/interfaces に書いたが、現在は/etc/dhcpcd.confに書くらしい。

/etc/dhcpd.conf
interface wlan0
static ip_address=192.168.2.10/24
static routers=192.168.0.1 # default gateway
static domain_name_servers=192.168.0.1 # DNS server

hostapd

まずはインストールする。

$ sudo apt install hostapd

設定ファイルを編集します。

$ sudo nano /etc/hostapd/hostapd.conf

これを参照するのように編集します。

...
DAEMON_CONF="/etc/hostapd/hostapd.conf"

そして、$ sudo systemctl restart hostapdでサービスを起動させるようです。

参考にしたサイト

https://blog.soracom.com/ja-jp/2022/10/31/how-to-build-wifi-ap-with-
bridge-by-raspberry-pi/

SSL Certificateを追加する

HTTPSを自分で発行した証明書で行うために、追加の作業が必要です。下記を参照。

mkcertによる証明書の作成とlighttpd の起動

mkcert というソフト?を使うのですが、manual install と quick install の二つの方法が紹介されています。私はquick の方で行いました。

$ curl -sL https://install.raspap.com | bash -s -- --cert

 888888ba                              .d888888   888888ba
 88     8b                            d8     88   88     8b
a88aaaa8P' .d8888b. .d8888b. 88d888b. 88aaaaa88a a88aaaa8P
 88    8b. 88    88 Y8ooooo. 88    88 88     88   88
 88     88 88.  .88       88 88.  .88 88     88   88
 dP     dP  88888P8  88888P  88Y888P  88     88   dP
                             88
                             dP      version 3.0.9

The Quick Installer will guide you through a few easy steps


RaspAP mkcert: Configure a new SSL certificate
Current system hostname is raspberrypi
Create an SSL certificate for raspberrypi.local? (Recommended) [y/N]y
Install to lighttpd SSL directory: /etc/lighttpd/ssl? [y/N]: y
***************************************************************
A new SSL certificate for: raspberrypi.local
will be installed to lighttpd SSL directory: /etc/lighttpd/ssl
***************************************************************
Complete installation with these values? [y/N]: y
RaspAP mkcert: Fetching mkcert binary
RaspAP mkcert: Installing mkcert
Created a new local CA at "/home/pi/.local/share/mkcert" 💥
The local CA is now installed in the system trust store! ⚡️
Warning: "certutil" is not available, so the CA can't be automatically installed in Firefox and/or Chrome/Chromium! ⚠️
Install "certutil" with "apt install libnss3-tools" and re-run "mkcert -install" 👈

RaspAP mkcert: Generating a new certificate for raspberrypi.local
Using the local CA at "/home/pi/.local/share/mkcert" ✨
Warning: the local CA is not installed in the Firefox and/or Chrome/Chromium trust store! ⚠️
Run "mkcert -install" to avoid verification errors ‼️

Created a new certificate valid for the following names 📜
 - "raspberrypi.local"
 - "*.raspberrypi.local.local"
 - "raspberrypi.local"

Reminder: X.509 wildcards only go one level deep, so this won't match a.b.raspberrypi.local.local ℹ️

The certificate is at "./raspberrypi.local+2.pem" and the key at "./raspberrypi.local+2-key.pem" ✅

RaspAP mkcert: Combining private key and certificate
OK
RaspAP mkcert: Creating SLL directory for lighttpd
OK
RaspAP mkcert: Setting permissions and moving .pem file
OK
RaspAP mkcert: Configuring lighttpd for SSL
Adding line server.modules += ("mod_openssl")
Adding line $SERVER["socket"] == ":443" {
Adding line ssl.engine = "enable"
Adding line ssl.pemfile = "/etc/lighttpd/ssl/raspberrypi.local.pem"
Adding line ssl.ca-file = "/home/pi/.local/share/mkcert/rootCA.pem"
Adding line server.name = "raspberrypi.local"
Adding line server.document-root = "/var/www/html"}
OK
RaspAP mkcert: Copying rootCA.pem to RaspAP web root
OK
RaspAP mkcert: Restarting lighttpd service
...
***************************************************************
Open a browser and enter the address: http://raspberrypi.local/rootCA.pem
Download the root certificate to your client and add it to your system keychain.
Note: Be sure to set this certificate to 'Always trust' to avoid browser warnings.
Finally, enter the address https://raspberrypi.local in your browser.
Enjoy an encrypted SSL connection to RaspAP 🔒
For advanced options, run mkcert -help
***************************************************************

PEMファイル/etc/lighttpd/ssl/raspberrypi.local.pem ルートCA証明書 /home/pi/.local/share/mkcert/rootCA.pem が作るようです。そして lighttpd というサービスが起動するようです。設定ファイル類は、/etc/lighttpd/にあります。

私はここに書かれているようにブラウザ経由でrootCA.pem を持ってくれなかったので、/var/www/html/rootCA.pem を scp で持ってきました。

ルートCA証明書のインストール

独自証明書のインストール方法を調べ、インストールしました。

https://qiita.com/msi/items/9cb90271836386dafce3
https://www.incredigeek.com/home/import-cert-pem-on-windows/
https://www.furukawa.co.jp/fitelnet/product/setting/pdf/l2tpv2_rsa_Windows10_certificate.pdf

まとめ

とりあえず、RaspAPでRasPiを起動直後にアクセスポイントにする、という目的は達成できていました。がいくつか課題があり、

  • 起動しているのに、ノートPCからAPとして接続しようとしてもできない。(IPアドレスが割り振られない)という状態がある
  • もとのWiFiの設定の戻せない。。

まぁ、どうしようか、、、という感じです。そのほか、気になるのはDocker での利用。

まぁ、何とかなるでしょう。生きてさえいれば。
(2024/2/12)

[追記]

  • 「SSL Certificateを追加する」の節を追加しました(2024/3/7)
  • IPv4 forwarding の設定方法を追記しました。(2024/8/19)
  • RaspAPの方法を参考歳、nmcli(Network Manager)を利用する方法を書きました。(2024/11/4)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?