OpenWrt
OpenWrt is an open source project for embedded operating systems based on Linux, primarily used on embedded devices to route network traffic. The main components are Linux, util-linux, musl, and BusyBox. All components have been optimized to be small enough to fit into the limited storage and memory available in home routers.
OpenWrt is configured using a command-line interface, or a web interface. There are about 3500 optional software packages available for installation via the opkg package management system.
OpenWrt can run on various types of devices, including CPE routers, residential gateways, smartphones, pocket computers, and laptops. It is also possible to run OpenWrt on personal computers, which are most commonly based on the x86 architecture.
History
The OpenWrt project was started in 2004 after Linksys had built the firmware for their WRT54G series of wireless routers with code licensed under the GNU General Public License. Under the terms of that license, Linksys was required to make the source code of its modified version available under the same license, which enabled independent developers to create derivative versions. Support was originally limited to the WRT54G series, but has since been expanded to include many other routers and devices from many different manufacturers.Using this code as a base and later as a reference, developers created a Linux distribution that offers many features not previously found in consumer-level routers. Some features formerly required proprietary software. Before the introduction of OpenWrt 8.09, using Linux 2.6.25 and the
b43
kernel module, WLAN for many Broadcom-based routers was only available through the proprietary wl.o
module that was also provided for Linux 2.4.x only.OpenWrt releases were historically named after cocktails, such as White Russian, Kamikaze, Backfire, Attitude Adjustment, Barrier Breaker and Chaos Calmer, and their recipes were included in the message of the day displayed after logging in using the command-line interface.
In May 2016, OpenWrt was forked by a group of core OpenWrt contributors due to disagreements on internal process. The fork was dubbed Linux Embedded Development Environment. The schism was reconciled a year later. Following the remerger, announced in January 2018, the OpenWrt branding is preserved, with many of the LEDE processes and rules used. The LEDE project name was used for v17.01, with development versions of 18.01 branded OpenWrt, dropping the original cocktail based naming scheme.
Releases
LEDE
The Linux Embedded Development Environment project was a fork of the OpenWrt project and shared many of the same goals. It was created in May 2016 by a group of core OpenWrt contributors due to disagreements on OpenWrt internal processes. The schism was nominally reconciled a year later in May 2017 pending approval of the LEDE developers. The remerger preserves the OpenWrt branding, but uses many of the LEDE processes and rules. The remerge proposal vote was passed by LEDE developers in June 2017, and formally announced in January 2018. Merging process was completed before OpenWRT 18.06 release.Version | Release Date | Revision Number | Notes |
17.01.0 | r3205 | First stable release | |
17.01.1 | r3316 | Kernel 4.4.61, bug fixes and enhancements | |
17.01.2 | r3435 | Kernel 4.4.71, security fixes | |
17.01.3 | r3534 | Kernel 4.4.89, security fixes | |
17.01.4 | r3560 | Kernel 4.4.92, security fixes | |
17.01.5 | r3919 | Kernel 4.4.140, security fixes | |
17.01.6 | r3979 | Kernel 4.4.153, security fixes |
Features
OpenWrt features a writeable root file system, enabling users to modify any file and easily install additional software. This is in contrast with other firmware based on read-only file systems which don't allow modifying installed software without rebuilding and flashing a complete firmware image. This is accomplished by overlaying a read-only compressed SquashFS file system with a writeable JFFS2 file system using overlayfs. Additional software can be installed with the opkg package manager and the package repository contains approximately 6000 packages.OpenWrt can be configured through either a command-line interface or a web interface called LuCI. OpenWrt provides set of scripts called UCI to unify and simplify configuration through the command-line interface. Additional web interfaces, such as Gargoyle, are also available.
OpenWrt provides regular bug fixes and security updates even for devices that are no longer supported by their manufacturers.
OpenWrt provides exhaustive possibilities to configure common network-related features, like IPv4, IPv6, DNS, DHCP, routing, firewall, NAT, port forwarding and WPA.
Other features include:
- Extensible configuration of the entire hardware drivers, e.g. built-in network switches and their VLAN-capabilities, WNICs, DSL modems, FX, available hardware buttons, etc.
- Mesh networking through B.A.T.M.A.N., OLSR and IEEE 802.11s-capabilities of the WNIC drivers and other ad hoc mesh routing protocols that have been implemented within Linux.
- Wireless functionality, e.g. make the device act as a wireless repeater, a wireless access point, a wireless bridge, a captive portal, or a combination of these with e.g. ChilliSpot, WiFiDog Captive Portal, etc.
- Wireless security: Packet injection, e.g. , lorcon, e.a.
- Dynamically-configured port forwarding protocols UPnP and NAT-PMP through upnpd, etc.
- Port knocking
- TR-069 client
- IPS via Snort
- Active queue management through the network scheduler of the Linux kernel, with many available queuing disciplines. CoDel has been backported to Kernel 3.3. This encapsulates Traffic shaping to ensure fair distribution of bandwidth among multiple users and Quality of Service for simultaneous use of applications such as VoIP, online gaming, and streaming media without experiencing the negative impacts of link saturation.
- Load balancing for use with multiple ISPs using source-specific routing
- IP tunneling
- Extensible realtime network monitoring and statistics through e.g. RRDtool, Collectd, Nagios, Munin lite, Zabbix, etc.
- Dynamic DNS services to maintain a fixed domain name with an ISP that does not provide a static IP address
- OpenWrt supports any hardware that has Linux support; devices that can be connected to an embedded device include
- * Printers
- * Mobile broadband modems
- * Webcams
- * Sound cards
- Notable software packages to use the hardware support are:
- * File sharing via SAMBA,, NFS, FTP, SFTP. Printer sharing over the print server CUPS or p910nd
- * PulseAudio, Music Player Daemon, Audio/Video streaming via DLNA/UPnP AV standards, iTunes server
- * Asterisk
- * MQ Telemetry Transport through Mosquitto
Development
Embedded devices usually use a different processor than the one found in host computers used for building their OpenWrt system images, requiring a cross-compilation toolchain. Such a compilation toolchain runs on a host system, but generates code for a targeted embedded device and its processor's instruction set architecture. For example, if a host system uses x86 and a target system uses MIPS32, the regular compilation toolchain of the host runs on x86 and generates code for x86 architecture, while the cross-compilation toolchain runs on x86 and generates code for the MIPS32 architecture. OpenWrt Buildroot automates this whole process to work on the instruction set architectures of most embedded devices and host systems.
OpenWrt Buildroot provides the following features:
- Makes it easy to port software across architectures
- Uses kconfig for the configuration of all options
- Provides an integrated cross-compiler toolchain
- Provides an abstraction for autotools, cmake and SCons
- Handles standard OpenWrt image build workflow: downloading, patching, configuration, compilation and packaging
- Provides a number of common fixes for known badly behaving packages
Hardware compatibility
OpenWrt runs many different routers, and includes a table of compatible hardware on its website. In its buyer's guide, it notes that users recommend devices equipped with wireless chips from either Qualcomm's Atheros or Ralink. OpenWrt also recommends choosing a device with a minimum of 8MB of flash and 64MB of RAM, preferably higher amounts.Adoption
OpenWrt, especially its Buildroot build system, has been adopted many times:- "one-time-fee-only" replacement for Cloudtrax.
- Freifunk and other mesh network communities
- Bufferbloat.net
- SIMET Box, developed by NIC.br, is OpenWrt-based
- IETF IPv6 integration projects HIPnet and HomeNet are OpenWrt-based
Derivatives
- AREDN The Amateur Radio Emergency Data Network uses a firmware based on OpenWrt:
- CeroWrt with a purpose to complement the debloat-testing kernel tree and provide a platform for real-world testing of bufferbloat fixes
- Coova chilli OpenWrt-based with focus on wireless hotspots, a fork of chillifire with focus on wireless hotspot management
- Flukso Wireless sensor nodes using an Atheros AR2317 chipset running a patched OpenWrt OS for communication. Sources and hardware schematics available on GitHub.
- Fon OpenWrt-based wireless routers acting as hotspots. Sources and toolchain available on fonosfera.org
- Gargoyle a web interface for OpenWrt with a strong emphasis on usability that later forked into a separate distribution
- Gluon Framework for building OpenWrt-based firmwares fitted for mesh network deployment:
- libreCMC OpenWrt-based distribution which excludes non-free software or binary blobs, endorsed by the Free Software Foundation
- Linino OpenWrt-based distribution for the MIPS-based Arduino Yùn:
- Midge Linux an OpenWrt-based distribution for devices based on Infineon Technologies ADM-5120 SoCs, such as Edimax BR-6104K and BR-6104KP.
- OpenSAN iSCSI target Storage Area Network realization.
- PacketProtector OpenWrt-based security distribution that includes IDS, IPS, VPN, and web antivirus capabilities. Packages included Snort, Snort-inline, FreeRADIUS, OpenVPN, DansGuardian and ClamAV. These tools were accessible via the old web GUI management interface of OpenWrt, called X-Wrt or webif^2. Project ended on June 7, 2012.
- Qualcomm's QCA Software Development Kit which is being used as a development basis by many OEMs is an OpenWrt derivative
- The Turris Omnia and Turris MOX routers run on an OpenWrt derivative
- Ubiquiti's wireless router firmwares are based on OpenWrt
- Diverse grassroots projects for wireless community networks, including Freifunk, Libre-Mesh and qMp
- JUCIWRT a modern distribution using the JUCI webgui that later became an OpenWRT feed instead. The source code for JUCI is available at https://github.com/mkschreder/juci and is still usable by installing openwrt feed found at https://github.com/mkschreder/juci-openwrt-feed
- RutOS an operating system for all Teltonika routers and based on OpenWRT. The source code for RutOS is available at https://wiki.teltonika-networks.com/view/GPL.