This small Go program exists to solve an annoying problem: Netflix blocks Hurricane Electric's tunnelbroker.net tunnels, which have been used to circumvent copyright laws. However, Netflix's client will prefer to use a blocked IPv6 tunnel over a native IPv4 connection, and will then error out.
This program cannot be used to circumvent Netflix's region blocking. It simply forces Netflix clients to use IPv4, which is hopefully not discriminated against.
I use an Ubiquiti EdgeRouter X as my home router, and have configured the DNS forwarder (dnsmasq) on it to forward requests for netflix.com (and associated domains) to this program, which acts as a filtering DNS proxy, removing any AAAA records for Netflix domains. While this program could run on any always-available machine on the local network, it's most convenient to run it directly on the EdgeRouter itself. (Don't run it on, eg. a VPS, because then Netflix's CDN might not geolocate you correctly and you might get slower-loading content)
The Ubiquiti EdgeRouter X uses a little-endian MIPS CPU, which is one of the architectures targeted by recent versions of the Go compiler. To build a stripped (smaller, which matters when you're on a device with 256 MB of storage) binary for the EdgeRouter X's MIPS architecture:
$ go get -ud github.com/acohn/netflix-v4
$ GOOS=linux GOARCH=mipsle go build -ldflags "-s -w" github.com/acohn/netflix-v4
Once built, scp the binary onto your EdgeRouter, into the /config persistent partition, and configure it to be started on boot. I use a script like this in the /config/scripts/post-config.d/ directory, which is automatically run on boot:
#!/bin/bash
started='/tmp/nfx_started'
if [ -e $started ]; then
exit 0
fi
( sleep 30 && /usr/bin/sudo -u nobody -b /config/scripts/netflix-v4 ) &
touch $started
To configure your EdgeRouter to forward Netflix requests to this program, enter configuration mode in the EdgeRouter CLI and add the following:
set service dns forwarding options 'server=/netflix.com/nflximg.com/nflxext.com/nflxvideo.com/127.0.0.1#5353'
This is pretty much a straight Go port of Chris Howie's Python implementation. However, installing that script's dependencies directly on the EdgeRouter itself takes up a significant chunk of the EdgeRouter's available storage, which prevented me from upgrading the device firmware without uninstalling them. Additionally, the Python interpreter uses significantly more memory than this script.
This would have not been possible without Miek Gieben's excellent Go DNS library.