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-1.0.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

vi /etc/config/dhcp

Disable rebind-protection:

        option rebind_protection '0'

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

Restart service dnsmasq and dns-to-andna:

        /etc/init.d/dnsmasq restart
        /etc/init.d/dns-to-andna restart

Start / stop the daemon

Open a terminal and connect to the router as root.

You have to know which network cards (NIC) you want to handle with netsukuku. For OpenWrt this is usually br-lan.

Find the name of the NICs with

ip l

Launch the daemon with the NICs you want to use.

ntkd -i br-lan

The daemon will not exit, so you have to leave the terminal open.

When you want to stop the daemon and exit netsukuku, press CTRL-C and it will remove all the configurations that it had set up.

Test

Now you should be able to connect even a unsupported device (android, mac, windows) and reach netsukuku nodes.

Netsukuku_Dev/1_0/openwrt (last edited 2014-07-29 07:25:53 by lukisi)