raspap-webgui-mirror/README.md

258 lines
14 KiB
Markdown
Raw Normal View History

2019-06-11 10:37:29 +00:00
![](https://i.imgur.com/xeKD93p.png)
2019-12-01 11:16:51 +00:00
# `$raspap` [![Release 2.1](https://img.shields.io/badge/Release-2.1-green.svg)](https://github.com/billz/raspap-webgui/releases) [![Awesome](https://awesome.re/badge.svg)](https://github.com/thibmaek/awesome-raspberry-pi) [![Sponsor](https://img.shields.io/badge/sponsor-%F0%9F%92%96-green)](https://github.com/sponsors/billz)
2018-09-22 11:02:02 +00:00
2017-11-06 16:09:38 +00:00
A simple, responsive web interface to control wifi, hostapd and related services on the Raspberry Pi.
2015-02-27 15:10:52 +00:00
2019-12-14 12:28:35 +00:00
This project was inspired by a [blog post](http://sirlagz.net/2013/02/06/script-web-configuration-page-for-raspberry-pi/) by SirLagz about using a web page rather than ssh to configure wifi and hostapd settings on the Raspberry Pi. I began by prettifying the UI by wrapping it in [SB Admin 2](https://github.com/BlackrockDigital/startbootstrap-sb-admin-2), a Bootstrap based admin theme. Since then, the project has evolved to include greater control over many aspects of a networked RPi, better security, authentication, a Quick Installer, support for OpenVPN, themes and more. RaspAP has been featured on sites such as [Instructables](http://www.instructables.com/id/Raspberry-Pi-As-Completely-Wireless-Router/), [Adafruit](https://blog.adafruit.com/2016/06/24/raspap-wifi-configuration-portal-piday-raspberrypi-raspberry_pi/), [Raspberry Pi Weekly](https://www.raspberrypi.org/weekly/commander/) and [Awesome Raspberry Pi](https://project-awesome.org/thibmaek/awesome-raspberry-pi) and implemented in countless projects.
2015-02-27 16:18:06 +00:00
We'd be curious to hear about how you use this with [your own RPi-powered projects](https://github.com/billz/raspap-awesome). Until then, here are some screenshots:
2015-02-27 15:10:52 +00:00
2019-11-18 12:58:33 +00:00
![](https://i.imgur.com/fwekyGE.gif)
2019-11-01 17:29:44 +00:00
![](https://i.imgur.com/EiIpdOS.gif)
![](https://i.imgur.com/eCjUS1H.gif)
![](https://i.imgur.com/5FT2BcS.gif)
![](https://i.imgur.com/RKaBFrZ.gif)
2015-02-27 15:10:52 +00:00
## Contents
2015-03-11 10:34:35 +00:00
- [Prerequisites](#prerequisites)
2016-06-16 15:02:47 +00:00
- [Quick installer](#quick-installer)
2019-04-09 19:56:19 +00:00
- [Simultaneous AP and Wifi client](#simultaneous-ap-and-wifi-client)
2019-03-11 22:38:42 +00:00
- [Support us](#support-us)
2016-06-16 15:02:47 +00:00
- [Manual installation](#manual-installation)
2018-06-01 18:19:07 +00:00
- [Multilingual support](#multilingual-support)
2019-07-30 00:36:54 +00:00
- [HTTPS support](#https-support)
2019-11-18 12:44:02 +00:00
- [OpenVPN support](#openvpn-support)
2015-02-27 15:10:52 +00:00
- [How to contribute](#how-to-contribute)
2019-04-13 16:08:21 +00:00
- [Reporting issues](#reporting-issues)
2015-03-11 11:17:03 +00:00
- [License](#license)
2015-02-27 15:10:52 +00:00
2015-03-11 10:34:35 +00:00
## Prerequisites
2019-06-28 08:08:32 +00:00
Start with a clean install of the [latest release of Raspbian](https://www.raspberrypi.org/downloads/raspbian/) (currently Buster). Raspbian Buster Lite is recommended.
2015-03-11 10:34:35 +00:00
2019-03-06 00:34:34 +00:00
1. Update Raspbian, including the kernel and firmware, followed by a reboot:
```
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
```
2. Set the WiFi country in raspi-config's **Localisation Options**: `sudo raspi-config`
2015-03-11 10:34:35 +00:00
2019-03-06 00:34:34 +00:00
3. If you have an older Raspberry Pi without an onboard WiFi chipset, the [**Edimax Wireless 802.11b/g/n nano USB adapter**](https://www.edimax.com/edimax/merchandise/merchandise_detail/data/edimax/global/wireless_adapters_n150/ew-7811un) is an excellent option it's small, cheap and has good driver support.
2015-03-11 10:34:35 +00:00
2019-03-06 00:34:34 +00:00
With the prerequisites done, you can proceed with either the Quick installer or Manual installation steps below.
2015-03-11 11:17:03 +00:00
2016-06-16 15:02:47 +00:00
## Quick installer
Install RaspAP from your RaspberryPi's shell prompt:
```sh
2019-11-19 21:36:46 +00:00
curl -sL https://install.raspap.com | bash
2016-06-16 15:02:47 +00:00
```
The [installer](https://github.com/billz/raspap-webgui/wiki/Quick-Installer-usage) will complete the steps in the manual installation (below) for you.
2016-06-16 15:02:47 +00:00
2016-10-23 20:39:22 +00:00
After the reboot at the end of the installation the wireless network will be
configured as an access point as follows:
* IP address: 10.3.141.1
* Username: admin
* Password: secret
2016-10-23 20:39:22 +00:00
* DHCP range: 10.3.141.50 to 10.3.141.255
* SSID: `raspi-webgui`
* Password: ChangeMe
2019-04-17 20:14:14 +00:00
**Note:** As the name suggests, the Quick Installer is a great way to quickly setup a new AP. However, it does not automagically detect the unique configuration of your RPi. Best results are obtained by connecting an RPi to ethernet (`eth0`) or as a WiFi client, also known as managed mode, with `wlan0`. For the latter, refer to [this FAQ](https://github.com/billz/raspap-webgui/wiki/FAQs#how-do-i-prepare-the-sd-card-to-connect-to-wifi-in-headless-mode). Please [read this](https://github.com/billz/raspap-webgui/wiki/Reporting-issues) before reporting an issue.
2019-04-16 13:47:42 +00:00
2019-04-09 19:56:19 +00:00
## Simultaneous AP and Wifi client
2019-04-17 20:14:14 +00:00
RaspAP lets you easily create an AP with a Wifi client configuration. With your RPi configured in managed mode, enable the AP from the **Advanced** tab of **Configure hotspot** by sliding the **Wifi client AP mode** toggle. Save settings and start the hotspot. The managed mode AP is functional without restart.
2019-04-09 19:56:19 +00:00
2019-11-01 18:12:31 +00:00
![](https://i.imgur.com/YObvd32.gif)
2019-04-09 19:56:19 +00:00
2019-12-13 15:27:53 +00:00
**Note:** This option is disabled until you configure your RPi as a wireless client. For a Raspberry Pi operating in [managed mode](https://github.com/billz/raspap-webgui/wiki/FAQs#how-do-i-prepare-the-sd-card-to-connect-to-wifi-in-headless-mode) without an `eth0` connection, this configuration must be enabled _before_ a reboot.
2019-04-15 07:18:20 +00:00
2019-03-11 22:38:42 +00:00
## Support us
2019-10-31 19:48:16 +00:00
RaspAP is free software, but powered by your support. If you find RaspAP useful for your personal or commercial projects, please [become a sponsor](https://github.com/sponsors/billz) or make a one-time donation with [Beerpay](https://beerpay.io/billz/raspap-webgui). Either option makes a big difference!
2019-03-11 22:38:42 +00:00
2019-10-31 19:48:16 +00:00
[![Beerpay](https://beerpay.io/billz/raspap-webgui/badge.svg)](https://beerpay.io/billz/raspap-webgui)
2019-06-29 08:14:25 +00:00
2016-06-16 15:02:47 +00:00
## Manual installation
2019-06-28 08:12:07 +00:00
These steps apply to the latest release of Raspbian (currently [Buster](https://www.raspberrypi.org/downloads/raspbian/)). Notes for previously released versions are provided, where applicable. Start off by installing git, lighttpd, php7, hostapd and dnsmasq.
2015-02-27 15:10:52 +00:00
```sh
2019-06-28 08:12:07 +00:00
sudo apt-get install git lighttpd php7.1-cgi hostapd dnsmasq vnstat
2015-02-27 15:10:52 +00:00
```
2019-06-28 08:12:07 +00:00
**Note:** for Raspbian Stretch, replace `php7.1-cgi` with `php7.0-cgi`. For Raspbian Jessie and older versions, use `php5-cgi`. After that, enable PHP for lighttpd and restart it for the settings to take effect.
2015-02-27 15:10:52 +00:00
```sh
2017-11-17 07:11:18 +00:00
sudo lighttpd-enable-mod fastcgi-php
2016-10-22 21:02:39 +00:00
sudo service lighttpd restart
2015-02-27 15:10:52 +00:00
```
2015-02-27 23:31:34 +00:00
Now comes the fun part. For security reasons, the `www-data` user which lighttpd runs under is not allowed to start or stop daemons, or run commands like ifdown and ifup, all of which we want our page to do.
2019-04-10 09:16:04 +00:00
So what I have done is added the `www-data` user to the sudoers file, but with restrictions on what commands the user can run. Add the following to the end of `/etc/sudoers`:
2015-02-27 15:10:52 +00:00
```sh
2019-04-10 09:16:04 +00:00
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
2019-04-10 09:12:32 +00:00
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
2019-04-10 09:12:32 +00:00
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
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 start openvpn-client@client
www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop openvpn-client@client
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/openvpn.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.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
2019-04-10 09:12:32 +00:00
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]
2017-11-17 07:11:18 +00:00
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
2019-04-10 09:12:32 +00:00
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
2015-02-27 15:10:52 +00:00
```
2015-02-27 16:38:09 +00:00
2016-08-31 08:45:00 +00:00
Once those modifications are done, git clone the files to `/var/www/html`.
**Note:** for older versions of Raspbian (before Jessie, May 2016) use
2016-08-31 08:48:56 +00:00
`/var/www` instead.
2015-02-27 16:38:09 +00:00
```sh
2016-08-31 08:45:00 +00:00
sudo rm -rf /var/www/html
sudo git clone https://github.com/billz/raspap-webgui /var/www/html
2015-02-27 16:38:09 +00:00
```
2019-04-24 22:24:26 +00:00
Move the high-res favicons to the web root.
```
2019-10-10 19:06:03 +00:00
sudo mv /var/www/html/app/icons/* /var/www/html
2019-04-24 22:24:26 +00:00
```
2015-02-27 16:38:09 +00:00
Set the files ownership to `www-data` user.
```sh
2016-08-31 08:45:00 +00:00
sudo chown -R www-data:www-data /var/www/html
2015-02-27 16:38:09 +00:00
```
2019-04-24 22:24:26 +00:00
Move the RaspAP configuration file to the correct location.
2016-05-29 15:38:43 +00:00
```sh
sudo mkdir /etc/raspap
2016-08-31 08:45:00 +00:00
sudo mv /var/www/html/raspap.php /etc/raspap/
sudo chown -R www-data:www-data /etc/raspap
2016-05-29 15:38:43 +00:00
```
2019-07-08 22:20:18 +00:00
Move the HostAPD logging and service control shell scripts to the correct location.
2017-11-17 07:11:18 +00:00
```sh
sudo mkdir /etc/raspap/hostapd
sudo mv /var/www/html/installers/*log.sh /etc/raspap/hostapd
2019-07-08 22:20:18 +00:00
sudo mv /var/www/html/installers/service*.sh /etc/raspap/hostapd
```
Set ownership and permissions for logging and service control scripts.
```sh
sudo chown -c root:www-data /etc/raspap/hostapd/*.sh
sudo chmod 750 /etc/raspap/hostapd/*.sh
2017-11-17 07:11:18 +00:00
```
2019-04-10 09:12:32 +00:00
Add the following lines to `/etc/rc.local` before `exit 0`.
```sh
echo 1 > /proc/sys/net/ipv4/ip_forward #RASPAP
iptables -t nat -A POSTROUTING -j MASQUERADE #RASPAP
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE #RASPAP
```
2019-04-10 09:18:44 +00:00
Force a reload of new settings in `/etc/rc.local`.
2019-04-10 09:12:32 +00:00
```sh
sudo systemctl restart rc-local.service
sudo systemctl daemon-reload
```
2019-04-10 09:16:04 +00:00
Unmask and enable the hostapd service.
```sh
sudo systemctl unmask hostapd.service
sudo systemctl enable hostapd.service
```
2019-04-21 18:27:06 +00:00
Move the raspap service to the correct location and enable it.
```
sudo mv /var/www/html/installers/raspap.service /lib/systemd/system
sudo systemctl enable raspap.service
```
Copy the configuration files for dhcpcd, dnsmasq, and hostapd.
```
sudo mv /var/www/html/config/default_hostapd /etc/default/hostapd
sudo mv /var/www/html/config/hostapd.conf /etc/hostapd/hostapd.conf
sudo mv /var/www/html/config/dnsmasq.conf /etc/dnsmasq.conf
sudo mv /var/www/html/config/dhcpcd.conf /etc/dhcpcd.conf
sudo mv /var/www/html/config/config.php /var/www/html/includes/
```
(Optional) Optimize PHP
```
sudo sed -i -E 's/^session\.cookie_httponly\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/session.cookie_httponly = 1/' /etc/php/7.1/cgi/php.ini
sudo sed -i -E 's/^;?opcache\.enable\s*=\s*(0|([O|o]ff)|([F|f]alse)|([N|n]o))\s*$/opcache.enable = 1/' /etc/php/7.1/cgi/php.ini
sudo phpenmod opcache
```
2015-02-27 16:38:09 +00:00
Reboot and it should be up and running!
```sh
sudo reboot
```
2015-03-11 11:17:03 +00:00
2016-05-29 15:38:43 +00:00
The default username is 'admin' and the default password is 'secret'.
2018-06-01 18:19:07 +00:00
## Multilingual support
RaspAP uses [GNU Gettext](https://www.gnu.org/software/gettext/) to manage multilingual messages. In order to use RaspAP with one of our supported translations, you must configure a corresponding language package on your RPi. To list languages currently installed on your system, use `locale -a` at the shell prompt. To generate new locales, run `sudo dpkg-reconfigure locales` and select any other desired locales. Details are provided on our [wiki](https://github.com/billz/raspap-webgui/wiki/Translations#raspap-in-your-language).
The following translations are currently maintained by the project:
2018-06-16 21:48:00 +00:00
- Deutsch
2018-06-01 18:19:07 +00:00
- Français
- Italiano
- Português
- Svenska
- Nederlands
2018-10-17 15:56:21 +00:00
- 简体中文 (Chinese Simplified)
2019-10-30 07:14:08 +00:00
- Indonesian
- 한국어 (Korean)
- 日本語 (Japanese)
- Tiếng Việt (Vietnamese)
2018-11-04 17:02:04 +00:00
- Čeština
2018-11-19 17:26:44 +00:00
- Русский
2019-01-13 08:56:48 +00:00
- Español
2019-03-04 23:17:03 +00:00
- Finnish
- Sinhala
2019-06-10 09:37:39 +00:00
- Türkçe
2018-06-01 18:19:07 +00:00
If your language is not in the list above, why not [contribute a translation](https://github.com/billz/raspap-webgui/wiki/Translations#contributing-a-translation)? Contributors will receive credit as the original translators.
2019-07-30 00:36:54 +00:00
## HTTPS support
2019-11-08 10:14:44 +00:00
The Quick Installer may be used to [generate SSL certificates](https://github.com/billz/raspap-webgui/wiki/SSL-certificates-(Quick-Installer)) with `mkcert`. The installer automates the manual steps [described in the wiki](https://github.com/billz/raspap-webgui/wiki/SSL-(Manual-steps)), including configuring lighttpd with SSL support.
Simply append the `-c` or `--cert` option to the Quick Installer, like so:
2019-11-19 23:23:52 +00:00
```sh
curl -sL https://install.raspap.com | bash -s -- --cert
2019-11-08 10:14:44 +00:00
```
**Note**: this only installs mkcert and generates an SSL certificate with the input you provide. It does *not* (re)install RaspAP.
More information on SSL certificates and HTTPS support is available [on our wiki](https://github.com/billz/raspap-webgui/wiki/SSL-certificates-(Quick-Installer)).
2019-07-30 00:36:54 +00:00
2019-11-18 12:44:02 +00:00
## OpenVPN support
OpenVPN may be optionally installed by the Quick Installer. Once this is done, you can managage a client configuration and the `openvpn-client` service with RaspAP.
2015-03-11 11:17:03 +00:00
2019-11-18 12:44:02 +00:00
To configure an OpenVPN client, upload a valid .ovpn file and, optionally, specify your login credentials. RaspAP will store your client configuration and add firewall rules to forward traffic from OpenVPN's `tun0` interface to your configured wireless interface.
**Note**: this feature is currently in beta. Please [read this](https://github.com/billz/raspap-webgui/wiki/FAQs#-openvpn-fails-to-start-andor-i-have-no-internet-help) before reporting an issue.
2015-03-11 11:17:03 +00:00
2015-02-27 15:10:52 +00:00
## How to contribute
2019-04-10 08:57:47 +00:00
1. File an issue in the repository describing the contribution you'd like to make. This will help us get you started on the
2015-02-27 15:10:52 +00:00
right foot.
2019-04-10 08:57:47 +00:00
2. Fork the project in your account and create a new branch: `your-great-feature`.
2015-02-27 15:10:52 +00:00
3. Commit your changes in that branch.
2019-04-10 08:57:47 +00:00
4. Open a pull request, and reference the initial issue in the pull request message.
This project follows the [PSR-2](http://www.php-fig.org/psr/psr-2/) coding style guidelines. There are many ways to check your code for PSR-2. An excellent tool is [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer). The command line tool `phpcs` can be run against any single file. [Phing](https://www.phing.info/), a PHP build tool, integrates nicely with `phpcs` to automate PSR-2 checks across all source files in a project.
2015-02-27 15:10:52 +00:00
2019-04-13 16:08:21 +00:00
## Reporting issues
Please [read this](https://github.com/billz/raspap-webgui/wiki/Reporting-issues) before reporting a bug.
2015-02-27 15:10:52 +00:00
## License
2016-05-01 06:54:24 +00:00
See the [LICENSE](./LICENSE) file.