Orange Pi PC WiFi設定ウェブフロントエンドRaspAP

OSアップデートに伴い内容更新。

■ 対象ハードとOS

Orange Pi PC: Ubuntu Bionic with Armbian Linux 4.19.62-sunxi

■ 設定プロセス

lighttpd, php7.2-cgi のインストール
gitによるウェブフロントエンドダウンロード
ウェブ画面上の各ボタン操作を有効にするためのアクセス権の設定

lighttpd, php7.2-cgi のインストール

簡易ウェブサーバとしての機能を追加するため以下コマンドによりlighttpd, php7.2-cgiインストールします。

$ sudo apt-get install lighttpd php7.2-cgi

lighttpdのfastcgiモジュールを有効にし再起動します。

$ sudo lighty-enable-mod fastcgi-php
$ sudo service lighttpd restart

gitによるウェブフロントエンドダウンロード

lighttpdのインストールにより/var/wwww/htmlフォルダが作成されます。/var/www/htmlフォルダの中身を全て削除し、このhtmlフォルダ内にgitによりRaspAPフロントエンドコンテンツ一式をダウンロードします。

$ sudo rm -rf /var/www/html/*
$ sudo git clone https://github.com/billz/raspap-webgui /var/www/html

htmlフォルダ内の全ての所有権をwww-dataに付与します。

$ sudo chown -R www-data:www-data /var/www/html

RaspAPの設定ファイルraspap.phpを/etc/raspapフォルダ作成後ここにコピーしwww-dataに所有権を付与します。

$ sudo mkdir /etc/raspap
$ sudo mv /var/www/html/raspap.php /etc/raspap/
$ sudo chown -R www-data:www-data /etc/raspap

アクセスポイントへのログ取得を有効・無効にするためのスクリプトを以下のディレクトリに移動します。

$ sudo mkdir /etc/raspap/hostapd
$ sudo mv /var/www/html/installers/log.sh /etc/raspap/hostapd
$ sudo mv /var/www/html/installers/service
.sh /etc/raspap/hostapd

所有権とパーミッションの適用

$ sudo chown -c root:www-data /etc/raspap/hostapd/.sh
$ sudo chmod 750 /etc/raspap/hostapd/
.sh

ウェブ画面上の各ボタン操作を有効にするためのアクセス権の設定

ネットワーク設定に関係する各種デーモンはシステムが管理しているため、www-data(ウェブサーバ)には本来これらを操作する権限がありません。www-dataにデーモン操作の権限を付与するため/etc/sudoers.d/raspapを作成(作成後440を適用)し以下を追加します。

$ sudo nano /etc/sudoers.d/raspap

www-data ALL=(ALL) NOPASSWD:/sbin/ifdown
www-data ALL=(ALL) NOPASSWD:/sbin/ifup
www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wpa_supplicant/wpa_supplicant.conf
www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wpa_supplicant/wpa_supplicant-wlan[0-9].conf
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant.conf
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant-wlan[0-9].conf
www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] scan_results
www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] scan
www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] reconfigure
# www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/hostapddata /etc/hostapd/hostapd.conf
www-data ALL=(ALL) NOPASSWD:/etc/init.d/hostapd start
www-data ALL=(ALL) NOPASSWD:/etc/init.d/hostapd stop
www-data ALL=(ALL) NOPASSWD:/etc/init.d/dnsmasq start
www-data ALL=(ALL) NOPASSWD:/etc/init.d/dnsmasq stop
# www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dhcpddata /etc/dnsmasq.conf
www-data ALL=(ALL) NOPASSWD:/sbin/shutdown -h now
www-data ALL=(ALL) NOPASSWD:/sbin/reboot
www-data ALL=(ALL) NOPASSWD:/sbin/ip link set wlan[0-9] down
www-data ALL=(ALL) NOPASSWD:/sbin/ip link set wlan[0-9] up
www-data ALL=(ALL) NOPASSWD:/sbin/ip -s a f label wlan[0-9]
www-data ALL=(ALL) NOPASSWD:/bin/cp /etc/raspap/networking/dhcpcd.conf /etc/dhcpcd.conf
www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/enablelog.sh
www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/disablelog.sh
www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/servicestart.sh

$ sudo chmod 440 /etc/sudoers.d/raspap

hostapdやdnsmasqに関わる設定は変更できないようにコメントとしています(有効にするかどうかは任意)。

システムの停止・再起動、市販ルータへのアクセスに関わる箇所だけに権限を付与しています。

システムを再起動しブラウウザにホストネームまたはhostapdによるOrange Pi PCのIPアドレスを入力して動作を確認して下さい。

アクセス後ユーザ名とパスワードを入力します。デフォルトユーザ名はadmin、パスワードはsecretです。

Note)
wpa_supplicantをソースからコンパイル・インストールした場合、wpa_cliのパス/usr/local/bin/wpa_cli となります。

https://w1.fi/wpa_supplicant/

RapaAPマニュアルインストール

Orange Pi PCにRaspAPをマニュアルインストール

導入条件

  • Armbian 21.02.3 Buster with Linux 5.10.21-sunxi
  • Orange Pi PCを以下の手順によりルータ化済のこと

RaspAPドキュメント
https://docs.raspap.com/manual/

USB WiFiドングルRTL8188のAPモードを有効にしてルータ化したOrange Pi PCにRaspAPを導入します。ルータ化する際に設定したネットワーク環境などと整合性をとるため、まず初めにconfigフォルダの内容を変更、その後インストール作業に移行します。

configファイルの変更

Orange Pi PCのルータ化で、ネットワークインターフェイスwlan1をアクセスポイントとして指定しているため、wlan0からwlan1、dhcp-rangeなども併せて変更します。

config/090_wlan0.conf ファイル名を090_wlan1.confへ変更するかどうかは任意。

# RaspAP wlan1 configuration for wired (ethernet) AP mode
interface=wlan1
domain-needed
dhcp-range=11.22.33.44,11.22.33.150,255.255.255.0,12h
dhcp-option=8.8.8.8,1.1.1.1

config/config.php

.....
.....
define('RASPI_WIFI_AP_INTERFACE', 'wlan1');
.....
.....

config/defaults.json アクセスポイントをwlan1のみで指定する場合、wlan0のセクションは必要ありません。

{
  "dhcp": {
    "wlan1": { 
      "static ip_address": [ "11.22.33.44/24" ],
      "static routers": [ "11.22.33.44" ],
      "static domain_name_server": [ "1.1.1.1 8.8.8.8" ],
      "subnetmask": [ "255.255.255.0" ]
    },
    "wlan0": {
      "static ip_address": [ "192.168.10.10/24" ],
      "static routers": [ "192.168.10.1" ],
      "static domain_name_server": [ "1.1.1.1 8.8.8.8" ],
      "subnetmask": [ "255.255.255.0" ]
    },
    "options": {
      "# RaspAP default configuration": null,
      "hostname": null,
      "clientid": null,
      "persistent": null,
      "option rapid_commit": null,
      "option domain_name_servers, domain_name, domain_search, host_name": null,
      "option classless_static_routes": null,
      "option ntp_servers": null,
      "require dhcp_server_identifier": null,
      "slaac private": null,
      "nohook lookup-hostname": null
    }
  },
  "dnsmasq": {
    "wlan1": {
      "dhcp-range": [ "11.22.33.44,11.22.33.150,255.255.255.0,12h" ]
    },
    "wlan0": {
      "dhcp-range": [ "192.168.10.50,192.168.10.150,12h" ]
    }
  }
}

config/dhcpcd.conf DHCPクライアントの設定。インターネットへ接続しているルータのDHCPサーバから割当てられるIPアドレスを、ルータで設定したIPアドレス範囲内で指定。

.....
.....
# RaspAP default configuration
.....
.....

# RaspAP wlan0 configuration
interface wlan0
static ip_address=192.168.0.xx/24
static routers=192.168.0.1
static domain_name_server=192.168.0.1 1.1.1.1

関連パッケージのインストール・ファイルコピー

既にインストール済のパッケージが幾つかあるかもしれませんが、以下インストールします。

$ sudo apt-get install dhcpcd5 lighttpd git hostapd dnsmasq iptables-persistent vnstat qrencode php7.3-cgi

Lighttpdのfastcgiモジュールを有効化、設定をリロードし再起動

$ sudo lighttpd-enable-mod fastcgi-php    
$ sudo service lighttpd force-reload
$ sudo systemctl restart lighttpd.service

RaspAPをウェブサーバディレクトリへダウンロード

$ sudo git clone https://github.com/RaspAP/raspap-webgui /var/www/html

Lighttpdの拡張設定ファイルを以下の手順で作成、lighttpdの設定ディレクトリへ追加

$ WEBROOT="/var/www/html"
$ CONFSRC="$WEBROOT/config/50-raspap-router.conf"
$ LTROOT=$(grep "server.document-root" /etc/lighttpd/lighttpd.conf | awk -F '=' '{print $2}' | tr -d " \"")

$ HTROOT=${WEBROOT/$LTROOT}
$ HTROOT=$(echo "$HTROOT" | sed -e 's/\/$//')
$ awk "{gsub(\"/REPLACE_ME\",\"$HTROOT\")}1" $CONFSRC > /tmp/50-raspap-router.conf
$ sudo cp /tmp/50-raspap-router.conf /etc/lighttpd/conf-available/

上記追加した設定ファイルを有効にし、Lighttpdを再起動

$ sudo ln -s /etc/lighttpd/conf-available/50-raspap-router.conf /etc/lighttpd/conf-enabled/50-raspap-router.conf
$ sudo systemctl restart lighttpd.service

サーバユーザであるwww-dataにネットワークの管理権限を付与するため、以下のファイルを指定ディレクトリにコピーします。

$ cd /var/www/html
$ sudo cp installers/raspap.sudoers /etc/sudoers.d/090_raspap

raspap.sudoers ウェブ管理画面で変更したくない箇所はコメントアウトして下さい。

www-data ALL=(ALL) NOPASSWD:/sbin/ifdown
www-data ALL=(ALL) NOPASSWD:/sbin/ifup
www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wpa_supplicant/wpa_supplicant.conf
www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wpa_supplicant/wpa_supplicant-wlan[0-9].conf
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant.conf
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant-wlan[0-9].conf
www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] scan_results
www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] scan
www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] reconfigure
www-data ALL=(ALL) NOPASSWD:/sbin/wpa_cli -i wlan[0-9] select_network [0-9]*
# www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/hostapddata /etc/hostapd/hostapd.conf
# www-data ALL=(ALL) NOPASSWD:/bin/systemctl start hostapd.service
# www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop hostapd.service
# www-data ALL=(ALL) NOPASSWD:/bin/systemctl start dnsmasq.service
# www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop dnsmasq.service
www-data ALL=(ALL) NOPASSWD:/bin/systemctl restart dnsmasq.service
www-data ALL=(ALL) NOPASSWD:/bin/systemctl start openvpn-client@client
www-data ALL=(ALL) NOPASSWD:/bin/systemctl enable openvpn-client@client
www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop openvpn-client@client
www-data ALL=(ALL) NOPASSWD:/bin/systemctl disable openvpn-client@client
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/ovpnclient.ovpn /etc/openvpn/client/client.conf
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/authdata /etc/openvpn/client/login.conf
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasqdata /etc/dnsmasq.d/090_*.conf
www-data ALL=(ALL) NOPASSWD:/bin/rm /etc/dnsmasq.d/090_*.conf
# www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dhcpddata /etc/dhcpcd.conf
www-data ALL=(ALL) NOPASSWD:/sbin/shutdown -h now
www-data ALL=(ALL) NOPASSWD:/sbin/reboot
www-data ALL=(ALL) NOPASSWD:/sbin/ip link set wlan[0-9] down
www-data ALL=(ALL) NOPASSWD:/sbin/ip link set wlan[0-9] up
www-data ALL=(ALL) NOPASSWD:/sbin/ip -s a f label wlan[0-9]
# www-data ALL=(ALL) NOPASSWD:/bin/cp /etc/raspap/networking/dhcpcd.conf /etc/dhcpcd.conf
www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/enablelog.sh
www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/disablelog.sh
# www-data ALL=(ALL) NOPASSWD:/etc/raspap/hostapd/servicestart.sh
www-data ALL=(ALL) NOPASSWD:/etc/raspap/lighttpd/configport.sh
www-data ALL=(ALL) NOPASSWD:/etc/raspap/openvpn/configauth.sh
www-data ALL=(ALL) NOPASSWD:/bin/chmod o+r /tmp/hostapd.log
www-data ALL=(ALL) NOPASSWD:/bin/chmod o+r /tmp/dnsmasq.log
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasqdata /etc/dnsmasq.d/090_adblock.conf
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasq_custom /etc/raspap/adblock/custom.txt
www-data ALL=(ALL) NOPASSWD:/etc/raspap/adblock/update_blocklist.sh

RaspAP専用ディレクトリの作成

$ sudo mkdir /etc/raspap/
$ sudo mkdir /etc/raspap/backups
$ sudo mkdir /etc/raspap/networking
$ sudo mkdir /etc/raspap/hostapd
$ sudo mkdir /etc/raspap/lighttpd

ユーザ認証用phpファイルのコピー

$ sudo cp raspap.php /etc/raspap 

サーバディレクトリのパーミッションを設定

$ sudo chown -R www-data:www-data /var/www/html
$ sudo chown -R www-data:www-data /etc/raspap

hostapdシェルスクリプトの移動とパーミッションの設定

$ sudo mv installers/*log.sh /etc/raspap/hostapd 
$ sudo mv installers/service*.sh /etc/raspap/hostapd
$ sudo chown -c root:www-data /etc/raspap/hostapd/*.sh 
$ sudo chmod 750 /etc/raspap/hostapd/*.sh 

Lighttpdシェルスクリプトのコピーとパーミッションの設定

$ sudo cp installers/configport.sh /etc/raspap/lighttpd
$ sudo chown -c root:www-data /etc/raspap/lighttpd/*.sh

デフォルトファイルの配置

初めに内容を変更した各種設定ファイルは、デフォルトの設定ファイルとして利用します。

$ sudo cp config/090_raspap.conf /etc/dnsmasq.d/090_raspap.conf
$ sudo cp config/090_wlan0.conf /etc/dnsmasq.d/090_wlan0.conf
$ sudo cp config/dhcpcd.conf /etc/dhcpcd.conf
$ sudo cp config/config.php /var/www/html/includes/
$ sudo cp config/defaults.json /etc/raspap/networking/

その他オプションについてはドキュメントを参照して下さい。

以下テーマ変更後の表示例です。
http://192.168.1.xx
about

hotspot dashboard wifi_clients