Linux - DHCPD u. DDNS

A. Netzwerkkonfiguration

Starten der virtuellen Machinen:

xm ceate -c nwtk-srv
xm ceate -c nwtk-ws

WS

/etc/sysconfig/network:
NETWORKING=yes
HOSTNAME=ws.homedomain.at
GATEWAY=192.168.18.254

SRV

etc/sysconfig/network:
HOSTNAME=srv.homedomain.at
GATEWAY=192.168.0.1

IP Adressen vergeben:

SRV

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
IPADDR=192.168.0.18
NETMASK=255.255.255.0
ONBOOT=YES
NAME=eth0
BOOTPROTO=none
TYPE=ethernet

/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
IPADDR=192.168.4.254
NETMASK=255.255.255.0
ONBOOT=YES
NAME=eth1
BOOTPROTO=none
TYPE=ethernet

WS

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=ethernet
ifup eth0
ifup eth1

Zustand der Interfaces überprüfen:
ifconfig

DNS-Server und Domäne am SRV in der Datei /etc/resolv.conf eintragen:
nameserver 192.168.0.1 # Router
domain homedomain.at # gleich wie "search" - bei domain aber nur 1 domain möglich

Eintrag in /etc/sysctl.conf ändern:
net.ipv4.ip_forward = 1 (statt 0)

Netzwerk-Service neu starten:
/etc/init.d/network restart

B) DHCP-Server

DHCP-Server für die innere Schnittstelle (eth1) konfigurieren und testen:

Einträge im File /etc/dhcpd.conf:
ddns-update-style none;
allow unknown-clients;
default-lease-time 300;
max-lease-time 1800;

option domain-name "homedomain.at";
option domain-name-servers 192.168.18.254;
option ntp-servers 192.168.0.100;
subnet 192.168.18.0 netmask 255.255.255.0 {
		range 192.168.18.128 192.168.18.253;
			option broadcast-address 192.168.18.255;
			option subnet-mask 255.255.255.0;
			option routers 192.168.18.254;
   }

DHCP-Server starten:

service dhcpd start


Auf der WS DHCP-Client starten:

dhclient

WS anhand ihrer MAC-Adresse eine statische IP-Adresse zuweisen:

MAC Adresse der WS vom SRV aus herausfinden:

grep DHCP /var/log/messages

In der Datei /etc/dhcpd.conf statische Adresse eintragen:
ddns-update-style none;
allow unknown-clients;
default-lease-time 300;
max-lease-time 1800;

option domain-name-servers 192.168.18.254;
option domain-name "homedomain.at";
option ntp-servers 192.168.18.100;
subnet 192.168.18.0 netmask 255.255.255.0 {
		range 192.168.18.128 192.168.18.253;
			option broadcast-address 192.168.18.255;
			option subnet-mask 255.255.255.0;
			option routers 192.168.18.254;			
}

host ws {
		hardware ethernet aa:00:00:38:15:e6;
		fixed-address 192.168.18.42;
}


DHCP-Server auf dem SRV neu starten:
service dhcpd restart

Auf der WS neues DHCP Lease holen
dhclient -r dhclient

--> nun sollte die WS die statisch eingetragene IP-Adresse bekommen haben

Sperren der Vergabe von Adressen an unbekannte Clients:

Eintrag in der Datei /etc/dhcpd.conf ändern:
allow unknown-clients; --> deny unknown-clients;

DHCP-Server und DHCP-Client zur Überprüfung neu starten. (Schlauerweise Server VOR Client).

Für den weiteren Verlauf der Übung werde ich allerdings unknown-clients wieder zulassen, und meine WS mit der alten nicht MAC-basierenden Adresse führen.

C. DNS-Server

DNS-Server konfigurieren, der die lokalen Adressen der Domäne homedomain.at auflöst und andere Anfragen weiterleitet.

/etc/named.conf:
zone "18.168.192.in-addr.arpa" IN {
		type master;
		file "reversedomain.zone";
		allow-update { none; };
};

zone "homedomain.at" IN {
		type master;
		file "homedomain.zone";
		allow-update { none; };
};

/var/named/chroot/var/named/homedomain.zone:
$ORIGIN .
$TTL 38400
homedomain.at IN SOA homedomain.at. admin.homedomain.at. (
		2002060301
		10800
		3600
		604800
		38400
 )
$ORIGIN homedomain.at.
		NS srv
srv		A		192.168.4.254
ws		A 		192.168.4.253
Einrückungen sind zu beachten!
/var/named/chroot/var/named/reversedomain.zone:
 $ORIGIN .
 $TTL 38400
18.168.192.in-addr.arpa IN SOA homedomain.at. admin.homedomain.at.(
		2002060301
		10800
		3600
		604800
		38400
)
$ORIGIN 18.168.192.in-addr.arpa.
		NS srv.homedomain.at.
254		PTR		srv.homedomain.at.
42		PTR		ws.homedomain.at.

Zonefiles aus der chroot-Umgebung nach /var/named linken:

ln -s /var/named/chroot/var/named/homedomain.zone /var/named/homedomain.zone
ln -s /var/named/chroot/var/named/reversedomain.zone /var/named/reversedomain.zone

Um unseren eigenen DNS zur Auflösung von Namen zu benutzen, muss der Inhalt der Datei /etc/resolv.conf wie folgt geändert werden:

/etc/resolv.conf
nameserver 127.0.0.1
domain homedomain.at

Starten des DNS Servers:
service named start

Nun sollte der DNS in der Lage sein sowohl Adressen aus dem Internet, als auch SRV und WS auflösen zu können.

ACL erstellen

acl dns-local{
	192.168.18.0 /24;
	127.0.0.0 /8;
};
In den global options muss man daraufhin folgende Options setzen:
allow-query { dns-local; };
allow-recursion { dns-local; };
Allow-query grenzt den Kreis der Adressen ein, die ein Query absetzen dürfen, und allow-recursion schränkt ein wer rekursive DNS-Queries starten darf.

D) Dynamische DNS Updates

Schlüssel erzeugen

dnssec-keygen –a HMAC-MD5 –b 128 –n USER DHCP_UPDATER

Im aktuellen Verzeichnis werden daraufhin zwei Dateien erzeugt:
Kdhcp_updater.xxx.key Kdhcp_updater.xxx.private

In der .private Datei ist der von uns benötigte Schlüssel enthalten. Achtung: Den Schlüssel auf "/" und "\" überprüfen - ansonsten Error!
Wir fügen das kompletten Inhalt in unsere /etc/dhcpd.conf ein (evtl vorher backuppen!):
cat Kdhcp_updater.+157+14839.private >> /etc/dhcpd.conf

Datei /etc/dhcpd.conf wie folgt ändern:
ddns-domainname "homedomain.at";
ddns-update-style ad-hoc;
default-lease-time 3000;
max-lease-time 18000;
allow unknown-clients;

option domain-name-servers 192.168.18.254;
option domain-name "homedomain.at";
option ntp-servers 192.168.18.100;
update-static-leases true;
subnet 192.168.18.0 netmask 255.255.255.0{
		range 192.168.18.128 192.168.18.253;
			option broadcast-address 192.168.18.255;
			option subnet-mask 255.255.255.0;
			option routers 192.168.18.254;
}

host ws {
		hardware ethernet aa:00:00:38:15:e6;
		fixed-address 192.168.18.42;
}

key DHCP_UPDATER{
		algorithm HMAC-MD5.SIG-ALG.REG.INT;
		secret <erzeugtes Passwort>
}

zone homedomain.at.{
		primary 192.168.18.254;
		key DHCP_UPDATER;
}

zone 18.168.192.in-addr.arpa.{
		primary 192.168.4.254;
		key DHCP_UPDATER;
}

/etc/named.conf wie folgt ändern:
key DHCP_UPDATER{
		algorithm hmac-md5;
		secret <erzeugtes Passwort>;
};

zone "18.168.192.in-addr.arpa" IN{
		type master;
		file "reversedomain.zone";
		allow-update {key DHCP_UPDATER;};
};

zone "homedomain.at" IN{
		type master;
		file "homedomain.zone";
		allow-update { key DHCP_UPDATER; };
};

Berechtigungen setzen

Sollte named keine Schreibbrechtigung haben, kann er die Zonefiles nicht updaten.
--> /var/log/messages prüfen.
chmod 770 /var/named
chmod 770 /var/named/chroot/var/named
chown named /var/named
chown named /var/named/chroot/var/named

/etc/dhclient.conf auf WS editieren
send fqdn server-update on;
send fqdn.fqdn "ws.homedomain.at."
send fqdn.encoded on;

Bevor man das ganze testet, sollte man die WS noch aus den bestehenden Zonefiles löschen.
Nach restart von dhcpd und named sollte named versuchen in der chroot-Umgebung ein journal-File (*.jnl) anzulegen.
Falls alles richtig konfiguriert wurde und der Vorgang erfolgreich abgeschlossen wird, kann man bereits versuchen die WS aufzulösen. Die Einträge in den Zonefiles erscheinen wenig später.

Useful Links

http://www.zytrax.com/books/dns/ch7/queries.html