0. The Nodogsplash project

Nodogsplash offers a simple way to open a free hotspot providing restricted access to an internet connection. It is intended for use on wireless access points running OpenWRT (but may also work on other Linux-based devices).

Its functionality is similar to Nocatsplash, but it is derived from the codebase of the Wifi Guard Dog project. Nodogsplash is released under the GNU General Public License.

The following describes how Nodogsplash works, how to get it and run it, and how to customize its behavior for your application.

1. Overview

A simple hotspot controller like Nodogsplash is a solution to this problem: You want to provide controlled and reasonably secure public access to an internet connection; and while you want to require users to give some acknowledgment of the service you are providing, you don't need or want the complexity of user account names and passwords and maintaining a separate database-backed authentication server.

When installed and running, Nodogsplash implements a simple 'authentication' process. First, it detects any user attempting to use your internet connection to visit a website. It captures the request, and instead serves back a 'splash' web page using its own builtin libhttpd-based web server. The splash page provides a link which, when the user clicks on it, opens limited access for them to the internet via your connection, beginning by being redirected to their originally requested website. This access expires after a certain time interval.

Specific features of Nodogsplash are configurable, by editing the configuration file and the splash page. The default installed configuration may be all you need, though.

2. Installing and running nodogsplash

3. How nodogsplash works

A wireless router running OpenWRT has two or more interfaces; nodogsplash manages one of them. This will typically be eth1, which is conventionally bridged to both the wireless and wired LAN, or just the wireless LAN if the br0 bridge has been broken.

3.1 Packet filtering

Nodogsplash considers four kinds of packets coming into the router over the managed interface:
  1. Blocked, if the source MAC address of the packet matches one listed in the BlockedMACList in the configuration file. These packets are dropped. (Caveat: this is not a particularly secure mechanism, since MAC addresses are easy to spoof.)
  2. Trusted, if the source MAC address of the packet matches one listed in the TrustedMACList in the configuration file. These packets are accepted and routed to any destination address and port. (Caveat: this is not a particularly secure mechanism, since MAC addresses are easy to spoof.)
  3. Authenticated, if the packet's IP and MAC source address has gone through the nodogsplash authentication process and has not yet expired. These packets are accepted and routed to a limited set of addresses and ports (see FirewallRuleSet authenticated-users in the nodogsplash.conf configuration file).
  4. Unknown. Any other packet. These packets are accepted only to DHCP and DNS ports on the router, and to the DNS port at other addresses. Any other packet is dropped, except that a packet for destination port 80 at any address is redirected to port 2050 on the router, where nodogsplash's builtin web server is listening. This begins the 'authentication' process. The server will serve a splash page back to the source IP address of the packet. The user clicking the appropriate link on the splash page will complete the process, causing future packets from this IP/MAC address to be marked as Authenticated until the inactive or forced timeout is reached, and its packets revert to being Unknown.
Nodogsplash implements these actions by inserting rules in the router's iptables mangle PREROUTING table to mark packets, and by inserting rules in the nat PREROUTING, filter INPUT and filter FORWARD chains which match on those marks. Because it inserts its rules at the beginning of existing chains, nodogsplash should be insensitive to almost any existing firewall configuration.

3.2 Traffic control

Nodogsplash also optionally implements basic traffic control on its managed interface. This feature lets you specify the maximum aggregate upload and download bandwidth that can be taken by clients connected on that interface. This is done with simple rate-limited HTB qdiscs attached to intermediate queue devices; no packet classification or fairness queueing is done.

4. Customizing nodogsplash

The default shipped configuration is intended to be usable and reasonably secure as-is for basic internet sharing applications, but it is customizable.

5. Debugging nodogsplash


Email contact: nodogsplash (at) kokoro.ucsd.edu