Wir möchten einen dynamischen Router einrichten. Dynamisch weil im Nameserver unseres Subnetzes die Zonen Dateien automatisch mit der Vergabe von Ip-Adressen geschieht. Am Ende können sich alle Rechner gegnseitig mit Namen ansprechen und extern über den Router ins WAN.
Die interne Netzwerkkarte bez. wir als eth0 und die externe des Routers als eth1 ansprechen. Die IP von eth0 lautet 192.168.1.1/24 und die von eth1 172.26.1.1/24. Unser Subnetz erhält den Namen "abc.lan", der Router den Hostnamen "router". Die FQDN des Routers lautet nachher also "router.abc.lan" und die Clients sind unter ihrem jeweiligen Hostname erreichbar.
Dazu benötigen wir
einen dhcp-Server wie isc-dhcpd-server
einen Domain Name Server wie bind9
Dazu müssen wir den Router konfigurieren und zwar:
forward erlauben
Masquerading erzwingen
den Dhcp-Server konfigurieren
den dhclient konfigurieren
den bind9 Nameserver einrichten
Am Ende ist die /etc/resolv.conf der Clients automatisch aktualisiert und wir können die Rechner im Subnetz anhand ihrer Hostnamen auflösen.
Forward
Forwarding heißt, dass Pakete von einer Netzwerkkarte zur anderen weitergeleitet werden können.
Forward von Paketen erlaubt man über die Datei /proc/sys/net/ipv4/ip_forward. Dort muss der Wert 1 betragen.
# echo 1 > /proc/sys/net/ipv4/ip_forwardoder
# sysctl net.ipv4.ip_forward=1Und dauerhaft in /etc/sysctl.conf mit dem Eintrag
net.ipv4.ip_forward=1
Masquerading
Masquerading bewirkt eine Umschreibung der IP-Pakete mit der Adresse des Routers anstatt des anfragenden Clients aus dem Subnetz. Da Router nur Pakete aus ihrem Subnetz weiterleiten, würde eine Anfrage von einem Rechner aus einem anderen Subnetz abgewiesen. Masquerading schreibt (und merkt sich) die IP-Adresse des Routers auf die weitergereichte Anfrage, so dass das Paket im nächsten Netz akzeptiert wird.
Das Masquerading bewirkt, dass Pakete des Clients weitergeleitet und nachher auch wieder an den Client durchgereicht werden. Dazu benutzen wir die NAT-Tabelle der iptables. Das angegebene Interface ist in der Regel die äußere Netzwekkarte.
# iptables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE Dies können wir dauerhaft machen, indem wir diesen iptables-Befehl in die Datei rc.local eintragen. Bei CentOS muss diese Datei ncoh ausführbar gemacht werden:
# chmod o+x /etc/rc.localAlternativ zum Masquerading können auch statische Routingtabellen gepflegt werden oder Routingprotokolle (OSPF, BGP, RIP) eingesetzt werden.
DHCP Server
Mit den beiden ersten Punkten haben wir die Basis für unseren Dynamischen DNS gelegt. Nun kommen wir zum DHCP-Server.
Der Dhcp-Server vergibt die IPs und andere Infos wie nameserver, netmask, Search Domain und viels mehr an die Clients. Unser Router soll selbst Client des Dhcp-Servers werden, damit er über seinen eigenen Nameserer suchen kann. Der auf dem Rouer laufende dhclient trägt die Infos des Dhcp-Servers eine. Wie und was insbesondere in der resolv.conf eingetragen wird bestimmt die Konfiguration des dhclient unter /etc/dhcp/dhclient.conf. Während der Client auf Infos vom Dhcp-Server auf Port 68 lauscht, lauscht der Dhcp-Server auf Port 67.
Die Konfiguration wird in /etc/dhcp/dhcpd.conf vorgenommen. Die Datei unterscheidet globale und zonenspezifische Parameter.
## Globale Parameter
# Die Standard-Dauer für die Vergabe von IP-Adressen in Sekunden
default-lease-time 10800;
# Die maximale Dauer für die Vergabe von IP-Adressen in Sekunden
max-lease-time 13000;
# Erlaubnis zur Aktualisierung der DNS Einträge
ddns-update-style interim;
## Subnetz spezifische Einträge
subnet 192.168.1.1 netmask 255.255.255.0 {
# Bereich der zu vergebenden IP-Adressen
range 192.168.1.100 192.168.1.150;
# Angabe der/des Router/s des Subnetzes
option routers 192.168.1.1;
# Einträge für die Clients: nameservers in /etc/resolv.conf (bis zu drei)
option domain-name-servers 192.168.1.1, 8.8.8.8;
# Eintrag für die Clients: search in /etc/resolv.conf
option domian-name "abc.lan";
# Für welche Zonen sind updates zulässig: Forward des DNS mit A-Records
zone abc.lan. {
primary localhost;
}
# Für welche Zonen sind updates zulässig: Reverse des DNS mit PTR-Records
zone 1.168.192.in-addr.arpa. {
primary localhost;
}
}Den eigenen Bind Server in die resolv.conf schreiben
In der Regel wird die externe Netzwerkkarte durch einen anderen DHCP-Server bedient, der seine Angaben in ide resolv.conf unseres Rechners schreibt. Dort schreibt er einen nameserver- und womöglich eine search-Eintrag hinein. Wir möchten aber unseren eigenen Bind Server und eigenen Search-Eintrag nutzen.
Dazu können wir in unserem DHCP-Client auf dem Rechner "router" die Einträge des fremden Servers verbieten, überschreiben, verändern. Dazu auf Debian-Systemen die /etc/dhcp/dhclient öffnen (auf CentOS die Datei der Netzwerkkarte unter /etc/sysconfig/network-scripts/):
# supersede domain-name "abc.lan";
# prepend domain-name-servers 127.0.0.1;
DHCP-Server Listen einstellen
Noch weiß der DHCP-Server nicht auf welchem Interface er seine Dienste bereitstellen soll. Bei Debian wird dies in /etc/defaultS7isc-dhcp-server eingestellt, unter CentOS
Der Nameserver Bind9
Nachdem DHCP eingerichtet wurde, können wir uns um Bind9 kümmern. Bind ist ein Nameserver und offeriert seine Dienste unter tcp 53. Er dient der Namensauflösung unserer Zone "abc.lan". Wir werden Namen in IPs auflösen und andersherum.
Dazu nehmen wir uns die Konfigurationsdateien unter /etc/bind/ vor. Für uns sind wichtig
named.conf.options
named.conf.local
named.conf.options
In der named.conf.options entkommentieren wir die forwarders-Anwesiung und ersetzten localhost durch den nächsten DNS-Server. Dies ist nicht unbedingt nötig, aber falls wir nicht selber immer alle Namen auflösen wollen, dann ist dies eine Entlastung. Zudem erlauben wir noch den Zugriff auf unseren DNS und geben die IP an, auf denen unser Bind seinen Service anbietet.
...
listen-on { 127.0.0.1; 172.27.0.1; };
allow-query { 127.0.0.1; 172.26.1.0/24; 172.27.0.1; };
forwarders {
10.0.0.1;
};
...named.conf.local
Der nächste Schritt ist die Änderung der named.conf.local. Dort tragen wir unsere lokalen Zonen ein.
## Die Forward-Zone
zone "abc.lan" {
# Wo ist die Datei für die DNS Einträge der Forward-Auflösung
file "abc.fwd";
# Welche Art von DNS Server
type master;
# Update erlauben für Server
allow-update { localhost; };
}
## Die Reverse-Zone
zone "1.168.192.in-addr.arpa"" {
# Wo ist die Datei für die DNS Einträge der Reverseauflösung
file "abc.rev";
# Welche Art von DNS Server
type master;
# Update erlauben für Server
allow-update { localhost; };
}Forward- und Reverse-Dateien anlegen
Der nächste Schritt zur Konfiguration ist die Erstellung der Dateien für die Nameserver-Einträge:
abc.fwd
abc.rev
Wo sollen sie angelegt werden? Der einfachheithalber im default-Verzeichnis von Bind. Das Verzeichnis finden wir in der /etc/bind/named.conf.options und lautet bei Debian /var/cache/bind/ und unter CentOS /var/named/dynamic???. Dazu kopieren wir die Datei /etc/bind/db.empty nach /var/cache/bind.
# cp /etc/bind/db.empty /var/cache/bind/abc.fwdDarin ändern wir die Einträge so, dass SOA, NS und A auf den Router zeigen.
$TTL 86400 ; 1 day
@ IN SOA router.abc.lan. root.abc.lan. (
400 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
86400 ; minimum (1 day)
)
;
@ NS router.abc.lan.
A 192.168.1.1Als nächstes erzeugen wir die Revers-Datei:
# cp /etc/bind/db.empty /var/cache/bind/abc.revDarin ändern wir die Einträge so, dass SOA, NS und PTR auf den Router zeigen.
$TTL 86400 ; 1 day
@ IN SOA router.abc.lan. root.abc.lan. (
400 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
86400 ; minimum (1 day)
)
;
@ NS router.abc.lan.
1 PTR router.abc.lan. ; der Hostanteil der IP
Abschluss
Am Ende starten wir erst DNS und dann DHCP neu und hoffen das alles funktioniert. Ansonsten Fehlermeldung beim restart anschauen.
Danach kann man noch die Dateien /etc/resolv.conf (nameserver Einträge) anschauen sowie die Dateien /var/lib/dhcp/dhclient.leases und /var/lib/dhcp/dhcpd.leases, um Fehler zu finden.