Openwalla is a modern dashboard interface for monitoring OpenWRT, built using React, TypeScript, and Tailwind CSS. Inspired by the Firewalla app, Openwalla provides a user-friendly way to visualize network activity and system performance. Inspiration came from the Firewalla app, thus the name 'Openwalla'.
This project was initially created for personal use, but I am sharing it in hopes that others find it useful. Please note: The software is currently in alpha—some features may be incomplete or non-functional. Contributions via pull requests are welcome as I work toward refining and expanding the project.
Openwalla was developed to store and analyze Netify data, allowing me to monitor IoT devices and track network traffic using the NetifyD deep packet inspection tool on OpenWRT. A custom script exports data to the router’s /www/
folder, which Openwalla scrapes every 60 seconds for analysis.
- Internet Monitoring: Periodically pings
1.1.1.1
and notifies the user of packet loss or connectivity issues. - New Device Detection: Tracks devices by scraping
/www/clientlist.html
from the router every 60 seconds. - OpenWRT System Resource Monitoring: Displays system statistics using the Netdata API.
- Bandwidth Monitoring: Hourly, daily, and monthly statistics collected via
vnstat2
and stored in SQLite. - Device Usage Tracking: Uses
nlbwmon
to collect device bandwidth data, storing results in SQLite.
Download and execute the setup script:
wget https://raw.githubusercontent.com/benisai/Openwalla/main/Router/router-setup.sh
chmod +x router-setup.sh
sh ./router-setup.sh
If you prefer manual setup, follow these steps:
- Install required packages (
netify
,nlbwmon
,vnstat2
,netdata
) via LuCI. - Configure vnstat: Ensure it monitors
br-lan
(via LuCI settings). - Modify Nlbw refresh interval: Update
/etc/config/nlbwmon
, changingrefresh_interval
from30s
to10s
. - Configure Netify: Modify its config file to listen on the router’s IP (
10.0.5.1
as an example). See OpenWRT Forum for details. - Set up periodic scripts:
- Download
1-minute.sh
, place it in/usr/bin/
, set execution permissions, and configure a crontab entry to run it every minute. - Download
nlbw-compare-rate-service.sh
(place in/etc/init.d/
), enable it, and ensure execution permissions. - Download
nlbw-compare-rate.sh
(place in/usr/bin/
), ensure execution permissions.
- Download
- Clone the repository:
git clone https://github.com/benisai/Openwalla.git cd Openwalla
- Configure environment variables in
docker-compose.yml
(Router_IP
andTZ
). - Start the project:
sudo docker-compose up -d
- The backend initializes first to fetch and store configurations in SQLite.
- The frontend starts afterward; allow 20-30 seconds for full initialization.
- Install Node.js.
- Clone/download the repository and navigate to the project directory:
git clone https://github.com/benisai/Openwalla.git cd Openwalla
- Update the router IP in
backend/configs/config.js
. - Start the backend:
cd backend npm install node server.js
- Start the frontend:
cd src npm install npm run dev
- Access the dashboard at
http://<server-ip>:8080
.
Displays system resources and bandwidth statistics.
Tracks active devices and their traffic.
Aggregated monthly/daily usage from vnstat2
.
- NetifyService: Processes network flow data.
- InternetMonitorService: Monitors internet connectivity.
- PingStatsService: Tracks network latency.
- DeviceService: Manages device tracking.
- VnstatService: Collects bandwidth usage data.
Openwalla uses SQLite databases for structured data storage:
- Configs.db - Core configuration and state.
- OpenWRT.db - Router-specific device tracking.
- Flows.db - Network flow logs.
- Notifications.db - System alerts and history.
- Vnstat.db - Bandwidth usage statistics.
- devices.db - Device(s) information.
- Frontend: React, TypeScript, Tailwind CSS, shadcn/ui, Lucide React, Recharts
- Backend: Express.js, SQLite
- Networking: NetifyD, Netdata, vnstat2, nlbwmon
- Install dependencies:
npm install
- Start the development server:
npm run dev
- Run the backend:
cd backend node server.js
- Keep components modular and maintainable.
- Use TypeScript interfaces for type safety.
- Follow existing styling and component structure.
- Ensure API requests handle errors gracefully.
- Test new features before submitting PRs.
Contributions are welcome! If you’d like to help:
- Fork the repository.
- Create a feature branch (
git checkout -b feature-name
). - Commit changes (
git commit -m "Add new feature"
). - Push to your branch (
git push origin feature-name
). - Open a pull request.
Thank you for your interest in Openwalla!