<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.cmoser.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=C9mos</id>
	<title>cmoser Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cmoser.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=C9mos"/>
	<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Spezial:Beitr%C3%A4ge/C9mos"/>
	<updated>2026-05-04T15:14:48Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=290</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=290"/>
		<updated>2024-04-21T17:22:25Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Zonen überprüfen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Wenn man keine eigene Domäne registriert hat, kann man die Topleveldomäne &#039;&#039;.internal&#039;&#039; nutzen, um Kollisionen mit bestehenden Domänen zu vermeiden. Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein. In diesem Beispiel ein statische Zone, die keine dynamischen Updates erfahern darf.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben. Diese erstellen wir in diesem Beispiel als dynamische Zone. Um die Zone dynamisch, wie z.B. mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt; oder einem DHCP-Server dynamisch verändern zu können, kommt in der Zonenkonfiguration Option &amp;lt;code&amp;gt;allow-update&amp;lt;/code&amp;gt; hinzu. Hier gibt man die IP-Adressen oder rndc-Schlüssel an, die die Zone verändern dürfen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        127.0.0.1; // localhost&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;; // der Schlüssel, mit dem man die Zone verändern darf&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 3D&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet. Das Einfrieren funktioniert nur bei dynamischen Zonen!&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze 1.168.192.in-addr.arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/1.168.192.in-addr-arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen. Das Auftauen von Zonen funktioniert nur bei dynamischen Zonen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw 1.168.192.in-addr.arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags oder das Vergessen des Adresseneintrags des Nameservers, wenn dieser sich in derselben Zone befindet.&lt;br /&gt;
&lt;br /&gt;
====== Zonen überprüfen======&lt;br /&gt;
Mit &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt; lassen sich manuell editierte Zonen auf Fehler überprüfen. Das Tool gibt die Art des Fehlers und die jeweilige Zeilennummer an. &amp;lt;named-checkzone&amp;gt; übergibt man als Argumente den Zonennamen und den Pfad der Zonendatei.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;named-checkzone meinedomain.de /usr/local/etc/namedb/primary/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=289</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=289"/>
		<updated>2024-04-18T19:15:05Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Zonen manuell editieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Wenn man keine eigene Domäne registriert hat, kann man die Topleveldomäne &#039;&#039;.internal&#039;&#039; nutzen, um Kollisionen mit bestehenden Domänen zu vermeiden. Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein. In diesem Beispiel ein statische Zone, die keine dynamischen Updates erfahern darf.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben. Diese erstellen wir in diesem Beispiel als dynamische Zone. Um die Zone dynamisch, wie z.B. mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt; oder einem DHCP-Server dynamisch verändern zu können, kommt in der Zonenkonfiguration Option &amp;lt;code&amp;gt;allow-update&amp;lt;/code&amp;gt; hinzu. Hier gibt man die IP-Adressen oder rndc-Schlüssel an, die die Zone verändern dürfen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        127.0.0.1; // localhost&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;; // der Schlüssel, mit dem man die Zone verändern darf&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 3D&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet. Das Einfrieren funktioniert nur bei dynamischen Zonen!&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze 1.168.192.in-addr.arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/1.168.192.in-addr-arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen. Das Auftauen von Zonen funktioniert nur bei dynamischen Zonen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw 1.168.192.in-addr.arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags oder das Vergessen des Adresseneintrags des Nameservers, wenn dieser sich in derselben Zone befindet.&lt;br /&gt;
&lt;br /&gt;
====== Zonen überprüfen======&lt;br /&gt;
Mit &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt; lassen sich manuell editierte Zonen auf Fehler überprüfen. Das Tool gibt die Art des Fehlers und die jeweilige Zeilennummer an. &amp;lt;named-checkzone&amp;gt; übergibt als Argumente den Zonennamen und den Pfad der Zonendatei.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;named-checkzone meinedomain.de /usr/local/etc/namedb/primary/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=288</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=288"/>
		<updated>2024-04-18T19:10:57Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Wie komme ich zu einer Domäne */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Wenn man keine eigene Domäne registriert hat, kann man die Topleveldomäne &#039;&#039;.internal&#039;&#039; nutzen, um Kollisionen mit bestehenden Domänen zu vermeiden. Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein. In diesem Beispiel ein statische Zone, die keine dynamischen Updates erfahern darf.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben. Diese erstellen wir in diesem Beispiel als dynamische Zone. Um die Zone dynamisch, wie z.B. mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt; oder einem DHCP-Server dynamisch verändern zu können, kommt in der Zonenkonfiguration Option &amp;lt;code&amp;gt;allow-update&amp;lt;/code&amp;gt; hinzu. Hier gibt man die IP-Adressen oder rndc-Schlüssel an, die die Zone verändern dürfen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        127.0.0.1; // localhost&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;; // der Schlüssel, mit dem man die Zone verändern darf&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 3D&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze 1.168.192.in-addr.arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/1.168.192.in-addr-arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw 1.168.192.in-addr.arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags oder das Vergessen des Adresseneintrags des Nameservers, wenn dieser sich in derselben Zone befindet.&lt;br /&gt;
&lt;br /&gt;
====== Zonen überprüfen======&lt;br /&gt;
Mit &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt; lassen sich manuell editierte Zonen auf Fehler überprüfen. Das Tool gibt die Art des Fehlers und die jeweilige Zeilennummer an. &amp;lt;named-checkzone&amp;gt; übergibt als Argumente den Zonennamen und den Pfad der Zonendatei.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;named-checkzone meinedomain.de /usr/local/etc/namedb/primary/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Hauptseite&amp;diff=287</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Hauptseite&amp;diff=287"/>
		<updated>2023-10-07T12:11:12Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* [https://wiki.cmoser.org/index.php/derler2000 Daniel&amp;#039;s Seiten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meine Beiträge nach Sektionen Sortiert ==&lt;br /&gt;
=== [https://wiki.cmoser.org/index.php/anleitungen Anleitungen] ===&lt;br /&gt;
==== Diverse Services ====&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/Django_mit_NGINX_unter_Ubuntu-22.04 Django mit NGINX unter Ubuntu-22.04]&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/Git_Server_einrichten Git Server einrichten]&lt;br /&gt;
&lt;br /&gt;
==== Raspberry PI ====&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/Raspberry_PI_und_FreeBSD_Basissetup Basis Setup von FreeBSD auf einem Raspberry PI]&lt;br /&gt;
==== FreeBSD ====&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/FreeBSD_als_DNS-Server FreeBSD als DNS-Server]&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&lt;br /&gt;
&lt;br /&gt;
== Seiten von Freunden ==&lt;br /&gt;
=== [https://wiki.cmoser.org/index.php/magoam Magoam&#039;s Seiten] ===&lt;br /&gt;
=== [https://wiki.cmoser.org/index.php/derler2000 Daniel&#039;s Seiten] ===&lt;br /&gt;
&lt;br /&gt;
== Starthilfen ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste der Konfigurationsparameter]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Häufige Fragen zu MediaWiki]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Mailingliste zu neuen Versionen von MediaWiki]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Übersetze MediaWiki für deine Sprache]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Erfahre, wie du Spam auf deinem Wiki bekämpfen kannst]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Hauptseite&amp;diff=286</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Hauptseite&amp;diff=286"/>
		<updated>2023-10-07T12:10:32Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Seiten von Freunden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meine Beiträge nach Sektionen Sortiert ==&lt;br /&gt;
=== [https://wiki.cmoser.org/index.php/anleitungen Anleitungen] ===&lt;br /&gt;
==== Diverse Services ====&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/Django_mit_NGINX_unter_Ubuntu-22.04 Django mit NGINX unter Ubuntu-22.04]&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/Git_Server_einrichten Git Server einrichten]&lt;br /&gt;
&lt;br /&gt;
==== Raspberry PI ====&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/Raspberry_PI_und_FreeBSD_Basissetup Basis Setup von FreeBSD auf einem Raspberry PI]&lt;br /&gt;
==== FreeBSD ====&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/FreeBSD_als_DNS-Server FreeBSD als DNS-Server]&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&lt;br /&gt;
&lt;br /&gt;
== Seiten von Freunden ==&lt;br /&gt;
=== [https://wiki.cmoser.org/index.php/magoam Magoam&#039;s Seiten] ===&lt;br /&gt;
=== [https://wiki.cmoser.org/index.php/derler2000 Daniel&#039;s Seiten ===&lt;br /&gt;
&lt;br /&gt;
== Starthilfen ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste der Konfigurationsparameter]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Häufige Fragen zu MediaWiki]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Mailingliste zu neuen Versionen von MediaWiki]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Übersetze MediaWiki für deine Sprache]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Erfahre, wie du Spam auf deinem Wiki bekämpfen kannst]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=285</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=285"/>
		<updated>2023-10-07T11:58:36Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* System einrichten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|500px|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|500px|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&lt;br /&gt;
 root@rpi# chmod 0600 /var/swap.bin&lt;br /&gt;
 root@rpi# sysrc swapfile=/var/swap.bin&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um einen Nutzer ohne Passwortabfrage Programme mit erhöhten Berechtigungen mit doas ausführen zu lassen, gibt fügt man folgende Zeile in die &#039;&#039;/usr/local/doas.conf&#039;&#039; ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit nopass username&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=284</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=284"/>
		<updated>2023-10-07T11:57:55Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Basiskonfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|500px|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|500px|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&lt;br /&gt;
 root@rpi# chmod 0600 /var/swap.bin&lt;br /&gt;
 root@rpi# sysrc swapfile=/var/swap.bin&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um einen Nutzer ohne Passwortabfrage Programme mit erhöhten Berechtigungen mit doas ausführen zu lassen, gibt fügt man folgende Zeile in die &#039;&#039;/usr/local/doas.conf&#039;&#039; ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit nopass username&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=283</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=283"/>
		<updated>2023-10-07T11:55:54Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* System einrichten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|500px|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&lt;br /&gt;
 root@rpi# chmod 0600 /var/swap.bin&lt;br /&gt;
 root@rpi# sysrc swapfile=/var/swap.bin&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um einen Nutzer ohne Passwortabfrage Programme mit erhöhten Berechtigungen mit doas ausführen zu lassen, gibt fügt man folgende Zeile in die &#039;&#039;/usr/local/doas.conf&#039;&#039; ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit nopass username&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=282</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=282"/>
		<updated>2023-10-07T11:55:10Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* System einrichten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|gerahmt|500px|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&lt;br /&gt;
 root@rpi# chmod 0600 /var/swap.bin&lt;br /&gt;
 root@rpi# sysrc swapfile=/var/swap.bin&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um einen Nutzer ohne Passwortabfrage Programme mit erhöhten Berechtigungen mit doas ausführen zu lassen, gibt fügt man folgende Zeile in die &#039;&#039;/usr/local/doas.conf&#039;&#039; ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit nopass username&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=281</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=281"/>
		<updated>2023-10-07T11:51:44Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* doas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&lt;br /&gt;
 root@rpi# chmod 0600 /var/swap.bin&lt;br /&gt;
 root@rpi# sysrc swapfile=/var/swap.bin&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um einen Nutzer ohne Passwortabfrage Programme mit erhöhten Berechtigungen mit doas ausführen zu lassen, gibt fügt man folgende Zeile in die &#039;&#039;/usr/local/doas.conf&#039;&#039; ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit nopass username&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=280</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=280"/>
		<updated>2023-10-05T18:12:53Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Swap Datei erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&lt;br /&gt;
 root@rpi# chmod 0600 /var/swap.bin&lt;br /&gt;
 root@rpi# sysrc swapfile=/var/swap.bin&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=279</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=279"/>
		<updated>2023-10-05T18:11:07Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Swap Datei erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&amp;lt;br&amp;gt;&lt;br /&gt;
root@rpi# chmod 0600 /var/swap.bin&amp;lt;br&amp;gt;&lt;br /&gt;
root@rpi# sysrc swapfile=/var/swap.bin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=278</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=278"/>
		<updated>2023-10-05T18:10:19Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Swap Datei erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&amp;lt;br&amp;gt;&lt;br /&gt;
root@rpi# chmod 0600 /var/swap.bin&amp;lt;br&amp;gt;&lt;br /&gt;
root@rpi# echo &amp;quot;swapfile=\&amp;quot;/var/swap.bin\&amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/rc.conf&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=277</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=277"/>
		<updated>2023-10-05T18:06:09Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Swap Datei erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
root@rpi# chmod 0600 /var/swap.bin&amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
root@rpi# echo &amp;quot;swapfile=\&amp;quot;/var/swap.bin\&amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/rc.conf&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=276</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=276"/>
		<updated>2023-10-05T18:05:49Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Swap Datei erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
root@rpi# chmod 0600 /var/swap.bin&amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
root@rpi# echo &amp;quot;swapfile=\&amp;quot;/var/swap.bin\&amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/rc.conf&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=275</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=275"/>
		<updated>2023-10-05T18:05:07Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Swap Datei erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&amp;lt;br&amp;gt;&lt;br /&gt;
root@rpi# chmod 0600 /var/swap.bin&amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
root@rpi# echo &amp;quot;swapfile=\&amp;quot;/var/swap.bin\&amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/rc.conf&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=274</id>
		<title>Raspberry PI und FreeBSD Basissetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Raspberry_PI_und_FreeBSD_Basissetup&amp;diff=274"/>
		<updated>2023-10-05T18:04:30Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Swap Datei erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FreeBSD ==&lt;br /&gt;
FreeBSD ist ein UNIX&amp;amp;reg; ähnliches Betriebssystem, das auf 4.4BSD-Lite basiert. Es ist anders als Linux, das ja eigentlich nur der Kernel ist, ein komplettes Betriebssystem.&lt;br /&gt;
Ursprünglich war BSD (Berkeley Software Distribution) als Erweiterung des von AT&amp;amp;T entwickelten Betriebssystems UNIX&amp;amp;reg; gedacht. Verschiedene Open-Source Projekte basieren auf dieser als 4.4BSD-Lite bekannten Quelltextausgabe. In dieser Softwareausgabe sind auch Quelltexte anderer Open-Source Projekte enthalten, insbesonders jene des GNU-Projekts.&lt;br /&gt;
Das Komplette Betriebssystem umfasst:&lt;br /&gt;
* Den BSD-Kernel, der sich um Prozess-Scheduling, die Unterstützung mehrerer Prozessoren (SMP – Symmetric Mulit-Processing), Speicherverwaltung, Datenträgerverwaltung, Gerätetreiber und einiges mehr kümmert. Im Gegensatz zu Linux gibt es verschiedene BSD-Kernels mit unterschiedlichen Fähigkeiten.&lt;br /&gt;
*Die C-Bibliothek, die die grundlegende API (Application Programming Interface) für Programme ist. Die C-Bibliothek basiert auf Berkeley-Code und nicht auf Quelltexten des GNU Projekts&lt;br /&gt;
*Nützliche Programme wie z.B. Shells, Programme für Dateioperationen, Compiler und Linker. Einige dieser Programme stammen noch aus dem GNU-Projekt, andere hingegen nicht.&lt;br /&gt;
*Andere nützliche Programme und Services, wie z.B. Sendmail, SSH, FTP und einige mehr.&lt;br /&gt;
*Eine Ports-Kollektion, die Programme und Bibliotheken enthält und die über 30.000 Ports enthält.&lt;br /&gt;
&lt;br /&gt;
FreeBSD eignet sich, da keine Desktopumgebung vorinstalliert ist, besonders als Server. Eine Desktopumgebung lässt sich aber nachinstallieren, wenn das erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
Für das Raspberry PI gibt es ein fertiges [https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz FreeBSD 13.1 Image für das RaspberryPI 3 bzw. 4], das direkt auf der [https://freebsd.org FreeBSD Webseite] zum Herunterladen angeboten wird. Wenn man ein Raspberry PI 4 benutzt, sollte man mindestens Version 13.1 vwerwenden, da 13.0 noch einen älteren &#039;&#039;u-boot&#039;&#039; Bootloader verwendet, und man da noch einige Schritte von Hand machen muss, um das Raspberry PI 4 zum Hochfahren zu bewegen.&lt;br /&gt;
&lt;br /&gt;
== Installieren des Images ==&lt;br /&gt;
Hat man das Image heruntergeladen, muss es noch auf eine SD-Karte geschrieben werden. Ich empfehle eine mit mindestens 8 GB Speicher zu verwenden, da diese noch genug Platz für weitere Programme hat. Zu groß sollte sie auch nicht sein, da hierbei ein Backup lange dauern kann und es, je nach SD-Karten Größe, einiges Platz auf dem Backup-Medium einnimmt.&lt;br /&gt;
Hat man die passende SD-Karte gewählt, muss man noch das Image auf selbige &#039;brennen&#039;. &lt;br /&gt;
&lt;br /&gt;
Unter Unix geht das ganz einfach mit der Kommandozeile. ${device} steht für das zu beschreibende Gerät. (z. B. &#039;&#039;/dev/sdc&#039;&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root# xzcat --keep FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img.xz | dd of=${device} bs=4M&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows muss man ein Programm zum Beschreiben des Images herunterladen. Mit [https://sourceforge.net/projects/win32diskimager/ Win32 Disk Imager] ist es möglich Image-Dateien auf eine SD-Karte zu brennen. Das FreeBSD-Image muss vor dem Brennen noch entpackt werden. Das geht mit sowohl [https://www.7-zip.org/download.html 7-Zip] als auch mit [https://winrar.de/download.php WinRAR].&lt;br /&gt;
&lt;br /&gt;
Ist das Beschreiben der SD-Karte erledigt, kann sie bereits ins Raspberry PI gegeben werden und man kann schon loslegen, den Einplatinencomputer für seine Zwecke zu konfigurieren. Wenn man keine Tastatur und Bildschirm ans Raspberry PI anschließen will, kann man sich auch per SSH (Secure SHell) am Gerät anmelden. Da ein DHCP-Client standardmäßig aktiviert ist, findet man auch im eigenen Netzwerk das Gerät. Eine Voraussetzung dafür ist, dass man bereits einen DHCP-Server (z. B. im Router) betreibt.&lt;br /&gt;
Hat man das Gerät im eigenen Netzwerk gefunden, z. B. in den Netzwerkeinstellungen des Routers, kann man sich mit dem Standardnutzer &#039;&#039;freebsd&#039;&#039; mit dem Passwort &#039;&#039;freebsd&#039;&#039; anmelden. Das root-Passwort ist root.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@localhost$ ssh freebsd@${ip_adresse}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um sich unter ssh zum Systemadministrator zu machen, gibt man in der Kommandozeile su ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ su&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Hilfe zu einem Befehl benötigt, erhält man diese mit dem Befehl &#039;&#039;man&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;freebsd@generic$ man man&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basiskonfiguration ==&lt;br /&gt;
Bevor man loslegt, einen eigenen Server aufzusetzen, sollte man einige Grundkonfigurationen vornehmen, da einige Sicherheitslücken zu Beginn geschlossen werden sollten. Einige Grundeinstellungen lassen sich mit dem Dialog-basierten Tool &#039;&#039;bsdconfig&#039;&#039; erledigen. Dieses Programm trägt die benötigten Einträge in die entsprechenden Dateien ein. Das System wird vor allem über die Datei &#039;&#039;/etc/rc.conf&#039;&#039; gesteuert. Hier werden die Netzwerkeinstellungen und die Services, die es beim Hochfahren zu starten gilt, eingetragen. Diese Datei kann auch von Hand editiert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;man rc.conf&amp;lt;/code&amp;gt; gibt Informationen über diese Konfigurationsdatei aus.&lt;br /&gt;
&lt;br /&gt;
Wenn man eine Bourne kompatible Shell gegenüber der &#039;&#039;csh&#039;&#039; bevorzugt kann man mit dem Befehl &#039;&#039;pw&#039;&#039; die Login Shell des jeweiligen Benutzers ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw usermod root -s /bin/sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installieren eines Editors ===&lt;br /&gt;
Für diejenigen, die mit &#039;&#039;vi&#039;&#039; oder &#039;&#039;ed&#039;&#039; nicht gewohnt sind, empfiehlt es sich einen Editor wie &#039;&#039;nano&#039;&#039; zu installieren. Wenn man mit dem Raspberry PI bereits Internet Zugang hat kann man einen Editor wie folgt installieren.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y nano&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den installierten Editor als Standardeditor zu nutzen, editiert man die &#039;&#039;~/.profile&#039;&#039; und ändert die Variable &#039;&#039;&#039;EDITOR&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;EDITOR=nano; export EDITOR&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Editor gleich zu aktivieren, muss man die Datei &#039;&#039;~/.profile&#039;&#039; erneut laden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;user@rpi$ . ~/.profile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollte man auch für &#039;&#039;&#039;root&#039;&#039;&#039; den Standardeditor ändern wollen, sind die oben genannten Schritte auch unter den Nutzer &#039;&#039;&#039;root&#039;&#039;&#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== root Passwort ändern und Benutzer anlegen ===&lt;br /&gt;
[[Datei:FreeBSD adduser.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt; image|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
Das root-Passwort gehört unbedingt geändert, da ansonsten jeder in der Lage ist, über das Standardpasswort Administrator Rechte zu erlangen. Man kann sich zwar nicht über Secure Shell als root anmelden, man hat aber dennoch Zugriff auf den Benutzer &#039;&#039;freebsd&#039;&#039; mit dem Standardpassword &#039;&#039;freebsd&#039;&#039;. Selbiger befindet sich noch in der Gruppe &#039;&#039;wheel&#039;&#039;, was einem ermöglicht &#039;&#039;su&#039;&#039; auszuführen. Das root-Passwort kann man mit &#039;&#039;bsdconfig&#039;&#039; geändert werden oder in der Shell.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# passwd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FreeBSD beginnt mit der Vergabe der User-IDs bei 1001, die meisten Linux-Distributionen allerdings bei 1000. Man sollte sich seinen Standardnutzer mit der UID 1000 anlegen und ihn zumindest in die Gruppe &#039;&#039;wheel&#039;&#039; aufnehmen. Des Weiteren empfiehlt es sich, die Nutzer-IDs von seiner Linux-Distribution, sofern man eine hat, im FreeBSD-System zu übernehmen. Sollte man ein NFS (Network File System) am Laufen haben, macht es sich bezahlt, da hier die Zugriffsrechte über die Nutzer- und Gruppen-IDs vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzer können sowohl mit dem Tool &#039;&#039;bsdconfig&#039;&#039; angelegt werden als auch in der Shell. In der Shell geht es sowohl mit &#039;&#039;pw&#039;&#039; als auch mit dem Befehl &#039;&#039;adduser&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Passwortlose Anmeldung mit SSH ====&lt;br /&gt;
Wenn man einen neuen Nutzer angelegt hat, kann man sich als Nutzer &#039;&#039;freebsd&#039;&#039; abmelden. Das geht mit dem Befehl &#039;&#039;exit&#039;&#039;. Und sich als neuer User anmelden. Um sich ohne Passwort anmelden zu können, kann man sich ein Secure-Shell Schlüsselpaar mit &#039;&#039;ssh-keygen&#039;&#039; erstellen, was auch unter Windows gelingt. Danach muss der öffentliche Schlüssel der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; im Zielsystem angehängt werden. Unter Unix/Linux geht das mit dem Befehl &#039;&#039;ssh-copy-id&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki &amp;gt;user@connect-from$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@host&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter Windows hat man entweder [https://www.msys2.org/ MSys2] oder [http://cygwin.org/ Cygwin] installiert oder man geht einen längeren Weg. Die zuvor genannten Programme bringen eine Unix/Linux ähnliche Umgebung nach Windows. Der längere Weg sieht wie folgt aus: Kopieren der id_rsa.pub Dateien in den Benutzerordner des Zielsystems und selbige danach an die &#039;&#039;authorized_keys&#039;&#039;-Datei anhängen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;c:\Users\self&amp;gt; sftp user@host&lt;br /&gt;
sftp&amp;gt; put .ssh/id_rsa.pub self.sshkey&lt;br /&gt;
sftp&amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
c:\Users\self&amp;gt; ssh user@host&lt;br /&gt;
&lt;br /&gt;
user@generic$ cat self.sshkey &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist das erledigt, kann man sich ohne Passwortauthentifizierung am Raspberry PI mit Secure-Shell anmelden.&lt;br /&gt;
&lt;br /&gt;
Sollte man sich einen anderen Nutzer angelegt haben, kann man den &#039;&#039;&#039;freebsd&#039;&#039;&#039;-Account löschen. Das geht mit &#039;&#039;pw&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@generic# pw userdel freebsd&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== System einrichten ===&lt;br /&gt;
Die Basiskonfiguration des Systems lässt sich am einfachsten mit dem Tool &#039;&#039;bsdconfig&#039;&#039; einrichten.&lt;br /&gt;
[[Datei:FreeBSD bsdconfig.png|gerahmt|alternativtext=FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;|FreeBSD &amp;lt;em&amp;gt;adduser&amp;lt;/em&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==== Zeitzone (Timezone) ====&lt;br /&gt;
Die Zeitzoneneinstellung bestimmt, in welcher Zeitzone man sich befindet und damit die Systemzeit in der lokalen Zeit angezeigt wird. Für uns ist das wahrscheinlich &#039;&#039;&#039;Europe -@gt; Germany&#039;&#039;&#039; oder &#039;&#039;&#039;Europe -&amp;amp;gt; Austria&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Network Management ====&lt;br /&gt;
In den Netzwerkeinstellungen gilt es zuerst den Hostnamen zu bestimmen. Die Einstellung hierfür befindet sich in &#039;&#039;bsdconfig&#039;&#039; unter &#039;&#039;&#039;Network Management -&amp;amp;gt; Hostname/Domain&#039;&#039;&#039;. Man kann den Namen mit vollständiger Domäne angeben. Man sollte aber keine Domäne erfinden, sondern sich [https://www.ionos.de/ eine eigene Domäne registrieren] lassen, wenn man eine braucht. Eine eigene Domain kostet normalerweise keine 20 € im Jahr. Bei den meisten Webhosting angeboten ist sogar eine Domain inkludiert. Wenn man seinen eigenen DNS-Server am laufen hat und eine bestehende Domäne überschreibt, kann man nicht mehr auf die Services dieser Domäne im Internet zugreifen. Hier ist also etwas Vorsicht geboten. Ich nutze hierfür aber meine eigene Domain, da ich hier auch die DNS-Daten des Internet-DNS-Servers übernehme.&lt;br /&gt;
&lt;br /&gt;
===== Network Devices =====&lt;br /&gt;
Hier gilt es, die IP-Adresse des Rechners zu bestimmen. Das Netzwerkgerät heißt am Raspberry PI 3 &#039;&#039;&#039;ue0&#039;&#039;&#039; und am Raspberry PI 4 &#039;&#039;&#039;genet0&#039;&#039;&#039;. Man sollte im Router oder am DHCP-Server nachsehen, in welchen Bereich die IP-Adressen vergeben werden, um Netzwerkkollisionen zu vermeiden. Man kann das Gerät auch auf DHCP stellen, um eine automatisch vergebene IP-Adresse zu erhalten. Will man das Raspberry PI aber als Server betreiben, empfiehlt es sich eine statische IP-Adresse zu wählen (z. B. 192.168.1.254). Die Adressen x.x.x.0 sind für das Netzwerk selbst und die Adressen x.x.x.255 sind als Broadcastadressen reserviert und sollten möglichst nicht genommen werden. Man sollte auch, wenn man nicht weiß, was man tut, im zugewiesenen Adressbereich des DHCP-Servers bleiben. Wenn z. B. bereits zugewiesene die Adresse mit 192.168.1. beginnt, sollte man auch in diesem Bereich bleiben.&lt;br /&gt;
&lt;br /&gt;
Die Netzmaske, die normalerweise 255.255.255.0 ist, sollte man auch so belassen, damit man im selben Adressraum des eigentlichen Netzwerks bleibt.&lt;br /&gt;
&lt;br /&gt;
===== Wireless Networks =====&lt;br /&gt;
Diese Einstellung kann man getrost auslassen, da dar Drahtlos-Netzwerkadapter des Raspberry PI nicht unterstützt wird.&lt;br /&gt;
&lt;br /&gt;
===== Default Router/Gateway =====&lt;br /&gt;
Hier gibt man die IP-Adresse des Internet-Routers ein. Die Adresse des Routers steht normalerweise auf der Unter- bzw. der Rückseite des Routers. Wenn man eine falsche Adresse angibt, kann man sich später nicht mit dem Internet verbinden.&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
Unter &#039;&#039;&#039;Startup -&amp;amp;gt; Toggle Startup Services&#039;&#039;&#039; sollte man &#039;&#039;growfs&#039;&#039; deaktivieren, da dieser Dienst nur einmal zum Vergrößern der Hauptpartition auf die Größe der gesamten SD-Karte benötigt wird und das Raspberry PI ansonsten bei jedem Neustart versucht, diese Partition zu vergrößern. Das wurde aber bereits beim ersten Starten erledigt.&lt;br /&gt;
Des weiteren sollten die Services &#039;&#039;&#039;ntpdate&#039;&#039;&#039;, zum synchronisieren der Uhr mit der Atomuhr und &#039;&#039;&#039;powerd&#039;&#039;&#039;, um dem Raspberry PI es zu ermöglichen den Prozessortakt auf 1200 MHz (RPI3) bzw. 1500 MHz (RPI4) anstelle der ansonsten nur 600 MHz erhöhen zu können.&lt;br /&gt;
&lt;br /&gt;
Da da Raspberry PI über keine Echtzeituhr verfügt sollte man &#039;&#039;&#039;ntpdate&#039;&#039;&#039; via cron-job mindestens ein mal pro Tag neu starten. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
==== Dateisystemeinstellungen ====&lt;br /&gt;
Die Dateisysteme unter Unix ähnlichen Betriebssystemen werden nicht wie unter Windows in Laufwerke aufgeteilt, sondern sie werden direkt ins Dateisystem, d.h. ein Verzeichnis, eingebunden. Angefangen von der root-Dateisystem (&#039;&#039;/&#039;&#039;) können auch andere Verzeichnisse auf eine eigene Partition verweisen. Zum Beispiel kann &#039;&#039;/home&#039;&#039; auf einer eigenen Partition liegen. Die Deteisystemtabelle befindet sich in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039;. Das Layout dieser Tabelle ist, in einer Reihe mit Leerzeichen getrennt:&lt;br /&gt;
* Partition/Ursprung&lt;br /&gt;
* Einbindepunkt (Mountpint)&lt;br /&gt;
* Dateisystemformat&lt;br /&gt;
* Optionen&lt;br /&gt;
* Dump-Frequenz (in Tagen)&lt;br /&gt;
* Pass Nummer für paralellen fsck&lt;br /&gt;
&lt;br /&gt;
Da die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; standardmäßig nicht für das root-Dateisystem gesetzt ist, und das Raspberry PI somit jeden Dateizugriff mit protokolliert, was die Lebenserwartung der SD-Karte, auf der das sich Betriebssystem befindet, stark verkürzt, werden wir das ändern. Als &#039;&#039;&#039;root&#039;&#039;&#039; führen wir &amp;lt;code&amp;gt;nano /etc/fstab&amp;lt;/code&amp;gt; aus und editieren die Datei. In der Zeile mit dem Mountpoint &#039;&#039;/&#039;&#039; fügen wir die Option &#039;&#039;&#039;noatime&#039;&#039;&#039; hinzu. Die Zeile sollte danach wie folgt aussehen:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;/dev/ufs/rootfs    /    ufs    rw,noatime   1 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Swap Datei erstellen ===&lt;br /&gt;
Wenn man ein Raspberry PI als Server einsetzen möchte, kann das Erstellen einer Auslagerungsdatei sinnvoll sein, denn wenn ein Prozess zu viel Arbeitsspeicher verbraucht, könnte dieser abrupt beendet werden, was bei einem Server nicht gerade gut ist. Da das Raspberry PI 3 nur über 1 GB RAM verfügt, kann das durchaus Sinn machen, wenn ein Prozess kurzzeitig mehr Arbeitsspeicher verbraucht als er sollte. Wenn man eine Auslagerungsdatei erstellen möchte, muss man zuerst die Datei erzeugen (im Beispiel eine 2 GB große Datei) und dann der Datei die richtigen Zugriffsrechte zuweisen.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;root@rpi# dd if=/dev/zero of=/var/swap.bin bs=4M count=512&amp;lt;br&amp;gt;&lt;br /&gt;
 root@rpi# chmod 0600 /var/swap.bin&amp;lt;nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 root@rpi# echo &amp;quot;swapfile=\&amp;quot;/var/swap.bin\&amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/rc.conf&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nach dem Neustart des Systems wird die Swap-Datei eingebunden.&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch die Swap-Datei ohne Neustart aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# mdconfig -a -t vnode -f /var/swap.bin -u 99&lt;br /&gt;
 root@rpi# swapon /dev/md99&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eingebundenen Swap-Bereiche anzuzeigen gibt man als &#039;&#039;&#039;root&#039;&#039;&#039; &amp;lt;code&amp;gt;swapinfo -k&amp;lt;/code&amp;gt; im Terminal ein.&lt;br /&gt;
&lt;br /&gt;
=== System neu starten ===&lt;br /&gt;
Die Basiseinstellungen sind nun abgeschlossen und das System kann neu gestartet werden, um sicherzustellen, dass alles funktioniert wie geplant und das System auch nach einem Stromausfall wieder hochfährt.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# reboot&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cronjobs ===&lt;br /&gt;
Cronjobs sind Programme und Scripte, die periodisch ausgeführt werden. Einen Cronjob erstellt man, indem man &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; als jeweiliger Benutzer ausführt und anschließend die dabei geöffnete Datei editiert. Das Format eines Cronjobs ist:&lt;br /&gt;
* Minute (0-59) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Minute&lt;br /&gt;
* Stunde (0-23) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jede Stunde&lt;br /&gt;
* Tag des Monats (1-31) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Tag&lt;br /&gt;
* Monat (1-12) oder &#039;&#039;&#039;*&#039;&#039;&#039; für jeden Monat&lt;br /&gt;
* Wochentag (0-7), wobei 0 und 7 Sonntag ist oder &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;man 5 crontab&amp;lt;/code&amp;gt; gibt eine genaue Auskunft über das verwendete Format.&lt;br /&gt;
&lt;br /&gt;
Um Cronjobs zu erstellen, die den Service &#039;&#039;ntpdate&#039;&#039; um jeden Tag um 11:00 und 23:00, nach dem Verstreichen einer zufälligen Zeit zwischen 0 Sekunden und einer Stunde, neu starten, um die Systemzeit zu aktualisieren fügt man folgende Zeile in die, als &#039;&#039;root&#039;&#039; durch &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; geöffnete Datei folgende Zeilen ein:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;0 11,23 * * * sleep $(( RANDOM % 3600 ))s &amp;amp;&amp;amp; service ntpdate restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Softwareinstallation ==&lt;br /&gt;
Unter FreeBSD ist die Software von Drittanbietern in Ports gegliedert. Die Binärpakete unter FreeBSD sind so erstellt, dass sie so wenig Abhängigkeiten wie möglich haben. Wenn man jedoch eine Quelltextinstallation vorzieht, ist dies natürlich auch möglich. Die Ports-Kollektion lässt sich mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; herunterladen und installieren. Die Ports werden in das Verzeichnis &#039;&#039;/usr/ports&#039;&#039; installiert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;portsnap&#039;&#039;&#039; lässt sich auch die Ports-Kollektion updaten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# portsnap fetch update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um einen Port zu bauen, wechselt man in das Verzeichnis des gewählten Ports und führt &#039;&#039;&#039;make&#039;&#039;&#039; aus.&amp;lt;/br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# cd /usr/ports/security/sudo&lt;br /&gt;
root@rpi# make config-recursive&lt;br /&gt;
root@rpi# make install&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Erstellen der Ports aus den Quellen kann einige Zeit in Anspruch nehmen und es verringert die Lebensdauer der SD-Karte maßgeblich, da viele Schreibvorgänge zum Erstellen erforderlich sind. Was nicht heißen soll, dass es nicht möglich ist, sein System aus den Quellen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Wer Binärpakete bevorzugt, kann mit &#039;&#039;&#039;pkg&#039;&#039;&#039; seine Programme installieren und aktuell halten.&amp;lt;code&amp;gt;man pkg&amp;lt;/code&amp;gt; gibt Auskunft über die genaue Benutzung des Paketmanagers.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg install paketname ...&amp;lt;/code&amp;gt; installiert die genannten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg search paketname&amp;lt;/code&amp;gt; sucht nach dem gewünschten Paket.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg update&amp;lt;/code&amp;gt; macht ein Update des Paket-Repositorys.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkg upgrade&amp;lt;/code&amp;gt; macht ein Update der installierten Pakete.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sudo/doas ===&lt;br /&gt;
Wer Linux nutzt, kommt früher oder später mit dem Programm &#039;&#039;&#039;sudo&#039;&#039;&#039; in Kontakt. Mit &#039;&#039;&#039;sudo&#039;&#039;&#039; lassen sich Programme als ein anderer Nutzer ausführen. Das ist praktisch, wenn man nicht immer mit &#039;&#039;&#039;su&#039;&#039;&#039; zum Nutzer &#039;&#039;root&#039;&#039; wechseln will oder muß. &#039;&#039;&#039;doas&#039;&#039;&#039; ist eine einfache &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. &#039;&#039;&#039;Eine falsche Konfiguration dieser Programme kann eine erhebliche Sicherheitslücke sein!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== sudo ====&lt;br /&gt;
Um sudo wie unter Linux gewohnt nutzen zu können, muss man die sudo zuerst installieren und danach Konfigurieren. Um &#039;&#039;&#039;sudo&#039;&#039;&#039; in seinen gewohnten Editor zu editieren, sollte man ihn zuerst zuvor beschrieben in der Datei &#039;&#039;.profile&#039;&#039; einstellen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y sudo&lt;br /&gt;
root@rpi# visudo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der jetzt geöffneten Datei, die gut dokumentiert ist, fügt man folgende Zeile hinzu:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;%wheel ALL=(ALL:ALL) ALL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Somit können alle, die sich in der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; befinden, &#039;&#039;&#039;sudo&#039;&#039;&#039;, wie unter Linux gewohnt, benutzen.&lt;br /&gt;
&lt;br /&gt;
==== doas ====&lt;br /&gt;
&#039;&#039;&#039;doas&#039;&#039;&#039; ist wie zuvor schon erwähnt eine &#039;&#039;&#039;sudo&#039;&#039;&#039;-Alternative. Um &#039;&#039;&#039;doas&#039;&#039;&#039; nutzen zu können, muss man zuerst die Datei &#039;&#039;/usr/local/doas.conf&#039;&#039; anlegen. Wenn man den folgenden Zeile in die Datei einfügt, kann man &#039;&#039;&#039;doas&#039;&#039;&#039; wie &#039;&#039;&#039;sudo&#039;&#039;&#039; nutzen und erlaubt das wechseln der Gruppe &#039;&#039;&#039;wheel&#039;&#039;&#039; auf alle Nutzer.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;permit :wheel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Eine genaue Anleitung über diese Datei erhält man mit &amp;lt;code&amp;gt;man doas.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [https://www.freebsd.org FreeBSD Homepage]&lt;br /&gt;
* [https://docs.freebsd.org/de/books/handbook/ FreeBSD Handbuch (Deutsch)]&lt;br /&gt;
* [https://docs.freebsd.org/en/books/handbook/ FreeBSD Handbook (Englisch)]&lt;br /&gt;
* [https://forums.freebsd.org FreeBSD Forum]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=273</id>
		<title>Git Server einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=273"/>
		<updated>2023-05-25T11:38:52Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Git über das git Protokoll verteilen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Versionskontrollsysteme wie Git sind in der modernen Softwareentwicklung für die &amp;quot;Best Practices&amp;quot; nicht mehr wegzudenken. Sie erlauben es, Änderungen der Software auf Quelltextebene mitzuverfolgen. Git erlaubt zudem frühere Versionen der Software wieder herzustellen und mit Zweigen (&#039;&#039;branches&#039;&#039;) unterschiedliche Versionen von Dateien und Verzeichnissen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Viele Softwareprojekte setzen auf Services wie &#039;&#039;Github&#039;&#039;, &#039;&#039;GitLab&#039;&#039; oder &#039;&#039;Bitbucket&#039;&#039; um ihre Software zu versionieren und diese zu verteilen. Wir werden uns aber in diesem Tutorial unseren eigenen Git-Server unter Ubuntu 22.04 bzw. FreeBSD installieren, da man nicht jedes Projekt im Internet finden soll. Das gilt vor allem dann, wenn man seine eigenen Konfigurationsdateien mit Git versioniert.&lt;br /&gt;
&lt;br /&gt;
== Installation von Git ==&lt;br /&gt;
Zuerst sollte man überprüfen, ob Git bereits installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git --version&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wird dieser Befehl mit einem Fehler quittiert, ist Git nicht installiert und muss noch dem System hinzugefügt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubuntu geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo apt update &amp;amp;&amp;amp; sudo apt install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pkg pkg install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein erneutes &amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt; gibt dann die installierte Git-Version aus. Für den Git-Server haben wir somit die benötigte Software installiert.&lt;br /&gt;
&lt;br /&gt;
=== Git-Nutzer anlegen ===&lt;br /&gt;
Als Nächstes müssen wir noch einen Git-Nutzer, unter dem der Server laufen soll, anlegen. Dieser Nutzer hostet die ganzen Git-Repositorien und macht sie im Netzwerk verfügbar. Über SecureShell werden die Repositorien den angelegt und verwaltet. Die Repositorien befinden sich im Verzeichnis &#039;&#039;/srv/git/repositories&#039;&#039;. Ein &#039;&#039;.ssh&#039;&#039; Verzeichnis, in dem sich in der Datei &#039;&#039;authorized_keys&#039;&#039; befindet, welche die zur Anmeldung erlaubten öffentlichen Schlüssel der Nutzer enthält, muss, mit den entsprechenden Berechtigungen, auch noch angelegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubunto geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo useradd --comment &amp;quot;Git Nutzer&amp;quot; --home-dir /home/git --create-home --password PASSWORD --uid 10000 --user-group&lt;br /&gt;
$ sudo -u git mkdir /home/git/{repositories,.ssh} &amp;amp;&amp;amp; sudo -u git chmod 0700 /home/git/.ssh&lt;br /&gt;
$ sudo -u git touch /home/git/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pw useradd git -c &amp;quot;GIT Nutzer&amp;quot; -d /home/git -g git -s /bin/sh -u 10000&lt;br /&gt;
# mkdir -p /home/git/repositories /home/git.ssh&lt;br /&gt;
# chown git:git /home/git/repositories&lt;br /&gt;
# chown git:git /home/git/.ssh &amp;amp;&amp;amp; chmod 0700 /home/git/.ssh&lt;br /&gt;
# touch /home/git/.ssh/authorized_keys \ &lt;br /&gt;
    &amp;amp;&amp;amp; chown git:git /home/git/.ssh/authorized_keys \&lt;br /&gt;
    &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch die Schlüssel der Benutzer in die Datei eingefügt werden. Wenn die Nutzer noch kein ssh-Schlüsselpaar haben, lässt sich selbiges mit dem Befehl &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cat ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; lässt sich der öffentliche Schlüssel anzeigen.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ssh-copy-id&#039;&#039; lassen sich die Schlüssel dann am Server eintragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@git-server&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man kopiert die öffentlichen Schlüssel auf den Git-Server und hängt sie der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ users=&amp;quot;chris anna patrick udo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Kopieren der Nutzer auf den Server&lt;br /&gt;
$ for i in $users; do&lt;br /&gt;
&amp;gt;     sudo scp /home/${i}/.ssh/id_rsa.pub git@gitserver:/tmp/git.${i}.ssh-key&lt;br /&gt;
&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Anmelden am gitserver mit dem Nutzer &amp;quot;git&amp;quot;&lt;br /&gt;
$ ssh git@gitserver&lt;br /&gt;
&lt;br /&gt;
# Anhängen der öffentlichen Schlüssel an ~/.ssh/authorized_keys&lt;br /&gt;
git@gitserver$ for i in /tmp/git.*.ssh-key; do&lt;br /&gt;
git@gitserver&amp;gt;    cat $i &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm $i&lt;br /&gt;
git@gitserver&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Abmelden am Server &lt;br /&gt;
git@gitserver$ exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hat man den eigenen Schlüssel auf dem Git-Server übertragen, sollte man versuchen, sich als &#039;&#039;git&#039;&#039; am Server anzumelden. Kann man sich ohne Passworteingabe anmelden, hat man alles richtig gemacht.&lt;br /&gt;
&lt;br /&gt;
=== Test Repository erstellen ===&lt;br /&gt;
Als Nächstes erstellen wir ein Test-Repository, um unseren Server zu testen. Wir erstellen ein &#039;&#039;bare&#039;&#039; Repository, da wir am Server keine Commits machen, sondern nur &#039;&#039;push&#039;&#039; und &#039;&#039;pull&#039;&#039; Operationen durchführen, außer wir legen ein neues Repository an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ mkdir -p repositories/test.git&lt;br /&gt;
git@gitserver$ cd repositories/test.git&lt;br /&gt;
git@gitserver$ git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir am Client ein Repository anlegen und selbiges an den Server übertragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ mkdir test.git&lt;br /&gt;
$ cd test.git&lt;br /&gt;
$ git init&lt;br /&gt;
$ echo &amp;quot;Das ist ein Test&amp;quot; &amp;gt;&amp;gt; test.txt&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -m &amp;quot;Initial Commit&amp;quot;&lt;br /&gt;
$ git remote add origin git@gitserver:repositories/test.git&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt können Sie das Repository klonen und daran Änderungen vornehmen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ git clone git@gitserver:repositories/test.git&lt;br /&gt;
$ cd test&lt;br /&gt;
$ nano README&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -am &amp;quot;README hinzugefügt&amp;quot;&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode können Sie einen Read/Write-Git-Server für mehrere Entwickler in Betrieb nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Shellzugriff einschränken ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Git über das &#039;&#039;git Protokoll&#039;&#039; verteilen ===&lt;br /&gt;
Der &#039;&#039;git-daemon&#039;&#039; eignet sich für den unautorisierten Zugriff auf Git-Repositorien. Diese sind für alle Teilnehmer in einem Netzwerk verfügbar. Sollte sich der Git-Server im Internet befinden, werden alle freigegebenen Repositorien für jeden verfügbar gemacht, befindet sich der Git-Server hinter einer Firewall, werden die freigegebenen Repositorien für jeden im selben Netzwerk abrufbar. Das eignet sich für öffentliche Repositorien bzw. Repositorien, die von jedem sich im selben Netzwerk befindenden, abgerufen können sollen.&lt;br /&gt;
&lt;br /&gt;
Um ein Repository freizugeben, muss sich im Hauptverzeichnis des Repositorys eine leere Datei mit dem Namen &#039;&#039;git-daemon-export-ok&#039;&#039; befinden. Diese Datei teilt dem Git-Daemon mit, dass dieses Repository mit der Welt geteilt werden darf. Also legen wir eine leere Datei mit dem vorher genannten Namen in unserem Test-Repository an, um den Daemon zu testen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ touch /home/git/repositories/test.git/git-daemon-export-ok&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Git über http ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=272</id>
		<title>Git Server einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=272"/>
		<updated>2023-05-25T11:38:03Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Git über das git Protokoll verteilen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Versionskontrollsysteme wie Git sind in der modernen Softwareentwicklung für die &amp;quot;Best Practices&amp;quot; nicht mehr wegzudenken. Sie erlauben es, Änderungen der Software auf Quelltextebene mitzuverfolgen. Git erlaubt zudem frühere Versionen der Software wieder herzustellen und mit Zweigen (&#039;&#039;branches&#039;&#039;) unterschiedliche Versionen von Dateien und Verzeichnissen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Viele Softwareprojekte setzen auf Services wie &#039;&#039;Github&#039;&#039;, &#039;&#039;GitLab&#039;&#039; oder &#039;&#039;Bitbucket&#039;&#039; um ihre Software zu versionieren und diese zu verteilen. Wir werden uns aber in diesem Tutorial unseren eigenen Git-Server unter Ubuntu 22.04 bzw. FreeBSD installieren, da man nicht jedes Projekt im Internet finden soll. Das gilt vor allem dann, wenn man seine eigenen Konfigurationsdateien mit Git versioniert.&lt;br /&gt;
&lt;br /&gt;
== Installation von Git ==&lt;br /&gt;
Zuerst sollte man überprüfen, ob Git bereits installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git --version&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wird dieser Befehl mit einem Fehler quittiert, ist Git nicht installiert und muss noch dem System hinzugefügt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubuntu geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo apt update &amp;amp;&amp;amp; sudo apt install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pkg pkg install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein erneutes &amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt; gibt dann die installierte Git-Version aus. Für den Git-Server haben wir somit die benötigte Software installiert.&lt;br /&gt;
&lt;br /&gt;
=== Git-Nutzer anlegen ===&lt;br /&gt;
Als Nächstes müssen wir noch einen Git-Nutzer, unter dem der Server laufen soll, anlegen. Dieser Nutzer hostet die ganzen Git-Repositorien und macht sie im Netzwerk verfügbar. Über SecureShell werden die Repositorien den angelegt und verwaltet. Die Repositorien befinden sich im Verzeichnis &#039;&#039;/srv/git/repositories&#039;&#039;. Ein &#039;&#039;.ssh&#039;&#039; Verzeichnis, in dem sich in der Datei &#039;&#039;authorized_keys&#039;&#039; befindet, welche die zur Anmeldung erlaubten öffentlichen Schlüssel der Nutzer enthält, muss, mit den entsprechenden Berechtigungen, auch noch angelegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubunto geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo useradd --comment &amp;quot;Git Nutzer&amp;quot; --home-dir /home/git --create-home --password PASSWORD --uid 10000 --user-group&lt;br /&gt;
$ sudo -u git mkdir /home/git/{repositories,.ssh} &amp;amp;&amp;amp; sudo -u git chmod 0700 /home/git/.ssh&lt;br /&gt;
$ sudo -u git touch /home/git/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pw useradd git -c &amp;quot;GIT Nutzer&amp;quot; -d /home/git -g git -s /bin/sh -u 10000&lt;br /&gt;
# mkdir -p /home/git/repositories /home/git.ssh&lt;br /&gt;
# chown git:git /home/git/repositories&lt;br /&gt;
# chown git:git /home/git/.ssh &amp;amp;&amp;amp; chmod 0700 /home/git/.ssh&lt;br /&gt;
# touch /home/git/.ssh/authorized_keys \ &lt;br /&gt;
    &amp;amp;&amp;amp; chown git:git /home/git/.ssh/authorized_keys \&lt;br /&gt;
    &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch die Schlüssel der Benutzer in die Datei eingefügt werden. Wenn die Nutzer noch kein ssh-Schlüsselpaar haben, lässt sich selbiges mit dem Befehl &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cat ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; lässt sich der öffentliche Schlüssel anzeigen.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ssh-copy-id&#039;&#039; lassen sich die Schlüssel dann am Server eintragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@git-server&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man kopiert die öffentlichen Schlüssel auf den Git-Server und hängt sie der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ users=&amp;quot;chris anna patrick udo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Kopieren der Nutzer auf den Server&lt;br /&gt;
$ for i in $users; do&lt;br /&gt;
&amp;gt;     sudo scp /home/${i}/.ssh/id_rsa.pub git@gitserver:/tmp/git.${i}.ssh-key&lt;br /&gt;
&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Anmelden am gitserver mit dem Nutzer &amp;quot;git&amp;quot;&lt;br /&gt;
$ ssh git@gitserver&lt;br /&gt;
&lt;br /&gt;
# Anhängen der öffentlichen Schlüssel an ~/.ssh/authorized_keys&lt;br /&gt;
git@gitserver$ for i in /tmp/git.*.ssh-key; do&lt;br /&gt;
git@gitserver&amp;gt;    cat $i &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm $i&lt;br /&gt;
git@gitserver&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Abmelden am Server &lt;br /&gt;
git@gitserver$ exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hat man den eigenen Schlüssel auf dem Git-Server übertragen, sollte man versuchen, sich als &#039;&#039;git&#039;&#039; am Server anzumelden. Kann man sich ohne Passworteingabe anmelden, hat man alles richtig gemacht.&lt;br /&gt;
&lt;br /&gt;
=== Test Repository erstellen ===&lt;br /&gt;
Als Nächstes erstellen wir ein Test-Repository, um unseren Server zu testen. Wir erstellen ein &#039;&#039;bare&#039;&#039; Repository, da wir am Server keine Commits machen, sondern nur &#039;&#039;push&#039;&#039; und &#039;&#039;pull&#039;&#039; Operationen durchführen, außer wir legen ein neues Repository an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ mkdir -p repositories/test.git&lt;br /&gt;
git@gitserver$ cd repositories/test.git&lt;br /&gt;
git@gitserver$ git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir am Client ein Repository anlegen und selbiges an den Server übertragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ mkdir test.git&lt;br /&gt;
$ cd test.git&lt;br /&gt;
$ git init&lt;br /&gt;
$ echo &amp;quot;Das ist ein Test&amp;quot; &amp;gt;&amp;gt; test.txt&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -m &amp;quot;Initial Commit&amp;quot;&lt;br /&gt;
$ git remote add origin git@gitserver:repositories/test.git&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt können Sie das Repository klonen und daran Änderungen vornehmen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ git clone git@gitserver:repositories/test.git&lt;br /&gt;
$ cd test&lt;br /&gt;
$ nano README&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -am &amp;quot;README hinzugefügt&amp;quot;&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode können Sie einen Read/Write-Git-Server für mehrere Entwickler in Betrieb nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Shellzugriff einschränken ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Git über das &#039;&#039;git&#039;&#039; Protokoll verteilen ===&lt;br /&gt;
Der &#039;&#039;git-daemon&#039;&#039; eignet sich für den unautorisierten Zugriff auf Git-Repositorien. Diese sind für alle Teilnehmer in einem Netzwerk verfügbar. Sollte sich der Git-Server im Internet befinden, werden alle freigegebenen Repositorien für jeden verfügbar gemacht, befindet sich der Git-Server hinter einer Firewall, werden die freigegebenen Repositorien für jeden im selben Netzwerk abrufbar. Das eignet sich für öffentliche Repositorien bzw. Repositorien, die von jedem sich im selben Netzwerk befindenden, abgerufen können sollen.&lt;br /&gt;
&lt;br /&gt;
Um ein Repository freizugeben, muss sich im Hauptverzeichnis des Repositorys eine leere Datei mit dem Namen &#039;&#039;git-daemon-export-ok&#039;&#039; befinden. Diese Datei teilt dem Git-Daemon mit, dass dieses Repository mit der Welt geteilt werden darf. Also legen wir eine leere Datei mit dem vorher genannten Namen in unserem Test-Repository an, um den Daemon zu testen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ touch /home/git/repositories/test.git/git-daemon-export-ok&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Git über http ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=271</id>
		<title>Git Server einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=271"/>
		<updated>2023-05-25T11:08:06Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Git über das git Protokoll verteilen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Versionskontrollsysteme wie Git sind in der modernen Softwareentwicklung für die &amp;quot;Best Practices&amp;quot; nicht mehr wegzudenken. Sie erlauben es, Änderungen der Software auf Quelltextebene mitzuverfolgen. Git erlaubt zudem frühere Versionen der Software wieder herzustellen und mit Zweigen (&#039;&#039;branches&#039;&#039;) unterschiedliche Versionen von Dateien und Verzeichnissen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Viele Softwareprojekte setzen auf Services wie &#039;&#039;Github&#039;&#039;, &#039;&#039;GitLab&#039;&#039; oder &#039;&#039;Bitbucket&#039;&#039; um ihre Software zu versionieren und diese zu verteilen. Wir werden uns aber in diesem Tutorial unseren eigenen Git-Server unter Ubuntu 22.04 bzw. FreeBSD installieren, da man nicht jedes Projekt im Internet finden soll. Das gilt vor allem dann, wenn man seine eigenen Konfigurationsdateien mit Git versioniert.&lt;br /&gt;
&lt;br /&gt;
== Installation von Git ==&lt;br /&gt;
Zuerst sollte man überprüfen, ob Git bereits installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git --version&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wird dieser Befehl mit einem Fehler quittiert, ist Git nicht installiert und muss noch dem System hinzugefügt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubuntu geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo apt update &amp;amp;&amp;amp; sudo apt install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pkg pkg install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein erneutes &amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt; gibt dann die installierte Git-Version aus. Für den Git-Server haben wir somit die benötigte Software installiert.&lt;br /&gt;
&lt;br /&gt;
=== Git-Nutzer anlegen ===&lt;br /&gt;
Als Nächstes müssen wir noch einen Git-Nutzer, unter dem der Server laufen soll, anlegen. Dieser Nutzer hostet die ganzen Git-Repositorien und macht sie im Netzwerk verfügbar. Über SecureShell werden die Repositorien den angelegt und verwaltet. Die Repositorien befinden sich im Verzeichnis &#039;&#039;/srv/git/repositories&#039;&#039;. Ein &#039;&#039;.ssh&#039;&#039; Verzeichnis, in dem sich in der Datei &#039;&#039;authorized_keys&#039;&#039; befindet, welche die zur Anmeldung erlaubten öffentlichen Schlüssel der Nutzer enthält, muss, mit den entsprechenden Berechtigungen, auch noch angelegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubunto geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo useradd --comment &amp;quot;Git Nutzer&amp;quot; --home-dir /home/git --create-home --password PASSWORD --uid 10000 --user-group&lt;br /&gt;
$ sudo -u git mkdir /home/git/{repositories,.ssh} &amp;amp;&amp;amp; sudo -u git chmod 0700 /home/git/.ssh&lt;br /&gt;
$ sudo -u git touch /home/git/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pw useradd git -c &amp;quot;GIT Nutzer&amp;quot; -d /home/git -g git -s /bin/sh -u 10000&lt;br /&gt;
# mkdir -p /home/git/repositories /home/git.ssh&lt;br /&gt;
# chown git:git /home/git/repositories&lt;br /&gt;
# chown git:git /home/git/.ssh &amp;amp;&amp;amp; chmod 0700 /home/git/.ssh&lt;br /&gt;
# touch /home/git/.ssh/authorized_keys \ &lt;br /&gt;
    &amp;amp;&amp;amp; chown git:git /home/git/.ssh/authorized_keys \&lt;br /&gt;
    &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch die Schlüssel der Benutzer in die Datei eingefügt werden. Wenn die Nutzer noch kein ssh-Schlüsselpaar haben, lässt sich selbiges mit dem Befehl &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cat ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; lässt sich der öffentliche Schlüssel anzeigen.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ssh-copy-id&#039;&#039; lassen sich die Schlüssel dann am Server eintragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@git-server&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man kopiert die öffentlichen Schlüssel auf den Git-Server und hängt sie der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ users=&amp;quot;chris anna patrick udo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Kopieren der Nutzer auf den Server&lt;br /&gt;
$ for i in $users; do&lt;br /&gt;
&amp;gt;     sudo scp /home/${i}/.ssh/id_rsa.pub git@gitserver:/tmp/git.${i}.ssh-key&lt;br /&gt;
&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Anmelden am gitserver mit dem Nutzer &amp;quot;git&amp;quot;&lt;br /&gt;
$ ssh git@gitserver&lt;br /&gt;
&lt;br /&gt;
# Anhängen der öffentlichen Schlüssel an ~/.ssh/authorized_keys&lt;br /&gt;
git@gitserver$ for i in /tmp/git.*.ssh-key; do&lt;br /&gt;
git@gitserver&amp;gt;    cat $i &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm $i&lt;br /&gt;
git@gitserver&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Abmelden am Server &lt;br /&gt;
git@gitserver$ exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hat man den eigenen Schlüssel auf dem Git-Server übertragen, sollte man versuchen, sich als &#039;&#039;git&#039;&#039; am Server anzumelden. Kann man sich ohne Passworteingabe anmelden, hat man alles richtig gemacht.&lt;br /&gt;
&lt;br /&gt;
=== Test Repository erstellen ===&lt;br /&gt;
Als Nächstes erstellen wir ein Test-Repository, um unseren Server zu testen. Wir erstellen ein &#039;&#039;bare&#039;&#039; Repository, da wir am Server keine Commits machen, sondern nur &#039;&#039;push&#039;&#039; und &#039;&#039;pull&#039;&#039; Operationen durchführen, außer wir legen ein neues Repository an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ mkdir -p repositories/test.git&lt;br /&gt;
git@gitserver$ cd repositories/test.git&lt;br /&gt;
git@gitserver$ git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir am Client ein Repository anlegen und selbiges an den Server übertragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ mkdir test.git&lt;br /&gt;
$ cd test.git&lt;br /&gt;
$ git init&lt;br /&gt;
$ echo &amp;quot;Das ist ein Test&amp;quot; &amp;gt;&amp;gt; test.txt&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -m &amp;quot;Initial Commit&amp;quot;&lt;br /&gt;
$ git remote add origin git@gitserver:repositories/test.git&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt können Sie das Repository klonen und daran Änderungen vornehmen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ git clone git@gitserver:repositories/test.git&lt;br /&gt;
$ cd test&lt;br /&gt;
$ nano README&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -am &amp;quot;README hinzugefügt&amp;quot;&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode können Sie einen Read/Write-Git-Server für mehrere Entwickler in Betrieb nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Shellzugriff einschränken ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Git über das &#039;&#039;git&#039;&#039; Protokoll verteilen ===&lt;br /&gt;
Der &#039;&#039;git-daemon&#039;&#039; eignet sich für den unautorisierten Zugriff auf Git-Repositorien. Diese sind für alle Teilnehmer in einem Netzwerk verfügbar. Sollte sich der Git-Server im Internet befinden, werden alle freigegebenen Repositorien für jeden verfügbar gemacht, befindet sich der Git-Server hinter einer Firewall, werden die freigegebenen Repositorien für jeden im selben Netzwerk abrufbar. Das eignet sich für öffentliche Repositorien bzw. Repositorien, die von jedem sich im selben Netzwerk befindenden, abgerufen können sollen.&lt;br /&gt;
&lt;br /&gt;
Um ein Repository freizugeben, muss sich im Hauptverzeichnis des Repositorys eine leere Datei mit dem Namen &#039;&#039;git-daemon-export-ok&#039;&#039; befinden. Diese Datei teilt dem Git-Daemon mit, dass dieses Repository mit der Welt geteilt werden darf. Also legen wir eine leere Datei mit dem vorher genannten Namen in unserem Test-Repository an, um den Daemon zu testen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ touch /home/git/repositories/test.git/git-daemon-export-ok&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TODO&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Git über http ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=270</id>
		<title>Git Server einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=270"/>
		<updated>2023-05-25T11:06:32Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Git über das git Protokoll verteilen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Versionskontrollsysteme wie Git sind in der modernen Softwareentwicklung für die &amp;quot;Best Practices&amp;quot; nicht mehr wegzudenken. Sie erlauben es, Änderungen der Software auf Quelltextebene mitzuverfolgen. Git erlaubt zudem frühere Versionen der Software wieder herzustellen und mit Zweigen (&#039;&#039;branches&#039;&#039;) unterschiedliche Versionen von Dateien und Verzeichnissen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Viele Softwareprojekte setzen auf Services wie &#039;&#039;Github&#039;&#039;, &#039;&#039;GitLab&#039;&#039; oder &#039;&#039;Bitbucket&#039;&#039; um ihre Software zu versionieren und diese zu verteilen. Wir werden uns aber in diesem Tutorial unseren eigenen Git-Server unter Ubuntu 22.04 bzw. FreeBSD installieren, da man nicht jedes Projekt im Internet finden soll. Das gilt vor allem dann, wenn man seine eigenen Konfigurationsdateien mit Git versioniert.&lt;br /&gt;
&lt;br /&gt;
== Installation von Git ==&lt;br /&gt;
Zuerst sollte man überprüfen, ob Git bereits installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git --version&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wird dieser Befehl mit einem Fehler quittiert, ist Git nicht installiert und muss noch dem System hinzugefügt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubuntu geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo apt update &amp;amp;&amp;amp; sudo apt install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pkg pkg install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein erneutes &amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt; gibt dann die installierte Git-Version aus. Für den Git-Server haben wir somit die benötigte Software installiert.&lt;br /&gt;
&lt;br /&gt;
=== Git-Nutzer anlegen ===&lt;br /&gt;
Als Nächstes müssen wir noch einen Git-Nutzer, unter dem der Server laufen soll, anlegen. Dieser Nutzer hostet die ganzen Git-Repositorien und macht sie im Netzwerk verfügbar. Über SecureShell werden die Repositorien den angelegt und verwaltet. Die Repositorien befinden sich im Verzeichnis &#039;&#039;/srv/git/repositories&#039;&#039;. Ein &#039;&#039;.ssh&#039;&#039; Verzeichnis, in dem sich in der Datei &#039;&#039;authorized_keys&#039;&#039; befindet, welche die zur Anmeldung erlaubten öffentlichen Schlüssel der Nutzer enthält, muss, mit den entsprechenden Berechtigungen, auch noch angelegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubunto geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo useradd --comment &amp;quot;Git Nutzer&amp;quot; --home-dir /home/git --create-home --password PASSWORD --uid 10000 --user-group&lt;br /&gt;
$ sudo -u git mkdir /home/git/{repositories,.ssh} &amp;amp;&amp;amp; sudo -u git chmod 0700 /home/git/.ssh&lt;br /&gt;
$ sudo -u git touch /home/git/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pw useradd git -c &amp;quot;GIT Nutzer&amp;quot; -d /home/git -g git -s /bin/sh -u 10000&lt;br /&gt;
# mkdir -p /home/git/repositories /home/git.ssh&lt;br /&gt;
# chown git:git /home/git/repositories&lt;br /&gt;
# chown git:git /home/git/.ssh &amp;amp;&amp;amp; chmod 0700 /home/git/.ssh&lt;br /&gt;
# touch /home/git/.ssh/authorized_keys \ &lt;br /&gt;
    &amp;amp;&amp;amp; chown git:git /home/git/.ssh/authorized_keys \&lt;br /&gt;
    &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch die Schlüssel der Benutzer in die Datei eingefügt werden. Wenn die Nutzer noch kein ssh-Schlüsselpaar haben, lässt sich selbiges mit dem Befehl &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cat ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; lässt sich der öffentliche Schlüssel anzeigen.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ssh-copy-id&#039;&#039; lassen sich die Schlüssel dann am Server eintragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@git-server&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man kopiert die öffentlichen Schlüssel auf den Git-Server und hängt sie der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ users=&amp;quot;chris anna patrick udo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Kopieren der Nutzer auf den Server&lt;br /&gt;
$ for i in $users; do&lt;br /&gt;
&amp;gt;     sudo scp /home/${i}/.ssh/id_rsa.pub git@gitserver:/tmp/git.${i}.ssh-key&lt;br /&gt;
&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Anmelden am gitserver mit dem Nutzer &amp;quot;git&amp;quot;&lt;br /&gt;
$ ssh git@gitserver&lt;br /&gt;
&lt;br /&gt;
# Anhängen der öffentlichen Schlüssel an ~/.ssh/authorized_keys&lt;br /&gt;
git@gitserver$ for i in /tmp/git.*.ssh-key; do&lt;br /&gt;
git@gitserver&amp;gt;    cat $i &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm $i&lt;br /&gt;
git@gitserver&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Abmelden am Server &lt;br /&gt;
git@gitserver$ exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hat man den eigenen Schlüssel auf dem Git-Server übertragen, sollte man versuchen, sich als &#039;&#039;git&#039;&#039; am Server anzumelden. Kann man sich ohne Passworteingabe anmelden, hat man alles richtig gemacht.&lt;br /&gt;
&lt;br /&gt;
=== Test Repository erstellen ===&lt;br /&gt;
Als Nächstes erstellen wir ein Test-Repository, um unseren Server zu testen. Wir erstellen ein &#039;&#039;bare&#039;&#039; Repository, da wir am Server keine Commits machen, sondern nur &#039;&#039;push&#039;&#039; und &#039;&#039;pull&#039;&#039; Operationen durchführen, außer wir legen ein neues Repository an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ mkdir -p repositories/test.git&lt;br /&gt;
git@gitserver$ cd repositories/test.git&lt;br /&gt;
git@gitserver$ git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir am Client ein Repository anlegen und selbiges an den Server übertragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ mkdir test.git&lt;br /&gt;
$ cd test.git&lt;br /&gt;
$ git init&lt;br /&gt;
$ echo &amp;quot;Das ist ein Test&amp;quot; &amp;gt;&amp;gt; test.txt&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -m &amp;quot;Initial Commit&amp;quot;&lt;br /&gt;
$ git remote add origin git@gitserver:repositories/test.git&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt können Sie das Repository klonen und daran Änderungen vornehmen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ git clone git@gitserver:repositories/test.git&lt;br /&gt;
$ cd test&lt;br /&gt;
$ nano README&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -am &amp;quot;README hinzugefügt&amp;quot;&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode können Sie einen Read/Write-Git-Server für mehrere Entwickler in Betrieb nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Shellzugriff einschränken ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Git über das &#039;&#039;git&#039;&#039; Protokoll verteilen ===&lt;br /&gt;
Der &#039;&#039;git-daemon&#039;&#039; eignet sich für den unautorisierten Zugriff auf Git-Repositorien. Diese sind für alle Teilnehmer in einem Netzwerk verfügbar. Sollte sich der Git-Server im Internet befinden, werden alle freigegebenen Repositorien für jeden verfügbar gemacht, befindet sich der Git-Server hinter einer Firewall, werden die freigegebenen Repositorien für jeden im selben Netzwerk abrufbar. Das eignet sich für öffentliche Repositorien bzw. Repositorien, die von jedem sich im selben Netzwerk befindenden, abgerufen können sollen.&lt;br /&gt;
&lt;br /&gt;
Um ein Repository freizugeben, muss sich im Hauptverzeichnis des Repositorys eine leere Datei mit dem Namen &#039;&#039;git-daemon-export-ok&#039;&#039; befinden. Diese Datei teilt dem Git-Daemon mit, dass dieses Repository mit der Welt geteilt werden darf. Also legen wir eine leere Datei mit dem vorher genannten Namen in unserem Test-Repository an, um den Daemon zu testen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ touch /home/git/repositories/test.git/git-daemon-eport-ok&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TODO&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Git über http ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=269</id>
		<title>Git Server einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=269"/>
		<updated>2023-05-25T09:30:43Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* GIT über das git Protokoll verteilen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Versionskontrollsysteme wie Git sind in der modernen Softwareentwicklung für die &amp;quot;Best Practices&amp;quot; nicht mehr wegzudenken. Sie erlauben es, Änderungen der Software auf Quelltextebene mitzuverfolgen. Git erlaubt zudem frühere Versionen der Software wieder herzustellen und mit Zweigen (&#039;&#039;branches&#039;&#039;) unterschiedliche Versionen von Dateien und Verzeichnissen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Viele Softwareprojekte setzen auf Services wie &#039;&#039;Github&#039;&#039;, &#039;&#039;GitLab&#039;&#039; oder &#039;&#039;Bitbucket&#039;&#039; um ihre Software zu versionieren und diese zu verteilen. Wir werden uns aber in diesem Tutorial unseren eigenen Git-Server unter Ubuntu 22.04 bzw. FreeBSD installieren, da man nicht jedes Projekt im Internet finden soll. Das gilt vor allem dann, wenn man seine eigenen Konfigurationsdateien mit Git versioniert.&lt;br /&gt;
&lt;br /&gt;
== Installation von Git ==&lt;br /&gt;
Zuerst sollte man überprüfen, ob Git bereits installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git --version&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wird dieser Befehl mit einem Fehler quittiert, ist Git nicht installiert und muss noch dem System hinzugefügt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubuntu geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo apt update &amp;amp;&amp;amp; sudo apt install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pkg pkg install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein erneutes &amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt; gibt dann die installierte Git-Version aus. Für den Git-Server haben wir somit die benötigte Software installiert.&lt;br /&gt;
&lt;br /&gt;
=== Git-Nutzer anlegen ===&lt;br /&gt;
Als Nächstes müssen wir noch einen Git-Nutzer, unter dem der Server laufen soll, anlegen. Dieser Nutzer hostet die ganzen Git-Repositorien und macht sie im Netzwerk verfügbar. Über SecureShell werden die Repositorien den angelegt und verwaltet. Die Repositorien befinden sich im Verzeichnis &#039;&#039;/srv/git/repositories&#039;&#039;. Ein &#039;&#039;.ssh&#039;&#039; Verzeichnis, in dem sich in der Datei &#039;&#039;authorized_keys&#039;&#039; befindet, welche die zur Anmeldung erlaubten öffentlichen Schlüssel der Nutzer enthält, muss, mit den entsprechenden Berechtigungen, auch noch angelegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubunto geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo useradd --comment &amp;quot;Git Nutzer&amp;quot; --home-dir /home/git --create-home --password PASSWORD --uid 10000 --user-group&lt;br /&gt;
$ sudo -u git mkdir /home/git/{repositories,.ssh} &amp;amp;&amp;amp; sudo -u git chmod 0700 /home/git/.ssh&lt;br /&gt;
$ sudo -u git touch /home/git/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pw useradd git -c &amp;quot;GIT Nutzer&amp;quot; -d /home/git -g git -s /bin/sh -u 10000&lt;br /&gt;
# mkdir -p /home/git/repositories /home/git.ssh&lt;br /&gt;
# chown git:git /home/git/repositories&lt;br /&gt;
# chown git:git /home/git/.ssh &amp;amp;&amp;amp; chmod 0700 /home/git/.ssh&lt;br /&gt;
# touch /home/git/.ssh/authorized_keys \ &lt;br /&gt;
    &amp;amp;&amp;amp; chown git:git /home/git/.ssh/authorized_keys \&lt;br /&gt;
    &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch die Schlüssel der Benutzer in die Datei eingefügt werden. Wenn die Nutzer noch kein ssh-Schlüsselpaar haben, lässt sich selbiges mit dem Befehl &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cat ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; lässt sich der öffentliche Schlüssel anzeigen.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ssh-copy-id&#039;&#039; lassen sich die Schlüssel dann am Server eintragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@git-server&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man kopiert die öffentlichen Schlüssel auf den Git-Server und hängt sie der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ users=&amp;quot;chris anna patrick udo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Kopieren der Nutzer auf den Server&lt;br /&gt;
$ for i in $users; do&lt;br /&gt;
&amp;gt;     sudo scp /home/${i}/.ssh/id_rsa.pub git@gitserver:/tmp/git.${i}.ssh-key&lt;br /&gt;
&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Anmelden am gitserver mit dem Nutzer &amp;quot;git&amp;quot;&lt;br /&gt;
$ ssh git@gitserver&lt;br /&gt;
&lt;br /&gt;
# Anhängen der öffentlichen Schlüssel an ~/.ssh/authorized_keys&lt;br /&gt;
git@gitserver$ for i in /tmp/git.*.ssh-key; do&lt;br /&gt;
git@gitserver&amp;gt;    cat $i &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm $i&lt;br /&gt;
git@gitserver&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Abmelden am Server &lt;br /&gt;
git@gitserver$ exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hat man den eigenen Schlüssel auf dem Git-Server übertragen, sollte man versuchen, sich als &#039;&#039;git&#039;&#039; am Server anzumelden. Kann man sich ohne Passworteingabe anmelden, hat man alles richtig gemacht.&lt;br /&gt;
&lt;br /&gt;
=== Test Repository erstellen ===&lt;br /&gt;
Als Nächstes erstellen wir ein Test-Repository, um unseren Server zu testen. Wir erstellen ein &#039;&#039;bare&#039;&#039; Repository, da wir am Server keine Commits machen, sondern nur &#039;&#039;push&#039;&#039; und &#039;&#039;pull&#039;&#039; Operationen durchführen, außer wir legen ein neues Repository an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ mkdir -p repositories/test.git&lt;br /&gt;
git@gitserver$ cd repositories/test.git&lt;br /&gt;
git@gitserver$ git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir am Client ein Repository anlegen und selbiges an den Server übertragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ mkdir test.git&lt;br /&gt;
$ cd test.git&lt;br /&gt;
$ git init&lt;br /&gt;
$ echo &amp;quot;Das ist ein Test&amp;quot; &amp;gt;&amp;gt; test.txt&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -m &amp;quot;Initial Commit&amp;quot;&lt;br /&gt;
$ git remote add origin git@gitserver:repositories/test.git&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt können Sie das Repository klonen und daran Änderungen vornehmen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ git clone git@gitserver:repositories/test.git&lt;br /&gt;
$ cd test&lt;br /&gt;
$ nano README&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -am &amp;quot;README hinzugefügt&amp;quot;&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode können Sie einen Read/Write-Git-Server für mehrere Entwickler in Betrieb nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Shellzugriff einschränken ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Git über das git Protokoll verteilen ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Git über http ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=268</id>
		<title>Git Server einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=268"/>
		<updated>2023-05-25T09:29:52Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Shellzugriff einschränken */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Versionskontrollsysteme wie Git sind in der modernen Softwareentwicklung für die &amp;quot;Best Practices&amp;quot; nicht mehr wegzudenken. Sie erlauben es, Änderungen der Software auf Quelltextebene mitzuverfolgen. Git erlaubt zudem frühere Versionen der Software wieder herzustellen und mit Zweigen (&#039;&#039;branches&#039;&#039;) unterschiedliche Versionen von Dateien und Verzeichnissen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Viele Softwareprojekte setzen auf Services wie &#039;&#039;Github&#039;&#039;, &#039;&#039;GitLab&#039;&#039; oder &#039;&#039;Bitbucket&#039;&#039; um ihre Software zu versionieren und diese zu verteilen. Wir werden uns aber in diesem Tutorial unseren eigenen Git-Server unter Ubuntu 22.04 bzw. FreeBSD installieren, da man nicht jedes Projekt im Internet finden soll. Das gilt vor allem dann, wenn man seine eigenen Konfigurationsdateien mit Git versioniert.&lt;br /&gt;
&lt;br /&gt;
== Installation von Git ==&lt;br /&gt;
Zuerst sollte man überprüfen, ob Git bereits installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git --version&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wird dieser Befehl mit einem Fehler quittiert, ist Git nicht installiert und muss noch dem System hinzugefügt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubuntu geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo apt update &amp;amp;&amp;amp; sudo apt install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pkg pkg install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein erneutes &amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt; gibt dann die installierte Git-Version aus. Für den Git-Server haben wir somit die benötigte Software installiert.&lt;br /&gt;
&lt;br /&gt;
=== Git-Nutzer anlegen ===&lt;br /&gt;
Als Nächstes müssen wir noch einen Git-Nutzer, unter dem der Server laufen soll, anlegen. Dieser Nutzer hostet die ganzen Git-Repositorien und macht sie im Netzwerk verfügbar. Über SecureShell werden die Repositorien den angelegt und verwaltet. Die Repositorien befinden sich im Verzeichnis &#039;&#039;/srv/git/repositories&#039;&#039;. Ein &#039;&#039;.ssh&#039;&#039; Verzeichnis, in dem sich in der Datei &#039;&#039;authorized_keys&#039;&#039; befindet, welche die zur Anmeldung erlaubten öffentlichen Schlüssel der Nutzer enthält, muss, mit den entsprechenden Berechtigungen, auch noch angelegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubunto geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo useradd --comment &amp;quot;Git Nutzer&amp;quot; --home-dir /home/git --create-home --password PASSWORD --uid 10000 --user-group&lt;br /&gt;
$ sudo -u git mkdir /home/git/{repositories,.ssh} &amp;amp;&amp;amp; sudo -u git chmod 0700 /home/git/.ssh&lt;br /&gt;
$ sudo -u git touch /home/git/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pw useradd git -c &amp;quot;GIT Nutzer&amp;quot; -d /home/git -g git -s /bin/sh -u 10000&lt;br /&gt;
# mkdir -p /home/git/repositories /home/git.ssh&lt;br /&gt;
# chown git:git /home/git/repositories&lt;br /&gt;
# chown git:git /home/git/.ssh &amp;amp;&amp;amp; chmod 0700 /home/git/.ssh&lt;br /&gt;
# touch /home/git/.ssh/authorized_keys \ &lt;br /&gt;
    &amp;amp;&amp;amp; chown git:git /home/git/.ssh/authorized_keys \&lt;br /&gt;
    &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch die Schlüssel der Benutzer in die Datei eingefügt werden. Wenn die Nutzer noch kein ssh-Schlüsselpaar haben, lässt sich selbiges mit dem Befehl &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cat ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; lässt sich der öffentliche Schlüssel anzeigen.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ssh-copy-id&#039;&#039; lassen sich die Schlüssel dann am Server eintragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@git-server&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man kopiert die öffentlichen Schlüssel auf den Git-Server und hängt sie der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ users=&amp;quot;chris anna patrick udo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Kopieren der Nutzer auf den Server&lt;br /&gt;
$ for i in $users; do&lt;br /&gt;
&amp;gt;     sudo scp /home/${i}/.ssh/id_rsa.pub git@gitserver:/tmp/git.${i}.ssh-key&lt;br /&gt;
&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Anmelden am gitserver mit dem Nutzer &amp;quot;git&amp;quot;&lt;br /&gt;
$ ssh git@gitserver&lt;br /&gt;
&lt;br /&gt;
# Anhängen der öffentlichen Schlüssel an ~/.ssh/authorized_keys&lt;br /&gt;
git@gitserver$ for i in /tmp/git.*.ssh-key; do&lt;br /&gt;
git@gitserver&amp;gt;    cat $i &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm $i&lt;br /&gt;
git@gitserver&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Abmelden am Server &lt;br /&gt;
git@gitserver$ exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hat man den eigenen Schlüssel auf dem Git-Server übertragen, sollte man versuchen, sich als &#039;&#039;git&#039;&#039; am Server anzumelden. Kann man sich ohne Passworteingabe anmelden, hat man alles richtig gemacht.&lt;br /&gt;
&lt;br /&gt;
=== Test Repository erstellen ===&lt;br /&gt;
Als Nächstes erstellen wir ein Test-Repository, um unseren Server zu testen. Wir erstellen ein &#039;&#039;bare&#039;&#039; Repository, da wir am Server keine Commits machen, sondern nur &#039;&#039;push&#039;&#039; und &#039;&#039;pull&#039;&#039; Operationen durchführen, außer wir legen ein neues Repository an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ mkdir -p repositories/test.git&lt;br /&gt;
git@gitserver$ cd repositories/test.git&lt;br /&gt;
git@gitserver$ git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir am Client ein Repository anlegen und selbiges an den Server übertragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ mkdir test.git&lt;br /&gt;
$ cd test.git&lt;br /&gt;
$ git init&lt;br /&gt;
$ echo &amp;quot;Das ist ein Test&amp;quot; &amp;gt;&amp;gt; test.txt&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -m &amp;quot;Initial Commit&amp;quot;&lt;br /&gt;
$ git remote add origin git@gitserver:repositories/test.git&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt können Sie das Repository klonen und daran Änderungen vornehmen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ git clone git@gitserver:repositories/test.git&lt;br /&gt;
$ cd test&lt;br /&gt;
$ nano README&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -am &amp;quot;README hinzugefügt&amp;quot;&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode können Sie einen Read/Write-Git-Server für mehrere Entwickler in Betrieb nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Shellzugriff einschränken ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== GIT über das git Protokoll verteilen ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== GIT über http ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=267</id>
		<title>Git Server einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=267"/>
		<updated>2023-05-25T07:37:19Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Installation von Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Versionskontrollsysteme wie Git sind in der modernen Softwareentwicklung für die &amp;quot;Best Practices&amp;quot; nicht mehr wegzudenken. Sie erlauben es, Änderungen der Software auf Quelltextebene mitzuverfolgen. Git erlaubt zudem frühere Versionen der Software wieder herzustellen und mit Zweigen (&#039;&#039;branches&#039;&#039;) unterschiedliche Versionen von Dateien und Verzeichnissen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Viele Softwareprojekte setzen auf Services wie &#039;&#039;Github&#039;&#039;, &#039;&#039;GitLab&#039;&#039; oder &#039;&#039;Bitbucket&#039;&#039; um ihre Software zu versionieren und diese zu verteilen. Wir werden uns aber in diesem Tutorial unseren eigenen Git-Server unter Ubuntu 22.04 bzw. FreeBSD installieren, da man nicht jedes Projekt im Internet finden soll. Das gilt vor allem dann, wenn man seine eigenen Konfigurationsdateien mit Git versioniert.&lt;br /&gt;
&lt;br /&gt;
== Installation von Git ==&lt;br /&gt;
Zuerst sollte man überprüfen, ob Git bereits installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git --version&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wird dieser Befehl mit einem Fehler quittiert, ist Git nicht installiert und muss noch dem System hinzugefügt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubuntu geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo apt update &amp;amp;&amp;amp; sudo apt install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pkg pkg install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein erneutes &amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt; gibt dann die installierte Git-Version aus. Für den Git-Server haben wir somit die benötigte Software installiert.&lt;br /&gt;
&lt;br /&gt;
=== Git-Nutzer anlegen ===&lt;br /&gt;
Als Nächstes müssen wir noch einen Git-Nutzer, unter dem der Server laufen soll, anlegen. Dieser Nutzer hostet die ganzen Git-Repositorien und macht sie im Netzwerk verfügbar. Über SecureShell werden die Repositorien den angelegt und verwaltet. Die Repositorien befinden sich im Verzeichnis &#039;&#039;/srv/git/repositories&#039;&#039;. Ein &#039;&#039;.ssh&#039;&#039; Verzeichnis, in dem sich in der Datei &#039;&#039;authorized_keys&#039;&#039; befindet, welche die zur Anmeldung erlaubten öffentlichen Schlüssel der Nutzer enthält, muss, mit den entsprechenden Berechtigungen, auch noch angelegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubunto geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo useradd --comment &amp;quot;Git Nutzer&amp;quot; --home-dir /home/git --create-home --password PASSWORD --uid 10000 --user-group&lt;br /&gt;
$ sudo -u git mkdir /home/git/{repositories,.ssh} &amp;amp;&amp;amp; sudo -u git chmod 0700 /home/git/.ssh&lt;br /&gt;
$ sudo -u git touch /home/git/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pw useradd git -c &amp;quot;GIT Nutzer&amp;quot; -d /home/git -g git -s /bin/sh -u 10000&lt;br /&gt;
# mkdir -p /home/git/repositories /home/git.ssh&lt;br /&gt;
# chown git:git /home/git/repositories&lt;br /&gt;
# chown git:git /home/git/.ssh &amp;amp;&amp;amp; chmod 0700 /home/git/.ssh&lt;br /&gt;
# touch /home/git/.ssh/authorized_keys \ &lt;br /&gt;
    &amp;amp;&amp;amp; chown git:git /home/git/.ssh/authorized_keys \&lt;br /&gt;
    &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch die Schlüssel der Benutzer in die Datei eingefügt werden. Wenn die Nutzer noch kein ssh-Schlüsselpaar haben, lässt sich selbiges mit dem Befehl &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cat ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; lässt sich der öffentliche Schlüssel anzeigen.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ssh-copy-id&#039;&#039; lassen sich die Schlüssel dann am Server eintragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@git-server&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man kopiert die öffentlichen Schlüssel auf den Git-Server und hängt sie der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ users=&amp;quot;chris anna patrick udo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Kopieren der Nutzer auf den Server&lt;br /&gt;
$ for i in $users; do&lt;br /&gt;
&amp;gt;     sudo scp /home/${i}/.ssh/id_rsa.pub git@gitserver:/tmp/git.${i}.ssh-key&lt;br /&gt;
&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Anmelden am gitserver mit dem Nutzer &amp;quot;git&amp;quot;&lt;br /&gt;
$ ssh git@gitserver&lt;br /&gt;
&lt;br /&gt;
# Anhängen der öffentlichen Schlüssel an ~/.ssh/authorized_keys&lt;br /&gt;
git@gitserver$ for i in /tmp/git.*.ssh-key; do&lt;br /&gt;
git@gitserver&amp;gt;    cat $i &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm $i&lt;br /&gt;
git@gitserver&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Abmelden am Server &lt;br /&gt;
git@gitserver$ exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hat man den eigenen Schlüssel auf dem Git-Server übertragen, sollte man versuchen, sich als &#039;&#039;git&#039;&#039; am Server anzumelden. Kann man sich ohne Passworteingabe anmelden, hat man alles richtig gemacht.&lt;br /&gt;
&lt;br /&gt;
=== Test Repository erstellen ===&lt;br /&gt;
Als Nächstes erstellen wir ein Test-Repository, um unseren Server zu testen. Wir erstellen ein &#039;&#039;bare&#039;&#039; Repository, da wir am Server keine Commits machen, sondern nur &#039;&#039;push&#039;&#039; und &#039;&#039;pull&#039;&#039; Operationen durchführen, außer wir legen ein neues Repository an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ mkdir -p repositories/test.git&lt;br /&gt;
git@gitserver$ cd repositories/test.git&lt;br /&gt;
git@gitserver$ git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir am Client ein Repository anlegen und selbiges an den Server übertragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ mkdir test.git&lt;br /&gt;
$ cd test.git&lt;br /&gt;
$ git init&lt;br /&gt;
$ echo &amp;quot;Das ist ein Test&amp;quot; &amp;gt;&amp;gt; test.txt&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -m &amp;quot;Initial Commit&amp;quot;&lt;br /&gt;
$ git remote add origin git@gitserver:repositories/test.git&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt können Sie das Repository klonen und daran Änderungen vornehmen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ git clone git@gitserver:repositories/test.git&lt;br /&gt;
$ cd test&lt;br /&gt;
$ nano README&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -am &amp;quot;README hinzugefügt&amp;quot;&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode können Sie einen Read/Write-Git-Server für mehrere Entwickler in Betrieb nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Shellzugriff einschränken ===&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=266</id>
		<title>Git Server einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=266"/>
		<updated>2023-05-25T07:36:41Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Installation von Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Versionskontrollsysteme wie Git sind in der modernen Softwareentwicklung für die &amp;quot;Best Practices&amp;quot; nicht mehr wegzudenken. Sie erlauben es, Änderungen der Software auf Quelltextebene mitzuverfolgen. Git erlaubt zudem frühere Versionen der Software wieder herzustellen und mit Zweigen (&#039;&#039;branches&#039;&#039;) unterschiedliche Versionen von Dateien und Verzeichnissen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Viele Softwareprojekte setzen auf Services wie &#039;&#039;Github&#039;&#039;, &#039;&#039;GitLab&#039;&#039; oder &#039;&#039;Bitbucket&#039;&#039; um ihre Software zu versionieren und diese zu verteilen. Wir werden uns aber in diesem Tutorial unseren eigenen Git-Server unter Ubuntu 22.04 bzw. FreeBSD installieren, da man nicht jedes Projekt im Internet finden soll. Das gilt vor allem dann, wenn man seine eigenen Konfigurationsdateien mit Git versioniert.&lt;br /&gt;
&lt;br /&gt;
== Installation von Git ==&lt;br /&gt;
Zuerst sollte man überprüfen, ob Git bereits installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git --version&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wird dieser Befehl mit einem Fehler quittiert, ist Git nicht installiert und muss noch dem System hinzugefügt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubuntu geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo apt update &amp;amp;&amp;amp; sudo apt install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pkg pkg install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein erneutes &amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt; gibt dann die installierte Git-Version aus. Für den Git-Server haben wir somit die benötigte Software installiert.&lt;br /&gt;
&lt;br /&gt;
=== Git-Nutzer anlegen ===&lt;br /&gt;
Als Nächstes müssen wir noch einen Git-Nutzer, unter dem der Server laufen soll, anlegen. Dieser Nutzer hostet die ganzen Git-Repositorien und macht sie im Netzwerk verfügbar. Über SecureShell werden die Repositorien den angelegt und verwaltet. Die Repositorien befinden sich im Verzeichnis &#039;&#039;/srv/git/repositories&#039;&#039;. Ein &#039;&#039;.ssh&#039;&#039; Verzeichnis, in dem sich in der Datei &#039;&#039;authorized_keys&#039;&#039; befindet, welche die zur Anmeldung erlaubten öffentlichen Schlüssel der Nutzer enthält, muss, mit den entsprechenden Berechtigungen, auch noch angelegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Unter Ubunto geht das wie folgt:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo useradd --comment &amp;quot;Git Nutzer&amp;quot; --home-dir /home/git --create-home --password PASSWORD --uid 10000 --user-group&lt;br /&gt;
$ sudo -u git mkdir /home/git/{repositories,.ssh} &amp;amp;&amp;amp; sudo -u git chmod 0700 /home/git/.ssh&lt;br /&gt;
$ sudo -u git touch /home/git/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Und unter FreeBSD:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# pw useradd git -c &amp;quot;GIT Nutzer&amp;quot; -d /home/git -g git -s /bin/sh -u 10000&lt;br /&gt;
# mkdir -p /home/git/repositories /home/git.ssh&lt;br /&gt;
# chown git:git /home/git/repositories&lt;br /&gt;
# chown git:git /home/git/.ssh &amp;amp;&amp;amp; chmod 0700 /home/git/.ssh&lt;br /&gt;
# touch /home/git/.ssh/authorized_keys \ &lt;br /&gt;
    &amp;amp;&amp;amp; chown git:git /home/git/.ssh/authorized_keys \&lt;br /&gt;
    &amp;amp;&amp;amp; chmod 0600 /home/git/.ssh/authorized_keys&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch die Schlüssel der Benutzer in die Datei eingefügt werden. Wenn die Nutzer noch kein ssh-Schlüsselpaar haben, lässt sich selbiges mit dem Befehl &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cat ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; lässt sich der öffentliche Schlüssel anzeigen.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ssh-copy-id&#039;&#039; lassen sich die Schlüssel dann am Server eintragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@git-server&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man kopiert die öffentlichen Schlüssel auf den Git-Server und hängt sie der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ users=&amp;quot;chris anna patrick udo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Kopieren der Nutzer auf den Server&lt;br /&gt;
$ for i in $users; do&lt;br /&gt;
&amp;gt;     sudo scp /home/${i}/.ssh/id_rsa.pub git@gitserver:/tmp/git.${i}.ssh-key&lt;br /&gt;
&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Anmelden am gitserver mit dem Nutzer &amp;quot;git&amp;quot;&lt;br /&gt;
$ ssh git@gitserver&lt;br /&gt;
&lt;br /&gt;
# Anhängen der öffentlichen Schlüssel an ~/.ssh/authorized_keys&lt;br /&gt;
git@gitserver$ for i in /tmp/git.*.ssh-key; do&lt;br /&gt;
git@gitserver&amp;gt;    cat $i &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm $i&lt;br /&gt;
git@gitserver&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Abmelden am Server &lt;br /&gt;
git@gitserver$ exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hat man den eigenen Schlüssel auf dem Git-Server übertragen, sollte man versuchen, sich als &#039;&#039;git&#039;&#039; am Server anzumelden. Kann man sich ohne Passworteingabe anmelden, hat man alles richtig gemacht.&lt;br /&gt;
&lt;br /&gt;
=== Test Repository erstellen ===&lt;br /&gt;
Als Nächstes erstellen wir ein Test-Repository, um unseren Server zu testen. Wir erstellen ein &#039;&#039;bare&#039;&#039; Repository, da wir am Server keine Commits machen, sondern nur &#039;&#039;push&#039;&#039; und &#039;&#039;pull&#039;&#039; Operationen durchführen, außer wir legen ein neues Repository an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ mkdir -p repositories/test.git&lt;br /&gt;
git@gitserver$ cd repositories/test.git&lt;br /&gt;
git@gitserver$ git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir am Client ein Repository anlegen und selbiges an den Server übertragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ mkdir test.git&lt;br /&gt;
$ cd test.git&lt;br /&gt;
$ git init&lt;br /&gt;
$ echo &amp;quot;Das ist ein Test&amp;quot; &amp;gt;&amp;gt; test.txt&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -m &amp;quot;Initial Commit&amp;quot;&lt;br /&gt;
$ git remote add origin git@gitserver:repositories/test.git&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt können Sie das Repository klonen und daran Änderungen vornehmen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ git clone git@gitserver:repositories/test.git&lt;br /&gt;
$ cd test&lt;br /&gt;
$ nano README&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -am &amp;quot;README hinzugefügt&amp;quot;&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode können Sie einen Read/Write-Git-Server für mehrere Entwickler in Betrieb nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Shellzugriff einschränken ===&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=265</id>
		<title>Git Server einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=265"/>
		<updated>2023-05-25T07:21:40Z</updated>

		<summary type="html">&lt;p&gt;C9mos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Versionskontrollsysteme wie Git sind in der modernen Softwareentwicklung für die &amp;quot;Best Practices&amp;quot; nicht mehr wegzudenken. Sie erlauben es, Änderungen der Software auf Quelltextebene mitzuverfolgen. Git erlaubt zudem frühere Versionen der Software wieder herzustellen und mit Zweigen (&#039;&#039;branches&#039;&#039;) unterschiedliche Versionen von Dateien und Verzeichnissen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Viele Softwareprojekte setzen auf Services wie &#039;&#039;Github&#039;&#039;, &#039;&#039;GitLab&#039;&#039; oder &#039;&#039;Bitbucket&#039;&#039; um ihre Software zu versionieren und diese zu verteilen. Wir werden uns aber in diesem Tutorial unseren eigenen Git-Server unter Ubuntu 22.04 bzw. FreeBSD installieren, da man nicht jedes Projekt im Internet finden soll. Das gilt vor allem dann, wenn man seine eigenen Konfigurationsdateien mit Git versioniert.&lt;br /&gt;
&lt;br /&gt;
== Installation von Git ==&lt;br /&gt;
Zuerst sollte man überprüfen, ob Git bereits installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git --version&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wird dieser Befehl mit einem Fehler quittiert, ist Git nicht installiert und muss noch dem System hinzugefügt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein erneutes &amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt; gibt dann die installierte Git-Version aus. Für den Git-Server haben wir somit die benötigte Software installiert.&lt;br /&gt;
&lt;br /&gt;
=== Git-Nutzer anlegen ===&lt;br /&gt;
Als Nächstes müssen wir noch einen Git-Nutzer, unter dem der Server laufen soll, anlegen. Dieser Nutzer hostet die ganzen Git-Repositorien und macht sie im Netzwerk verfügbar. Über SecureShell werden die Repositorien den angelegt und verwaltet. Die Repositorien befinden sich im Verzeichnis &#039;&#039;/srv/git/repositories&#039;&#039;. Ein &#039;&#039;.ssh&#039;&#039; Verzeichnis, in dem sich in der Datei &#039;&#039;authorized_keys&#039;&#039; befindet, welche die zur Anmeldung erlaubten öffentlichen Schlüssel der Nutzer enthält, muss, mit den entsprechenden Berechtigungen, auch noch angelegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo useradd --comment &amp;quot;Git Nutzer&amp;quot; --home-dir /srv/git --create-home --password PASSWORD --uid 10000 --user-group&lt;br /&gt;
$ sudo -u git mkdir /srv/git/{repositories,.ssh} &amp;amp;&amp;amp; sudo -u git chmod 0700 /srv/git/.ssh&lt;br /&gt;
$ sudo -u git touch /srv/git/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 0600 /srv/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch die Schlüssel der Benutzer in die Datei eingefügt werden. Wenn die Nutzer noch kein ssh-Schlüsselpaar haben, lässt sich selbiges mit dem Befehl &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cat ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; lässt sich der öffentliche Schlüssel anzeigen.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ssh-copy-id&#039;&#039; lassen sich die Schlüssel dann am Server eintragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@git-server&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man kopiert die öffentlichen Schlüssel auf den Git-Server und hängt sie der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ users=&amp;quot;chris anna patrick udo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Kopieren der Nutzer auf den Server&lt;br /&gt;
$ for i in $users; do&lt;br /&gt;
&amp;gt;     sudo scp /home/${i}/.ssh/id_rsa.pub git@gitserver:/tmp/git.${i}.ssh-key&lt;br /&gt;
&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Anmelden am gitserver mit dem Nutzer &amp;quot;git&amp;quot;&lt;br /&gt;
$ ssh git@gitserver&lt;br /&gt;
&lt;br /&gt;
# Anhängen der öffentlichen Schlüssel an ~/.ssh/authorized_keys&lt;br /&gt;
git@gitserver$ for i in /tmp/git.*.ssh-key; do&lt;br /&gt;
git@gitserver&amp;gt;    cat $i &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm $i&lt;br /&gt;
git@gitserver&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Abmelden am Server &lt;br /&gt;
git@gitserver$ exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hat man den eigenen Schlüssel auf dem Git-Server übertragen, sollte man versuchen, sich als &#039;&#039;git&#039;&#039; am Server anzumelden. Kann man sich ohne Passworteingabe anmelden, hat man alles richtig gemacht.&lt;br /&gt;
A&lt;br /&gt;
=== Test Repository erstellen ===&lt;br /&gt;
&lt;br /&gt;
Als Nächstes erstellen wir ein Test-Repository, um unseren Server zu testen. Wir erstellen ein &#039;&#039;bare&#039;&#039; Repository, da wir am Server keine Commits machen, sondern nur &#039;&#039;push&#039;&#039; und &#039;&#039;pull&#039;&#039; Operationen durchführen, außer wir legen ein neues Repository an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ mkdir -p repositories/test.git&lt;br /&gt;
git@gitserver$ cd repositories/test.git&lt;br /&gt;
git@gitserver$ git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir am Client ein Repository anlegen und selbiges an den Server übertragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ mkdir test.git&lt;br /&gt;
$ cd test.git&lt;br /&gt;
$ git init&lt;br /&gt;
$ echo &amp;quot;Das ist ein Test&amp;quot; &amp;gt;&amp;gt; test.txt&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -m &amp;quot;Initial Commit&amp;quot;&lt;br /&gt;
$ git remote add origin git@gitserver:repositories/test.git&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt können Sie das Repository klonen und daran Änderungen vornehmen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ git clone git@gitserver:repositories/test.git&lt;br /&gt;
$ cd test&lt;br /&gt;
$ nano README&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -am &amp;quot;README hinzugefügt&amp;quot;&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode können Sie einen Read/Write-Git-Server für mehrere Entwickler in Betrieb nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Shellzugriff einschränken ===&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Hauptseite&amp;diff=264</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Hauptseite&amp;diff=264"/>
		<updated>2023-05-25T07:20:28Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Meine Beiträge nach Sektionen Sortiert */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meine Beiträge nach Sektionen Sortiert ==&lt;br /&gt;
=== [https://wiki.cmoser.org/index.php/anleitungen Anleitungen] ===&lt;br /&gt;
==== Diverse Services ====&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/Django_mit_NGINX_unter_Ubuntu-22.04 Django mit NGINX unter Ubuntu-22.04]&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/Git_Server_einrichten Git Server einrichten]&lt;br /&gt;
&lt;br /&gt;
==== Raspberry PI ====&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/Raspberry_PI_und_FreeBSD_Basissetup Basis Setup von FreeBSD auf einem Raspberry PI]&lt;br /&gt;
==== FreeBSD ====&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/FreeBSD_als_DNS-Server FreeBSD als DNS-Server]&lt;br /&gt;
* [https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&lt;br /&gt;
&lt;br /&gt;
== Seiten von Freunden ==&lt;br /&gt;
=== [https://wiki.cmoser.org/index.php/magoam Magoam&#039;s Seiten] ===&lt;br /&gt;
&lt;br /&gt;
== Starthilfen ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste der Konfigurationsparameter]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Häufige Fragen zu MediaWiki]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Mailingliste zu neuen Versionen von MediaWiki]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Übersetze MediaWiki für deine Sprache]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Erfahre, wie du Spam auf deinem Wiki bekämpfen kannst]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_unter_Ubuntu-22.04&amp;diff=263</id>
		<title>Git Server unter Ubuntu-22.04</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_unter_Ubuntu-22.04&amp;diff=263"/>
		<updated>2023-05-25T07:16:42Z</updated>

		<summary type="html">&lt;p&gt;C9mos: C9mos verschob die Seite Git Server unter Ubuntu-22.04 nach Git Server einrichten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Git Server einrichten]]&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=262</id>
		<title>Git Server einrichten</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=Git_Server_einrichten&amp;diff=262"/>
		<updated>2023-05-25T07:16:42Z</updated>

		<summary type="html">&lt;p&gt;C9mos: C9mos verschob die Seite Git Server unter Ubuntu-22.04 nach Git Server einrichten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Versionskontrollsysteme wie Git sind in der modernen Softwareentwicklung für die &amp;quot;Best Practices&amp;quot; nicht mehr wegzudenken. Sie erlauben es, Änderungen der Software auf Quelltextebene mitzuverfolgen. Git erlaubt zudem frühere Versionen der Software wieder herzustellen und mit Zweigen (&#039;&#039;branches&#039;&#039;) unterschiedliche Versionen von Dateien und Verzeichnissen zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Viele Software Projekte setzen auf Services wie &#039;&#039;Github&#039;&#039;, &#039;&#039;GitLab&#039;&#039; oder &#039;&#039;Bitbucket&#039;&#039; um ihre Software zu versionieren und diese zu verteilen. Wir werden uns aber in diesem Tutorial unseren eigenen Git-Server unter Ubuntu 22.04 installieren, da man nicht jedes Projekt im Internet finden soll. Das gilt vor allem dann, wenn man seine eigenen Konfigurationsdateien mit Git versioniert.&lt;br /&gt;
&lt;br /&gt;
== Installation von Git ==&lt;br /&gt;
Zuerst sollte man überprüfen, ob Git bereits installiert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git --version&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wird dieser Befehl mit einem Fehler quittiert, ist Git nicht installiert und muss noch dem System hinzugefügt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Ein erneutes &amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt; gibt dann die installierte Git-Version aus. Für den Git-Server haben wir somit die benötigte Software installiert.&lt;br /&gt;
&lt;br /&gt;
=== Git-Nutzer anlegen ===&lt;br /&gt;
Als Nächstes müssen wir noch einen Git-Nutzer, unter dem der Server laufen soll, anlegen. Dieser Nutzer hostet die ganzen Git-Repositorien und macht sie im Netzwerk verfügbar. Über SecureShell werden die Repositorien den angelegt und verwaltet. Die Repositorien befinden sich im Verzeichnis &#039;&#039;/srv/git/repositories&#039;&#039;. Ein &#039;&#039;.ssh&#039;&#039; Verzeichnis, in dem sich in der Datei &#039;&#039;authorized_keys&#039;&#039; befindet, welche die zur Anmeldung erlaubten öffentlichen Schlüssel der Nutzer enthält, muss, mit den entsprechenden Berechtigungen, auch noch angelegt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ sudo useradd --comment &amp;quot;Git Nutzer&amp;quot; --home-dir /srv/git --create-home --password PASSWORD --uid 10000 --user-group&lt;br /&gt;
$ sudo -u git mkdir /srv/git/{repositories,.ssh} &amp;amp;&amp;amp; sudo -u git chmod 0700 /srv/git/.ssh&lt;br /&gt;
$ sudo -u git touch /srv/git/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 0600 /srv/git/.ssh/authorized_keys&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt müssen noch die Schlüssel der Benutzer in die Datei eingefügt werden. Wenn die Nutzer noch kein ssh-Schlüsselpaar haben, lässt sich selbiges mit dem Befehl &amp;lt;code&amp;gt;ssh-keygen&amp;lt;/code&amp;gt; anlegen.&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cat ~/.ssh/id_rsa.pub&amp;lt;/code&amp;gt; lässt sich der öffentliche Schlüssel anzeigen.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;ssh-copy-id&#039;&#039; lassen sich die Schlüssel dann am Server eintragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@git-server&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man kopiert die öffentlichen Schlüssel auf den Git-Server und hängt sie der Datei &#039;&#039;~/.ssh/authorized_keys&#039;&#039; an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ users=&amp;quot;chris anna patrick udo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Kopieren der Nutzer auf den Server&lt;br /&gt;
$ for i in $users; do&lt;br /&gt;
&amp;gt;     sudo scp /home/${i}/.ssh/id_rsa.pub git@gitserver:/tmp/git.${i}.ssh-key&lt;br /&gt;
&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Anmelden am gitserver mit dem Nutzer &amp;quot;git&amp;quot;&lt;br /&gt;
$ ssh git@gitserver&lt;br /&gt;
&lt;br /&gt;
# Anhängen der öffentlichen Schlüssel an ~/.ssh/authorized_keys&lt;br /&gt;
git@gitserver$ for i in /tmp/git.*.ssh-key; do&lt;br /&gt;
git@gitserver&amp;gt;    cat $i &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm $i&lt;br /&gt;
git@gitserver&amp;gt; done&lt;br /&gt;
&lt;br /&gt;
# Abmelden am Server &lt;br /&gt;
git@gitserver$ exit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hat man den eigenen Schlüssel auf dem Git-Server übertragen, sollte man versuchen, sich als &#039;&#039;git&#039;&#039; am Server anzumelden. Kann man sich ohne Passworteingabe anmelden, hat man alles richtig gemacht.&lt;br /&gt;
A&lt;br /&gt;
=== Test Repository erstellen ===&lt;br /&gt;
&lt;br /&gt;
Als Nächstes erstellen wir ein Test-Repository, um unseren Server zu testen. Wir erstellen ein &#039;&#039;bare&#039;&#039; Repository, da wir am Server keine Commits machen, sondern nur &#039;&#039;push&#039;&#039; und &#039;&#039;pull&#039;&#039; Operationen durchführen, außer wir legen ein neues Repository an.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git@gitserver$ mkdir -p repositories/test.git&lt;br /&gt;
git@gitserver$ cd repositories/test.git&lt;br /&gt;
git@gitserver$ git init --bare&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt können wir am Client ein Repository anlegen und selbiges an den Server übertragen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ mkdir test.git&lt;br /&gt;
$ cd test.git&lt;br /&gt;
$ git init&lt;br /&gt;
$ echo &amp;quot;Das ist ein Test&amp;quot; &amp;gt;&amp;gt; test.txt&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -m &amp;quot;Initial Commit&amp;quot;&lt;br /&gt;
$ git remote add origin git@gitserver:repositories/test.git&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt können Sie das Repository klonen und daran Änderungen vornehmen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ git clone git@gitserver:repositories/test.git&lt;br /&gt;
$ cd test&lt;br /&gt;
$ nano README&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git commit -am &amp;quot;README hinzugefügt&amp;quot;&lt;br /&gt;
$ git push origin master&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dieser Methode können Sie einen Read/Write-Git-Server für mehrere Entwickler in Betrieb nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Shellzugriff einschränken ===&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=261</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=261"/>
		<updated>2023-05-18T19:59:43Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Zonen überprüfen = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein. In diesem Beispiel ein statische Zone, die keine dynamischen Updates erfahern darf.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben. Diese erstellen wir in diesem Beispiel als dynamische Zone. Um die Zone dynamisch, wie z.B. mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt; oder einem DHCP-Server dynamisch verändern zu können, kommt in der Zonenkonfiguration Option &amp;lt;code&amp;gt;allow-update&amp;lt;/code&amp;gt; hinzu. Hier gibt man die IP-Adressen oder rndc-Schlüssel an, die die Zone verändern dürfen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        127.0.0.1; // localhost&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;; // der Schlüssel, mit dem man die Zone verändern darf&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 3D&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze 1.168.192.in-addr.arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/1.168.192.in-addr-arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw 1.168.192.in-addr.arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags oder das Vergessen des Adresseneintrags des Nameservers, wenn dieser sich in derselben Zone befindet.&lt;br /&gt;
&lt;br /&gt;
====== Zonen überprüfen======&lt;br /&gt;
Mit &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt; lassen sich manuell editierte Zonen auf Fehler überprüfen. Das Tool gibt die Art des Fehlers und die jeweilige Zeilennummer an. &amp;lt;named-checkzone&amp;gt; übergibt als Argumente den Zonennamen und den Pfad der Zonendatei.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;named-checkzone meinedomain.de /usr/local/etc/namedb/primary/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=260</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=260"/>
		<updated>2023-05-18T19:59:18Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Zonen manuell editieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein. In diesem Beispiel ein statische Zone, die keine dynamischen Updates erfahern darf.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben. Diese erstellen wir in diesem Beispiel als dynamische Zone. Um die Zone dynamisch, wie z.B. mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt; oder einem DHCP-Server dynamisch verändern zu können, kommt in der Zonenkonfiguration Option &amp;lt;code&amp;gt;allow-update&amp;lt;/code&amp;gt; hinzu. Hier gibt man die IP-Adressen oder rndc-Schlüssel an, die die Zone verändern dürfen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        127.0.0.1; // localhost&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;; // der Schlüssel, mit dem man die Zone verändern darf&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 3D&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze 1.168.192.in-addr.arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/1.168.192.in-addr-arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw 1.168.192.in-addr.arpa&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags oder das Vergessen des Adresseneintrags des Nameservers, wenn dieser sich in derselben Zone befindet.&lt;br /&gt;
&lt;br /&gt;
====== Zonen überprüfen =======&lt;br /&gt;
Mit &amp;lt;code&amp;gt;named-checkzone&amp;lt;/code&amp;gt; lassen sich manuell editierte Zonen auf Fehler überprüfen. Das Tool gibt die Art des Fehlers und die jeweilige Zeilennummer an. &amp;lt;named-checkzone&amp;gt; übergibt als Argumente den Zonennamen und den Pfad der Zonendatei.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;named-checkzone meinedomain.de /usr/local/etc/namedb/primary/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=259</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=259"/>
		<updated>2023-05-18T19:45:26Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Erstellen der Forward Lookup Zone */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein. In diesem Beispiel ein statische Zone, die keine dynamischen Updates erfahern darf.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben. Diese erstellen wir in diesem Beispiel als dynamische Zone. Um die Zone dynamisch, wie z.B. mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt; oder einem DHCP-Server dynamisch verändern zu können, kommt in der Zonenkonfiguration Option &amp;lt;code&amp;gt;allow-update&amp;lt;/code&amp;gt; hinzu. Hier gibt man die IP-Adressen oder rndc-Schlüssel an, die die Zone verändern dürfen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        127.0.0.1; // localhost&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;; // der Schlüssel, mit dem man die Zone verändern darf&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 3D&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=258</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=258"/>
		<updated>2023-05-18T19:45:02Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Erstellen einer Reverse Lookup Zone */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein. In diesem Beispiel ein statische Zone, die keine dynamischen Updates erfahern darf.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben. Diese erstellen wir in diesem Beispiel als dynamische Zone. Um die Zone dynamisch, wie z.B. mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt; oder einem DHCP-Server dynamisch verändern zu können, kommt in der Zonenkonfiguration Option &amp;lt;code&amp;gt;allow-update&amp;lt;/code&amp;gt; hinzu. Hier gibt man die IP-Adressen oder rndc-Schlüssel an, die die Zone verändern dürfen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        127.0.0.1; // localhost&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;; // der Schlüssel, mit dem man die Zone verändern darf&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 3D&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=257</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=257"/>
		<updated>2023-05-18T19:42:12Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Primäre Zonen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein. In diesem Beispiel ein statische Zone, die keine dynamischen Updates erfahern darf.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben. Diese erstellen wir in diesem Beispiel als dynamische Zone. Um die Zone dynamisch, wie z.B. mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt; oder einem DHCP-Server dynamisch verändern zu können, kommt in der Zonenkonfiguration Option &amp;lt;code&amp;gt;allow-update&amp;lt;/code&amp;gt; hinzu. Hier gibt man die IP-Adressen oder rndc-Schlüssel an, die die Zone verändern dürfen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        127.0.0.1; // localhost&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;; // der Schlüssel, mit dem man die Zone verändern darf&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=256</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=256"/>
		<updated>2023-05-18T19:41:03Z</updated>

		<summary type="html">&lt;p&gt;C9mos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben. Diese erstellen wir in diesem Beispiel als dynamische Zone. Um die Zone dynamisch, wie z.B. mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt; oder einem DHCP-Server dynamisch verändern zu können, kommt in der Zonenkonfiguration Option &amp;lt;code&amp;gt;allow-update&amp;lt;/code&amp;gt; hinzu. Hier gibt man die IP-Adressen oder rndc-Schlüssel an, die die Zone verändern dürfen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        127.0.0.1; // localhost&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;; // der Schlüssel, mit dem man die Zone verändern darf&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=255</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=255"/>
		<updated>2023-05-18T19:35:55Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Primäre Zonen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=254</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=254"/>
		<updated>2023-05-18T19:21:58Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Sekundäre Zonen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     allow-update {&lt;br /&gt;
         key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguration überprüfen und neu laden ====&lt;br /&gt;
Hat man die Konfiguration verändert, kann man die Konfiguration vor dem Neuladen mit &amp;lt;code&amp;gt;named-checkconf&amp;lt;/code&amp;gt; überprüfen. Sollten Fehler in der Konfiguration vorhanden sein, werden diese mit Zeilennummern ausgegeben, was die Fehlerbehebung deutlich vereinfacht. Mit &amp;lt;code&amp;gt;rndc reconfig&amp;lt;/code&amp;gt; kann im Anschluss die Konfiguration neu geladen werden. Und das, ohne den Server neu starten zu müssen. Das ist vor allem dann sehr nützlich, wenn man viele große Zonen abbildet und der Neustart des Servers dadurch lange dauert.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# named checkconf&lt;br /&gt;
# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=253</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=253"/>
		<updated>2023-05-18T17:43:06Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Primäre Zonen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
     type primary;&lt;br /&gt;
     allow-update {&lt;br /&gt;
         key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
     allow-transfer {&lt;br /&gt;
         192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                               // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
     };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=252</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=252"/>
		<updated>2023-05-15T16:37:21Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Installation und Konfiguration von BIND */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden oder die Konifuration neu geladen werden.&lt;br /&gt;
Entweder mit:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Oder:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reconfig&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=251</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=251"/>
		<updated>2023-05-15T16:14:28Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Erstellen einer Reverse Lookup Zone */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 $ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 1.168.192.in-addr.arpa. IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
          1       ; serial&lt;br /&gt;
          1H      ; refresh&lt;br /&gt;
          1H      ; retry&lt;br /&gt;
          1W      ; expire&lt;br /&gt;
          1H)     ; negative cache TTL&lt;br /&gt;
 &lt;br /&gt;
 ; nameserver&lt;br /&gt;
 @         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
 @         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
 ; mailserver&lt;br /&gt;
 @         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
 &lt;br /&gt;
 ; Einträge&lt;br /&gt;
 1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
 2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
 240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
 241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
 250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
 251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
 253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
 254      IN  PTR     ns1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 $ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
 $TTL 1H&lt;br /&gt;
 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                  1        ; serial&lt;br /&gt;
                  1H       ; refresh&lt;br /&gt;
                  1H       ; retry&lt;br /&gt;
                  1W       ; expire&lt;br /&gt;
                  1H)      ; minimum&lt;br /&gt;
 &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 @        IN     NS      ns1.meinedomain.de&lt;br /&gt;
 @        IN     NS      ns2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 @        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
 @        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
 &lt;br /&gt;
 ; PTR Einträge&lt;br /&gt;
 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
 0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
 1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
 f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
 0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=250</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=250"/>
		<updated>2023-05-14T13:20:32Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Erstellen der Zonendatei */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einemb ORIGIN-Eintrag, der den Gültigkeitsbereich der jeweiligen Zone angibt. Gefolgt wird dieser von einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird, mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN meinedomain.de.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN 1.168.192.in-addr.arpa.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
1.168.192.in-addr.arpa IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
         1       ; serial&lt;br /&gt;
         1H      ; refresh&lt;br /&gt;
         1H      ; retry&lt;br /&gt;
         1W      ; expire&lt;br /&gt;
         1H)     ; negative cache TTL&lt;br /&gt;
&lt;br /&gt;
; nameserver&lt;br /&gt;
@         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
@         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
; mailserver&lt;br /&gt;
@         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
@         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
; Einträge&lt;br /&gt;
1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
254      IN  PTR     ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.&lt;br /&gt;
$TTL 1H&lt;br /&gt;
0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                 1        ; serial&lt;br /&gt;
                 1H       ; refresh&lt;br /&gt;
                 1H       ; retry&lt;br /&gt;
                 1W       ; expire&lt;br /&gt;
                 1H)      ; minimum&lt;br /&gt;
&lt;br /&gt;
; Nameserver&lt;br /&gt;
@        IN     NS      ns1.meinedomain.de&lt;br /&gt;
@        IN     NS      ns2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; Mailserver&lt;br /&gt;
@        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
@        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; PTR Einträge&lt;br /&gt;
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=249</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=249"/>
		<updated>2023-05-14T11:13:05Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Erstellen einer Reverse Lookup Zone */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
1.168.192.in-addr.arpa IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
         1       ; serial&lt;br /&gt;
         1H      ; refresh&lt;br /&gt;
         1H      ; retry&lt;br /&gt;
         1W      ; expire&lt;br /&gt;
         1H)     ; negative cache TTL&lt;br /&gt;
&lt;br /&gt;
; nameserver&lt;br /&gt;
@         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
@         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
; mailserver&lt;br /&gt;
@         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
@         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
; Einträge&lt;br /&gt;
1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
254      IN  PTR     ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                 1        ; serial&lt;br /&gt;
                 1H       ; refresh&lt;br /&gt;
                 1H       ; retry&lt;br /&gt;
                 1W       ; expire&lt;br /&gt;
                 1H)      ; minimum&lt;br /&gt;
&lt;br /&gt;
; Nameserver&lt;br /&gt;
@        IN     NS      ns1.meinedomain.de&lt;br /&gt;
@        IN     NS      ns2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; Mailserver&lt;br /&gt;
@        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
@        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; PTR Einträge&lt;br /&gt;
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=248</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=248"/>
		<updated>2023-05-14T10:15:32Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Zonen manuell editieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
1.168.192.in-addr.arpa IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
         1       ; serial&lt;br /&gt;
         1H      ; refresh&lt;br /&gt;
         1H      ; retry&lt;br /&gt;
         1W      ; expire&lt;br /&gt;
         1H)     ; negative cache TTL&lt;br /&gt;
&lt;br /&gt;
; nameserver&lt;br /&gt;
         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
; mailserver&lt;br /&gt;
         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
; Einträge&lt;br /&gt;
1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
254      IN  PTR     ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                 1        ; serial&lt;br /&gt;
                 1H       ; refresh&lt;br /&gt;
                 1H       ; retry&lt;br /&gt;
                 1W       ; expire&lt;br /&gt;
                 1H)      ; minimum&lt;br /&gt;
&lt;br /&gt;
; Nameserver&lt;br /&gt;
        IN     NS      ns1.meinedomain.de&lt;br /&gt;
        IN     NS      ns2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; Mailserver&lt;br /&gt;
        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; PTR Einträge&lt;br /&gt;
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=247</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=247"/>
		<updated>2023-05-14T10:14:23Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Erstellen einer Reverse Lookup Zone */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
1.168.192.in-addr.arpa IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
         1       ; serial&lt;br /&gt;
         1H      ; refresh&lt;br /&gt;
         1H      ; retry&lt;br /&gt;
         1W      ; expire&lt;br /&gt;
         1H)     ; negative cache TTL&lt;br /&gt;
&lt;br /&gt;
; nameserver&lt;br /&gt;
         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
; mailserver&lt;br /&gt;
         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
; Einträge&lt;br /&gt;
1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
254      IN  PTR     ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                 1        ; serial&lt;br /&gt;
                 1H       ; refresh&lt;br /&gt;
                 1H       ; retry&lt;br /&gt;
                 1W       ; expire&lt;br /&gt;
                 1H)      ; minimum&lt;br /&gt;
&lt;br /&gt;
; Nameserver&lt;br /&gt;
        IN     NS      ns1.meinedomain.de&lt;br /&gt;
        IN     NS      ns2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; Mailserver&lt;br /&gt;
        IN     MX      30      mail1.meinedomain.de.&lt;br /&gt;
        IN     MX      40      mail2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; PTR Einträge&lt;br /&gt;
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedoain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=246</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=246"/>
		<updated>2023-05-14T10:07:27Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Zonen manuell editieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
1.168.192.in-addr.arpa IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
         1       ; serial&lt;br /&gt;
         1H      ; refresh&lt;br /&gt;
         1H      ; retry&lt;br /&gt;
         1W      ; expire&lt;br /&gt;
         1H)     ; negative cache TTL&lt;br /&gt;
&lt;br /&gt;
; nameserver&lt;br /&gt;
         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
; mailserver&lt;br /&gt;
         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
; Einträge&lt;br /&gt;
1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
254      IN  PTR     ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                 1        ; serial&lt;br /&gt;
                 1H       ; refresh&lt;br /&gt;
                 1H       ; retry&lt;br /&gt;
                 1W       ; expire&lt;br /&gt;
                 1H)      ; minimum&lt;br /&gt;
&lt;br /&gt;
; Nameserver&lt;br /&gt;
        IN     NS      ns1.meinedomain.de&lt;br /&gt;
        IN     NS      ns2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; Mailserver&lt;br /&gt;
        IN     NS      mail1.meinedomain.de.&lt;br /&gt;
        IN     NS      mail2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; PTR Einträge&lt;br /&gt;
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedoain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man eine Zone einfach nur neu laden, lässt sich das mit &amp;lt;code&amp;gt;rndc reload&amp;lt;/code&amp;gt; bewerkstelligen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc reload meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=245</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=245"/>
		<updated>2023-05-14T09:59:08Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Zonen manuell editieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
1.168.192.in-addr.arpa IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
         1       ; serial&lt;br /&gt;
         1H      ; refresh&lt;br /&gt;
         1H      ; retry&lt;br /&gt;
         1W      ; expire&lt;br /&gt;
         1H)     ; negative cache TTL&lt;br /&gt;
&lt;br /&gt;
; nameserver&lt;br /&gt;
         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
; mailserver&lt;br /&gt;
         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
; Einträge&lt;br /&gt;
1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
254      IN  PTR     ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                 1        ; serial&lt;br /&gt;
                 1H       ; refresh&lt;br /&gt;
                 1H       ; retry&lt;br /&gt;
                 1W       ; expire&lt;br /&gt;
                 1H)      ; minimum&lt;br /&gt;
&lt;br /&gt;
; Nameserver&lt;br /&gt;
        IN     NS      ns1.meinedomain.de&lt;br /&gt;
        IN     NS      ns2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; Mailserver&lt;br /&gt;
        IN     NS      mail1.meinedomain.de.&lt;br /&gt;
        IN     NS      mail2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; PTR Einträge&lt;br /&gt;
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedoain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Fehler in der Zonendatei und man muss sie erneut editieren. Ein häufiger Fehler ist das Auslassen eines &#039;&#039;NS&#039;&#039;-Eintrags.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=244</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=244"/>
		<updated>2023-05-14T09:54:37Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Erstellen einer Reverse Lookup Zone */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
1.168.192.in-addr.arpa IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
         1       ; serial&lt;br /&gt;
         1H      ; refresh&lt;br /&gt;
         1H      ; retry&lt;br /&gt;
         1W      ; expire&lt;br /&gt;
         1H)     ; negative cache TTL&lt;br /&gt;
&lt;br /&gt;
; nameserver&lt;br /&gt;
         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
; mailserver&lt;br /&gt;
         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
; Einträge&lt;br /&gt;
1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
254      IN  PTR     ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                 1        ; serial&lt;br /&gt;
                 1H       ; refresh&lt;br /&gt;
                 1H       ; retry&lt;br /&gt;
                 1W       ; expire&lt;br /&gt;
                 1H)      ; minimum&lt;br /&gt;
&lt;br /&gt;
; Nameserver&lt;br /&gt;
        IN     NS      ns1.meinedomain.de&lt;br /&gt;
        IN     NS      ns2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; Mailserver&lt;br /&gt;
        IN     NS      mail1.meinedomain.de.&lt;br /&gt;
        IN     NS      mail2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; PTR Einträge&lt;br /&gt;
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedoain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Syntaxfehler in der Zonendatei und man muss sie erneut editieren.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=243</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=243"/>
		<updated>2023-05-14T09:50:18Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Zonen manuell editieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
1.168.192.in-addr.arpa IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
         1       ; serial&lt;br /&gt;
         1H      ; refresh&lt;br /&gt;
         1H      ; retry&lt;br /&gt;
         1W      ; expire&lt;br /&gt;
         1H)     ; negative cache TTL&lt;br /&gt;
&lt;br /&gt;
; nameserver&lt;br /&gt;
         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
; mailserver&lt;br /&gt;
         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
; Einträge&lt;br /&gt;
1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
254      IN  PTR     ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                 1          ; serial&lt;br /&gt;
                 1H       ; refresh&lt;br /&gt;
                 1H       ; retry&lt;br /&gt;
                 1W     ; expire&lt;br /&gt;
                 1H)       ; minimum&lt;br /&gt;
&lt;br /&gt;
; Nameserver&lt;br /&gt;
        IN     NS      ns1.meinedomain.de&lt;br /&gt;
        IN     NS      ns2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; Mailserver&lt;br /&gt;
        IN     NS      mail1.meinedomain.de.&lt;br /&gt;
        IN     NS      mail2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; PTR Einträge&lt;br /&gt;
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können. Beim Einfrieren werden auch die dynamischen Änderungen aus dem Zonen-Journal übernommen, was bewirkt, dass man eine aktuelle Zone bearbeitet.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedoain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Syntaxfehler in der Zonendatei und man muss sie erneut editieren.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=242</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=242"/>
		<updated>2023-05-14T09:48:07Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Bearbeiten von Zonen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
1.168.192.in-addr.arpa IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
         1       ; serial&lt;br /&gt;
         1H      ; refresh&lt;br /&gt;
         1H      ; retry&lt;br /&gt;
         1W      ; expire&lt;br /&gt;
         1H)     ; negative cache TTL&lt;br /&gt;
&lt;br /&gt;
; nameserver&lt;br /&gt;
         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
; mailserver&lt;br /&gt;
         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
; Einträge&lt;br /&gt;
1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
254      IN  PTR     ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                 1          ; serial&lt;br /&gt;
                 1H       ; refresh&lt;br /&gt;
                 1H       ; retry&lt;br /&gt;
                 1W     ; expire&lt;br /&gt;
                 1H)       ; minimum&lt;br /&gt;
&lt;br /&gt;
; Nameserver&lt;br /&gt;
        IN     NS      ns1.meinedomain.de&lt;br /&gt;
        IN     NS      ns2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; Mailserver&lt;br /&gt;
        IN     NS      mail1.meinedomain.de.&lt;br /&gt;
        IN     NS      mail2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; PTR Einträge&lt;br /&gt;
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich manuell, mit &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt; oder dynamisch, mit &amp;lt;code&amp;gt;nsupdate&amp;lt;/code&amp;gt;, bearbeiten.&lt;br /&gt;
===== Zonen manuell editieren =====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone mit seinem bevorzugten Editor bearbeiten. Man sollte die Seriennummer der Zone mit erhöhen, damit es den sekundären DNS-Servern mitgeteilt wird, dass die Zone geändert worden ist.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedoain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Syntaxfehler in der Zonendatei und man muss sie erneut editieren.&lt;br /&gt;
&lt;br /&gt;
===== Zonen mit &#039;&#039;nsupdate&#039;&#039; bearbeiten =====&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
	<entry>
		<id>https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=241</id>
		<title>FreeBSD als DNS-Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.cmoser.org/index.php?title=FreeBSD_als_DNS-Server&amp;diff=241"/>
		<updated>2023-05-14T09:42:07Z</updated>

		<summary type="html">&lt;p&gt;C9mos: /* Bearbeiten von Zonen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Domain Name Service ==&lt;br /&gt;
Der &#039;&#039;Domain Name Service&#039;&#039; übernimmt die Namensauflösung von Netzwerkadressen. So kann man im Netzwerk die einzelnen Rechner mit einem Namen ansprechen und anstelle mit nur IP-Adressen kommunizieren. So wird z. B. wiki.cmoser.org in die zugewiesene IP-Adresse umgewandelt. &lt;br /&gt;
&lt;br /&gt;
Wenn man aber keinen DNS-Server selbst hostet, aber eine Namensauflösung will, kann man auf jeden Rechner die &#039;&#039;/etc/hosts&#039;&#039; (unter Windows die &#039;&#039;%WINDIR%\system32\drivers\etc\hosts&#039;&#039;) editieren, um eine Namensauflösung zu ermöglichen. Wenn das Netzwerk aber über mehrere Rechner verfügt und man einen Computer hinzufügen will, wird es schnell aufwendig, die &#039;&#039;/etc/hosts&#039;&#039; auf jeden Rechner zu bearbeiten. Hier kommt dann ein DNS ins Spiel. Als DNS-Service nehme ich BIND.&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einst ein Raspberry PI gekauft und nehme es als DNS-Server her, weil es wenig Strom verbraucht und eigentlich recht günstig zu erwerben ist. [https://www.freebsd.org FreeBSD] nutze ich, weil es eigentlich mein bevorzugtes Unix ist. Die Rechenleistung des RPI reicht bei weiten aus um einige Services, darunter auch einen DNS und DHCP Server, zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Es wird davon ausgegangen, dass das FreeBSD-Basissetup bereits abgeschlossen ist und dem Rechner eine statische IP-Adresse, wie z. B. 192.168.1.254, zugewiesen wurde. &#039;&#039;&#039;Ein DNS-Server braucht unbedingt eine statische IP-Adresse!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wie komme ich zu einer Domäne ===&lt;br /&gt;
Eine Domäne zu erfinden ist meistens keine gute Idee, da man sich hier möglicherweise von im Internet angebotenen Services ausschließt, wenn man eine Domäne überschreibt. Die Domain lässt sich bei einem Registrar registrieren. Bei den meisten Webhosting Angeboten ist eine eigene Domäne mit inkludiert. Wenn man keinen Webserver im Internet betreiben will, aber eine Domäne für seine Zwecke braucht, kann man sie auch einzeln registrieren. Eine Domäne kostet normalerweise keine 20 € im Jahr. Hier sind ein paar Links, wo man sich eine Domäne registrieren kann. Diese Registrare unterstützen auch PayPal.&lt;br /&gt;
* [https://ionos.de Ionos.de]&lt;br /&gt;
* [https://www.internic.at/de/ Internic.at]&lt;br /&gt;
* [https://domain.com Domain.com] - &#039;&#039;&#039;kein IPV6!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufbau einer Domäne ===&lt;br /&gt;
Eine Doamäne ist der Namensraum, in welchen sich weitere Hosts und Subdomänen befinden. Die Domäne wird von rechts nach links aufgelöst, beginnend mit der Toplevel Domain (z .B. &#039;de&#039;) und durch einen Punkt (&amp;quot;.&amp;quot;) getrennt. &#039;&#039;cmoser.org&#039;&#039; ist die Domäne &#039;&#039;cmoser&#039;&#039; in der Toplevel Domäne &#039;&#039;org&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Domain wird in Zonen unterteilt. Jede Zone ist eine eigene Domain bzw. eigene Subdomain. Z. B. &#039;&#039;cmoser.org&#039;&#039; ist eine eigene Zone im Nameserver des DNS-Providers. Jede Zone enthält einen oder mehrere Einträge, wie die Mailserver der Domäne, die einzelnen Hosts mit Namen und IP-Adresse und die Adressen der einzelnen Nameserver der Domäne. Es gibt auch eine Reverse-Lookup Zone, die die umgekehrte Auflösung von IP-Adressen in den Host-Namen übernimmt. Sekundäre Zonen werden vom primären DNS-Server geholt und helfen bei der Namensauflösung, wenn der Primäre DNS-Server eine höhere Last aufweist und dienen nebenbei auch der Redundanz. Fällt der primäre DNS-Server aus, hat man, wenn man auch einen Sekundären Nameserver betreibt, etwas Zeit sich um den Primären DNS-Server wieder zum Laufen zu bringen, bis die Namensauflösung nicht mehr funktioniert.&lt;br /&gt;
&lt;br /&gt;
Jede Zone wird in einer eigenen Datei gespeichert. Diese Dateien befinden sich unter FreeBSD normalerweise unter &#039;&#039;/usr/local/etc/namedb/primary&#039;&#039; für primäre Zonen, &#039;&#039;/usr/local/etc/namedb/secondary&#039;&#039; für Sekundärzonen und &#039;&#039;/usr/local/etc/namedb/dynamic&#039;&#039; für dynamische Zonen.&lt;br /&gt;
&lt;br /&gt;
Dynamische Zonen sind praktisch, wenn man einen DHCP-Server hostet und gerne die Clients, welche IP-Adressen über den DHCP-Server beziehen (wie z. B. Laptops, Handys, Tablets usw.), mit einer Namensauflösung versehen will. Im Artikel &#039;&#039;[https://wiki.cmoser.org/index.php/FreeBSD_als_DHCP-Server FreeBSD als DHCP-Server]&#039;&#039; werde ich darauf näher eingehen.&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Eine primäre (Master) Zone enthält die originale Zonendatei. Die primären Zonen sind sowohl lesbar als auch schreibbar. Alle DNS-Einträge werden in die primäre Zone des DNS-Servers geschrieben. Die Daten werden in einer Textdatei gespeichert, was den Vorteil hat, dass sich einfach ein Backup erstellen lässt und sie sich, im Falle von Problemen, einfach wieder herstellen lässt. &lt;br /&gt;
&lt;br /&gt;
Wenn man Änderungen an der DNS-Zone machen will, muss eine primäre Zone verfügbar sein. Ist der Server mit der primären Zone ausgefallen, kann man keine Änderungen an der Zone durchführen.&lt;br /&gt;
&lt;br /&gt;
Wer Redundanz haben will, muss man die Zonendaten auf mehreren Servern zur Verfügung stellen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LAN IP-Adressen haben in einer primären Zone, die im Internet zugänglich ist, nichts verloren. Diese sollten nur vom DNS-Server im LAN abgebildet werden.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
Eine sekundäre Zone ist eine nur lesbare Kopie der Zonendaten. Meistens sind sekundäre (Slave) Zonen Kopien von primären Zonen, aber sie können auch Kopien von anderen sekundären Zonen oder Active Directory Zonen sein. Der Hauptverwendungszweck einer sekundären Zone ist, sie als Backup zur Verfügung zu stellen. Wenn die primäre Zone ausfällt, kann man noch immer Antworten auf die Anfragen für die Zone von seiner Kopie erhalten.&lt;br /&gt;
&lt;br /&gt;
== Installation und Konfiguration von BIND ==&lt;br /&gt;
Die für die Installation von BIND benötigten Pakete sind &#039;&#039;bind918&#039;&#039; und &#039;&#039;bind-tools&#039;&#039;. Diese lassen sich einfach mit pkg installieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# pkg install -y bind918 bind-tools&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um BIND bei jedem Systemstart automatisch zu starten, muss man ihn noch in der &#039;&#039;/etc/rc.conf&#039;&#039; aktivieren.Die Erstellung des &#039;&#039;rndc&#039;&#039;-Schlüssels übernimmt das Service-Script automatisch.&lt;br /&gt;
Der Service heißt &#039;&#039;&#039;named&#039;&#039;&#039;.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# sysrc named_enable=YES&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service muss noch gestartet werden, damit er aktiv ist und die &#039;&#039;rndc&#039;&#039;-Schlüssel-Datei erzeugt wird.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# service named start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Haben wir eine eigene Domäne und wollen dynamische Updates, erstellen wir noch einen &#039;&#039;rndc&#039;&#039;-Schlüssel.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@rpi# rndc-confgen -a -c /usr/local/etc/namedb/meinedomain.de.key -k meinedomainde-key&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schlüssel in der Konfiguration nutzen zu können müssen wir ihn in die Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; importieren.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Nächstes geht es um die Konfiguration des Nameservers. Die Konfiguration von BIND befindet sich in der Datei &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039;. Diese Datei wird bearbeitet. Eine genaue Spezifikation der Datei finden wir in der [https://bind9.readthedocs.io/en/v9_18_8/reference.html BIND9 Referenz].&lt;br /&gt;
&lt;br /&gt;
Als Erstes suchen wir den Eintrag &#039;&#039;&#039;listen-on&#039;&#039;&#039; in den &#039;&#039;&#039;options&#039;&#039;&#039; und fügen hier den &#039;&#039;localhost&#039;&#039; (127.0.0.1) und die statische IP-Adresse unseres Servers ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on { 127.0.0.1; 192.168.1.254; };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer ein IPv6 Netzwerk betreibt, gibt mit der Option &#039;&#039;&#039;listen-on-v6&#039;&#039;&#039; noch die IPv6 Adressen an, auf welche der Server hören soll. Der Wert &#039;&#039;&#039;any&#039;&#039;&#039; erlaubt das Abhören aller, dem Server zugewiesenen IPv6 Adressen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    listen-on-v6 {&lt;br /&gt;
        fe80::2;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der nächste Eintrag in den &#039;&#039;&#039;options&#039;&#039;&#039; ist der des Forwarders. In den Eintrag &#039;&#039;&#039;forwarders&#039;&#039;&#039; tragen wir die IP-Adresse von jenen DNS-Servern ein, die die Namensabfragen für uns erledigen sollen, wenn kein passender Eintrag im eigenen DNS vorhanden ist. Ich wählte zwei freie unzensierte DNS-Server aus. Wer ein IPv6 Netzwerk betreibt, kann noch die IPv6 Adressen der gewählten Server mit eintragen.&amp;lt;br&amp;gt;&lt;br /&gt;
(5.9.164.112 =&amp;amp;gt; digitalcourage, 80.241.218.68 =&amp;amp;gt; dismail.de, 192.168.1.1 =&amp;amp;gt; der eigene Router bzw. der DNS-Server des Providers)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    forwarders {&lt;br /&gt;
        5.9.164.112;&lt;br /&gt;
        80.241.218.68;&lt;br /&gt;
        192.168.1.1;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Meine Quelle und weitere DNS-Server findet ihr auf [https://www.kuketz-blog.de/empfehlungsecke/#dns https://www.kuketz-blog.de/empfehlungsecke/#dns].&lt;br /&gt;
&lt;br /&gt;
Danach erstellen wir die jeweiligen Zonen. Wenn wir binden die entsprechenden Schlüsseldateien noch nicht eigebunden haben, tun wir es hier.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
include &amp;quot;/usr/local/etc/namedb/meinedomain.de.key&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Hinzufügen oder Ändern von Einstellungen oder Zonen sollte der Nameserver neu gestartet werden.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service named restart&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Primäre Zonen ====&lt;br /&gt;
Jetzt erstellen wir die Zone. Diese fügen wir am besten am Ende der Datei ein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/primary/meinedomain.de&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;        // IP Adressen der Sekundären Server, &lt;br /&gt;
                              // die die Zone kopieren dürfen, kommen hier hin.&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es fehlt nur noch die Reverse Lookup Zone. Die Der IP-Adressbereich wird hier in umgekehrter Reihenfolge angegeben.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
    type primary;&lt;br /&gt;
    allow-update {&lt;br /&gt;
        key &amp;quot;meinedomainde-key&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/dynamic/1.168.192.in_addr.arpa&amp;quot;;&lt;br /&gt;
    allow-transfer {&lt;br /&gt;
        192.168.1.253;&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sekundäre Zonen ====&lt;br /&gt;
In einer sekundären Zone wird eine andere Zone kopiert und deren Einträge zur Verfügung gestellt. Die Einträge in einer sekundären Zone sind nicht veränderbar, sie dienen aber der Redundanz. Eine sekundäre Zone sieht in der &#039;&#039;/usr/local/etc/namedb/named.conf&#039;&#039; wie folgt aus.&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;zone &amp;quot;meinedomain.de&amp;quot; {&lt;br /&gt;
    type secondary;&lt;br /&gt;
    file &amp;quot;/usr/local/etc/namedb/secondary/meinedomain.de&amp;quot;;&lt;br /&gt;
    primaries {&lt;br /&gt;
        192.168.1.254;     // Die IP-Adressen der primären &lt;br /&gt;
                           // Nameserver kommen hier hin&lt;br /&gt;
    };&lt;br /&gt;
};&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Zonendatei ===&lt;br /&gt;
Jede Zone beginnt mit einem TTL-Eintrag (time to live) bzw. wenn kein TTL angegeben wird mit einem &#039;&#039;&#039;SOA&#039;&#039;&#039; (Start Of Authority) Eintrag. &lt;br /&gt;
&lt;br /&gt;
Der TTL Eintrag gibt an, wie lange diese Einträge gültig sind und im Cache gehalten werden sollen. Ein Beispiel für einen TTL Eintrag, der 3 Tage gültig ist, sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 3D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der SOA sollte der erste Eintrag, bzw. der zweite Eintrag sein, wenn kein TTL angegeben ist, in der Datei sein. Er enthält den Domänennamen mit abschließenden &amp;quot;.&amp;quot; (z. B. meinedomain.de.) oder &amp;quot;@&amp;quot; für die aktuelle Domäne, den Namen des primären DNS-Servers, den Namen des primären E-Mail-Servers, die Seriennummer der Zone und Angaben über die Lebensdauer der Zone.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel SOA-Eintrag sieht wie folgt aus:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@ IN SOA ns1.meinedomain.de. mail.meinedomian.de. (&lt;br /&gt;
    1  ; Seriennummer&lt;br /&gt;
    1H ; Aktualisieren&lt;br /&gt;
    1H ; Erneut Versuchen&lt;br /&gt;
    1W ; Laeuft ab&lt;br /&gt;
    1H ) ; Negatives Caching&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um diesen Eintrag zu erstellen, habe ich ein kleines Shell-Script geschrieben, dass ein SOA-Template für eine Zonendatei erstellt. [https://www.cmoser.org/scripts/FreeBSD/mkzone mkzone]&lt;br /&gt;
&lt;br /&gt;
==== Erstellen der Forward Lookup Zone ====&lt;br /&gt;
Mit Hilfe der  Forward Lookup Zone erfolgt die Auflösung der Host-Namen in IP-Adressen. Eine solche Zonendatei enthält neben den einzelnen Adresseinträgen, Einträge über die DNS- und Mail-Server der Domäne. Der Eintrag Host-Name &#039;@&#039; beschreibt die Domäne selbst.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für einen DNS-Eintrag (NS record) - Es sollte hier keine IP-Adresse, sondern ein Host-Name verwendet werden. &#039;&#039;&#039;Mindestens ein NS-Eintrag muss in jeder Zone vorhanden sein, damit diese gültig ist!!&#039;&#039;&#039; Auch auf den Punkt am Ende des Host-Namens ist zu achten, da es ansonsten zu fehlerhaften Ergebnissen bei der Namensauflösung kommen kann.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN       NS       ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mail-Server werden in einem MX record abgebildet. Es sollten auch hier keine IP-Adressen verwendet werden, sondern Hostnamen. Die Zahl gibt die Priorität des Mail-Servers an. Der Mail-Server muss sich nicht zwingend in der eigenen Domain befinden. Es kann auch der Mail-Server Hosting Providers sein.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;@       IN      MX      30       mail.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann sind da noch die Adresseinträge. Diese werden mit &#039;&#039;&#039;A&#039;&#039;&#039; für IPv4 bzw. &#039;&#039;&#039;AAAA&#039;&#039;&#039; für IPv6, gefolgt von der Adresse, angegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ns1     IN      A       192.168.1.254&lt;br /&gt;
ns1     IN      AAAA    fe80::2&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt auch noch den CNAME-Eintrag, der auf den Namen eines anderen Hosts verweist. Dieser Eintrag dient als ein Alias-Name für einen Host.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drucker         IN      CNAME   printer.meinedoamin.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette Zone könnte wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
 @ IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
   		6	; Serial&lt;br /&gt;
   		1H	; Refresh&lt;br /&gt;
   		1H	; Retry&lt;br /&gt;
   		1W	; Expire&lt;br /&gt;
   		1H )	; Negative Caching TTL&lt;br /&gt;
   &lt;br /&gt;
 @		IN	NS	ns1.meinedoamin.de.&lt;br /&gt;
 @		IN	NS	ns2.meinedomain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN MX	10	mail1.meinedomain.de.&lt;br /&gt;
 @		IN MX	20	mail2.meinedoamain.de.&lt;br /&gt;
   &lt;br /&gt;
 @		IN A	192.168.1.1&lt;br /&gt;
 @		IN AAAA	fe80::f435:344f:fe7f:8992&lt;br /&gt;
   &lt;br /&gt;
 ; Nameserver&lt;br /&gt;
 ns1             IN  A       192.168.1.254&lt;br /&gt;
 ns1             IN  AAAA    fe80::1&lt;br /&gt;
 ns2             IN  A       192.168.1.253&lt;br /&gt;
 ns2             IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 ; Mailserver&lt;br /&gt;
 mail1           IN  A       192.168.1.251&lt;br /&gt;
 mail1           IN  AAAA    fe80::f435:344f:fe7f:f345&lt;br /&gt;
 mail2           IN  A       192.168.1.250&lt;br /&gt;
 mail2           IN  AAAA    fe80::f435:344f:fe6f:f456&lt;br /&gt;
   &lt;br /&gt;
 ; LAN&lt;br /&gt;
 router          IN  A       192.168.1.1&lt;br /&gt;
 router          IN  AAAA    fe80::2&lt;br /&gt;
   &lt;br /&gt;
 server1         IN  A       192.168.1.241&lt;br /&gt;
 server1         IN  AAAA    fe80::3&lt;br /&gt;
   &lt;br /&gt;
 server2         IN  A       192.168.1.240&lt;br /&gt;
 server2         IN  AAAA    fe80::4&lt;br /&gt;
   &lt;br /&gt;
 printer         IN  A       192.168.1.2&lt;br /&gt;
 printer         IN  AAAA    fe80::1234:5678:9abc:1&lt;br /&gt;
   &lt;br /&gt;
 ; Alias&lt;br /&gt;
 drucker1        IN  CNAME   printer1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erstellen einer Reverse Lookup Zone ====&lt;br /&gt;
Eine Reverse Lookup Zone macht eine umgekehrte Auflösung. Sie gibt den Hostnamen, der einer IP-Adresse zugewiesen ist, zurück. Diese Zone beinhaltet einen SOA- und mindestens einen NS-Eintrag. Diese Zone wird durch das aufzulösende IP-Netzwerk in umgekehrter Reihenfolge im Namensraum &#039;&#039;in-addr.arpa&#039;&#039;, im Falle von IPv4 bzw. &#039;&#039;ip6.arpa&#039;&#039; angegenben. Wie z.B: &amp;lt;code&amp;gt;1.168.192.in.addr.arpa&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa&amp;lt;/code&amp;gt;, im IPv6 Netzwerk &#039;&#039;fe80:0:0:0:x:x:x:x&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Auflösung erfolgt über Zeiger-Einträge (PTR records), wobei der Netzwerkanteil wegfällt, da er durch die Zone bereits bestimmt wird.&lt;br /&gt;
&lt;br /&gt;
In der IPv4 Zone würde ein PTR-Eintrag wie folgt aussehen:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1       IN      PTR     router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der IPv6 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0      PTR      router.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine vollständige IPv4 Zone:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
1.168.192.in-addr.arpa IN SOA ns1.meinedomain.de. mail1.meinedomain.de. (&lt;br /&gt;
         1       ; serial&lt;br /&gt;
         1H      ; refresh&lt;br /&gt;
         1H      ; retry&lt;br /&gt;
         1W      ; expire&lt;br /&gt;
         1H)     ; negative cache TTL&lt;br /&gt;
&lt;br /&gt;
; nameserver&lt;br /&gt;
         IN  NS      ns1.meinedomain.de.&lt;br /&gt;
         IN  NS      ns2.meinedomain.de.&lt;br /&gt;
; mailserver&lt;br /&gt;
         IN  MX      30      mail1.meinedomain.de.&lt;br /&gt;
         IN  MX      40      mail2.meinedomain.de.&lt;br /&gt;
&lt;br /&gt;
; Einträge&lt;br /&gt;
1        IN  PTR     router.meinedomain.de.&lt;br /&gt;
2        IN  PTR     printer1.meinedomain.de.&lt;br /&gt;
240      IN  PTR     server2.meinedomain.de.&lt;br /&gt;
241      IN  PTR     server1.meinedomain.de.&lt;br /&gt;
250      IN  PTR     mail2.meinedomain.de.&lt;br /&gt;
251      IN  PTR     mail1.meinedomain.de.&lt;br /&gt;
253      IN  PTR     ns2.meinedomain.de.&lt;br /&gt;
254      IN  PTR     ns1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplette IPv6 Zone sieht wie folgt aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$TTL 1H&lt;br /&gt;
0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa IN SOA ns1.cmoser.org. mx00.ionos.de. (&lt;br /&gt;
                 1          ; serial&lt;br /&gt;
                 1H       ; refresh&lt;br /&gt;
                 1H       ; retry&lt;br /&gt;
                 1W     ; expire&lt;br /&gt;
                 1H)       ; minimum&lt;br /&gt;
&lt;br /&gt;
; Nameserver&lt;br /&gt;
        IN     NS      ns1.meinedomain.de&lt;br /&gt;
        IN     NS      ns2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; Mailserver&lt;br /&gt;
        IN     NS      mail1.meinedomain.de.&lt;br /&gt;
        IN     NS      mail2.meinedomain.de&lt;br /&gt;
&lt;br /&gt;
; PTR Einträge&lt;br /&gt;
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns1.meinedomain.de.&lt;br /&gt;
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    ns2.meinedomain.de.&lt;br /&gt;
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail1.meinedoamin.de.&lt;br /&gt;
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN     PTR    mail2.meinedomain.de.&lt;br /&gt;
f.f.a.0.5.4.7.f.0.0.c.b.f.a.0.0    IN     PTR    router.meinedomian.de.&lt;br /&gt;
0.d.e.f.3.5.f.a.b.c.f.f.a.1.3.2    IN     PTR    client1.meinedomain.de.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bearbeiten von Zonen ====&lt;br /&gt;
Zonen lassen sich mit BIND auch ohne Server-Neustart bearbeiten. Dazu dient das Werkzeug &amp;lt;code&amp;gt;rndc&amp;lt;/code&amp;gt;.&lt;br /&gt;
Zuerst muss man die Zone einfrieren, damit keine dynamischen Änderungen an der Domäne durchgeführt werden können.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc freeze meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann kann man die Zone bearbeiten mit seinen bevorzugten Editor bearbeiten.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# vi /usr/local/etc/namedb/dynamic/meinedoain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem man die Zone nach seinen Anforderungen editiert hat, muss man die Zone wieder auftauen. Die Zone wird dann automatisch neu geladen.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# rndc thaw meinedomain.de&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Schlägt das Laden der Zone fehl, hat man einen Syntaxfehler in der Zonendatei und man muss sie erneut editieren.&lt;/div&gt;</summary>
		<author><name>C9mos</name></author>
	</entry>
</feed>