Installation of the Raspberry Pi as DNS ====== Installation ====== Thanks to [[http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/|Raspbian (Minimal Install)]] I downloaded the image raspbian_wheezy_20130923.img.7z\\ After unzipping with 7z 7z x raspbian_wheezy_20130923.img.7z Then copy directly on my SD card (64GB) dd if=raspbian_wheezy_20130923.img of=/dev/mmcblk0 bs=1M I used gparted to resize the partitions: * / is now 55GB wide * swap 4GB 8-) Installation done ====== Post-configuration ====== ===== Locales ===== As mentionned on the site: dpkg-reconfigure tzdata Switched to Europe/Paris dpkg-reconfigure console-data Switched to us-intl dpkg-reconfigure locales Enabled en_US.iso/UTF-8 ===== Network ===== vi /etc/network/interfaces Then I switched from dhcp to static # interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback allow-hotplug eth0 #iface eth0 inet dhcp iface eth0 inet static address 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.1 dns-search test.local dns-nameservers 192.168.1.1 192.168.1.2 ===== Updates ===== apt-get update apt-get upgrade ====== Nice tools ====== I installed some third party tools I use a lot: apt-get install lftp rsync curl bc lsof strace vim screen htop ====== DNS ====== Let's go and install Bind apt-get install bind9 dnsutils ===== Config ===== vi /etc/bind/named.conf.default-zones zone "test.local" IN { type master; file "/etc/bind/db.test.local"; }; zone "1.168.192.in-addr.arpa" IN { type master; file "/etc/bind/rev.db.test.local"; }; Then create this two files vi /etc/bind/db.test.local $TTL 3h @ IN SOA dns1.test.local. root.test.local. ( 2013110601 ; serial 3h ; refresh after 3 hours 1h ; retry after 1 hour 1w ; expire after 1 week 1h ) ; negative caching TTL of 1 hour IN NS dns1.test.local. ;network devices and Services [1-30] router IN A 192.168.1.1 dns IN A 192.168.1.2 wifi IN A 192.168.1.3 sip1 IN A 192.168.1.4 vi /etc/bind/rev.db.test.local $TTL 3h @ IN SOA dns1.test.local. root.test.local. ( 2013110601 ; serial 3h ; refresh after 3 hours 1h ; retry after 1 hour 1w ; expire after 1 week 1h ) ; negative caching TTL of 1 hour IN NS dns1.test.local. ;network devices and Services [1-30] 1 IN PTR router.test.local. 2 IN PTR dns.test.local. 3 IN PTR wifi.test.local. 4 IN PTR sip1.test.local. Enable logging vi /etc/bind/named.conf.local With // Manage the file logs include “/etc/bind/named.conf.log”; And create /etc/bind/named.conf.log vi /etc/bind/named.conf.log with logging { channel update_debug { file “/var/log/update_debug.log” versions 3 size 100k; severity debug; print-severity yes; print-time yes; }; channel security_info { file “/var/log/security_info.log” versions 1 size 100k; severity info; print-severity yes; print-time yes; }; channel bind_log { file “/var/log/bind.log” versions 3 size 1m; severity info; print-category yes; print-severity yes; print-time yes; }; category default { bind_log; }; category lame-servers { null; }; category update { update_debug; }; category update-security { update_debug; }; category security { security_info; }; }; ===== Benchmark ===== for i in {1..30}; do echo google.com; done | xargs -I^ -P10 dig ^ | grep time | awk /time/'{sum+=$4} END { print "Average query = ",sum/NR,"ms"}' Average query = 3.2 ms This is OK, I got :\\ Average query = 0.0666667 ms on the OpenBSD VM ===== Filtering ===== vi /etc/bind/blockeddomain.hosts This file contains: $TTL 3h @ IN SOA dns1.test.local. root.test.local. ( 2013071502 ; serial 3h ; refresh after 3 hours 1h ; retry after 1 hour 1w ; expire after 1 week 1h ) ; negative caching TTL of 1 hour IN NS dns1.test.local IN NS dns1.test.local. A 127.0.0.1 * IN A 127.0.0.1 * IN AAAA ::1 Add this in /etc/bind/named.conf.default-zones vi /etc/bind/named.conf.default-zones include "blockeddomains.zones"; Now let's generate this blockeddomains.zones \\ First we need some tools: apt-get install dos2unix p7zip Then this script: #! /bin/sh # Script that generate a blockeddomains.zones according to a nice hosts file on the internet # First rm previous version of downloaded and generated files rm blockeddomains.zones hosts.txt # Get the hosts file wget http://winhelp2002.mvps.org/hosts.txt # Convert to Unix dos2unix hosts.txt # For each line in the file that starts with 127, doesn't contain localhost we take the 3rd field (domain) for line in `cat hosts.txt | grep ^127 | grep -v localhost | cut -d " " -f 3` do # Create an entry in blockeddomain.zones with the correct syntax pretending we own this domain :P printf "zone \"$line\" {type master; file \"/etc/bind/blockeddomain.hosts\";};\n" >> blockeddomains.zones done Reload bind /etc/init.d/bind reload \\ ====== References ====== * [[http://vuongxibul.wordpress.com/2011/09/16/configure-bind9-on-debian-squeeze/]] * [[http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/]] * [[network:dns|DNS - OpenBSD]]