nogo
What?
nogo
blocks access to various sites (ads, tracking, porn, gambling, etc) by
acting as a DNS proxy server with host blacklist support.
Why?
I wanted an open source ad blocker solution that was more universal than a
browser plugin, and:
- Was easy to utilize with unrooted mobile devices (so that battery life could
be conserved).
- Had a basic web control panel and API for adding, removing, and "pausing"
hosts.
- Provided straightforward cross-platform support and acceptable performance (so
that I could run it from my Raspberry Pi).
- Could be used as a master host "blacklist" service for network-wide ad
blocking (e.g. by configuring the DNS on my router to point to
nogo
).
How?
You may simply download a binary release
for your platform, or you can follow the steps below to build from source:
-
Install Go (v1.8 or later is required).
-
Clone the repo, then cd
into it.
-
Install the dependencies by running make deps
. Or if you don't have make
:
go get github.com/miekg/dns
go get github.com/boltdb/bolt
go get github.com/pressly/chi
-
Build the app by running make
. Or if you don't have make
: go build
-
Run the app: sudo ./nogo
Note:
- Since
nogo
binds to port :53
by default, it must be given access to
"privileged" ports (e.g. via setuid
or sudo
).
- Run with the
-help
switch for information on additional runtime options
(such as disabling or password protecting the web control panel).
Important post-install steps:
1. You must add hosts to the blacklist.
nogo
doesn't ship with a built-in blacklist, so it won't block any hosts until
you add them.
There are currently two methods for adding hosts to the blacklist:
-
Navigate to the web control panel (default: http://localhost:8080/) and
add a host using the form.
-
Download a popular hosts list file (e.g. pick one from the list at
https://github.com/StevenBlack/hosts), and execute nogo
with the
-import
switch on its first run.
Your computer/mobile device/etc is probably set up by default to utilize a DNS
server which allows connections to any host. Unless you update your DNS
configuration to point to nogo
(and only to nogo
), nothing will change.
For those of you who may be unfamiliar with how to update your DNS
configuration, check out Google's guide for their DNS service here:
https://developers.google.com/speed/public-dns/docs/using
You can follow their instructions, but don't forget to substitute their DNS
service IP addresses with the sole IP address of the machine running nogo
.
Known Issues and Limitations
- The DNS proxy server utilizes a fairly basic configuration, so advanced
features such as EDNS and DNSSEC are not currently supported.
- Due to the fact that the web control panel utilizes a few modern techniques
(such as flexbox and the Fetch API), you may experience some issues
with its interface on non-current browsers.
Who?
My name is Seth and I've been talking to machines in various languages since the
early 90s. If you find this useful and want to say thanks, feel free to
tweet me, buy me a beer, share some Satoshi, or pass
my resume on to someone you know who is tackling interesting problems with
software.
Copyright (c) 2017 Seth Davis