Cross-compile the firmware for your router from a ubuntu machine

A basic knowldge of the procedure of compiling a OpenWrt firmware and flashing your router is a prerequisite for this task.

Make sure that you have the needed software installed in your system.

sudo apt-get update
sudo apt-get install build-essential subversion git-core libncurses5-dev gawk wget gettext

download

First, we download OpenWrt. The version we tested this was svn revision 39211.

mkdir ~/openwrt
cd ~/openwrt
svn -r 39211 co svn://svn.openwrt.org/openwrt/trunk workdir
cd workdir
# Revision 39211 needs patches:
#   http://patchwork.openwrt.org/patch/4588/
wget -O - http://patchwork.openwrt.org/patch/4588/raw | patch -p1
./scripts/feeds update -a
./scripts/feeds install -a

Now download and apply a patch to the OpenWrt configuration files in order to make its build system download and build netsukuku.

wget -O - http://download.savannah.gnu.org/releases/netsukuku/openwrt-39211-netsukuku-0.9.patch 2>/dev/null | patch -p0

build

We prepare to compile OpenWrt with Netsukuku.

make menuconfig

Select your Target, Subtarget and Profile (e.g. Atheros AR7xxx/AR9xxx - Generic - TP-LINK TL-WR1043N/ND)

We have to produce the binaries with eglibc instead of uClibc.
For this, select "Advanced configuration options".
Inside it, select "Toolchain Options".
Inside it, as C Library implementation choose eglibc 2.15.

Inside category Network, select package netsukuku

It is optional to activate the OpenWrt web interface. You find it inside LuCI, Collections, luci

Build with:

ionice -c 3 nice -n 20 make

After approx. 90 minutes (+ download time of various pkgs) you will find your new firmware in ./bin/ar71xx-eglibc.

Flash your router.

Then connect to it and configure as you like the usual bits. The password for root, the IP address of your LAN and the wireless settings (SSID, channel, security, ...)
For this steps refer to documentation of OperWrt that you can find online.

configure netsukuku

Connect to the router as root.

Edit the configuration file /etc/nsswitch.conf and place "andna [NOTFOUND=return]" before "dns" in the line for the database "hosts".

vi /etc/nsswitch.conf

Configure dnsmasq so that it listens on port 53 but only for its real IP, e.g. 192.168.2.1.
The requests are to be forwarded to 127.0.0.1 on port 53 where we will listen with dns-to-andna.

vi /etc/dnsmasq.conf

The file has to include these lines:

listen-address=192.168.2.1
bind-interfaces
no-resolv
server=127.0.0.1

Configure /etc/resolv.conf so that it points to the real DNS server, e.g. 8.8.8.8.
On OpenWrt /etc/resolv.conf is usually a symlink. Make it persistent and modify.

cd /etc
cp resolv.conf real.resolv.conf
rm resolv.conf
mv real.resolv.conf resolv.conf
vi resolv.conf

Configure /etc/ntkresolv/ntkresolv.ini so that DNS_TO_ANDNA listens to 127.0.0.1.

vi /etc/ntkresolv/ntkresolv.ini

The file has to include the line:

DNS_TO_ANDNA=127.0.0.1