Freifunk-Gateway aufsetzen/DHCP: Unterschied zwischen den Versionen
Miki (Diskussion | Beiträge) (Eigene Änderungen rückgängig gemacht, ich habe eine bessere Methode gefunden.) |
|||
(27 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= | == Funktion == | ||
Ein DHCP Server wird benötigt damit IPv4 Adressen in der Hood vergeben werden können. Es können hier verschiedene Systeme verwendet werden. Aus gründen der Datensparsamkeit sollte man das logging soweit wie möglich abstellen und nur wirklich techn. zwingende Daten speichern. | Ein DHCP Server wird benötigt damit IPv4 Adressen in der Hood vergeben werden können. Es können hier verschiedene Systeme verwendet werden. Aus gründen der Datensparsamkeit sollte man das logging soweit wie möglich abstellen und nur wirklich techn. zwingende Daten speichern. | ||
Der DHCP Server muss auf das Batman Interface arbeiten, falls eine Bridge verwendet wird auf der Bridge. IP Adressen müssen hier https://wiki.freifunk-franken.de/w/Portal:Netz reserviert werden. | Der DHCP Server muss auf das Batman Interface arbeiten, falls eine Bridge verwendet wird auf der Bridge. IP Adressen müssen hier https://wiki.freifunk-franken.de/w/Portal:Netz reserviert werden. | ||
Die DHCP Konfiguration kann schon mal vorbereitet werden, sollte aber erst mit als vorletzter Schritt scharf geschaltet werden. Ein DHCP-Server, der Clients nicht funktionierende DNS-Server oder ein nicht funktionierendes Gateway mitteilt, sperrt diese aus dem Freifunk Netz aus. Daher hier bitte acht geben! | |||
== dnsmasq == | |||
=== Installation === | |||
Einfach aus den Paketquellen installieren z.b. | |||
<pre> | |||
apt-get install dnsmasq | |||
</pre> | |||
=== Konfiguration === | |||
zuerst die default systemd Unit deaktivieren | |||
<pre> | |||
systemctl stop dnsmasq | |||
systemctl disable dnsmasq | |||
</pre> | |||
==== Globale Optionen ==== | |||
Danach kann man einige globale Optionen in <code>/etc/dnsmasq.d/dhcp.conf</code> | |||
<pre> | |||
quiet-dhcp | |||
bind-interfaces | |||
dhcp-authoritative | |||
dhcp-option=6,10.83.252.11,10.83.252.31,10.50.252.0 | |||
domain=fff.community | |||
</pre> | |||
<code>quiet-dhcp</code> stellt das Logging ab. <code>dhcp-option=6,..</code> setzt die DNS-Server, die an den Client gesendet werden. | |||
==== DNS-Funktionalität abschalten ==== | |||
Außerdem sollte die DNS-Funktionalität in <code>/etc/dnsmasq.d/disable-dns.conf</code> vollständig abgeschaltet werden. | |||
<pre> | |||
port=0 | |||
</pre> | |||
==== Hoodspezifische Einstellungen ==== | |||
Nun kann für jede Hood noch eine systemd Service angelegt werden. | |||
/etc/systemd/system/nuernberg-dhcp.service | |||
<pre> | |||
[Unit] | |||
Requires=network.target | |||
After=network.target | |||
[Service] | |||
Type=simple | |||
Restart=always | |||
RestartSec=20 | |||
ExecStart=/usr/sbin/dnsmasq -k --conf-dir=/etc/dnsmasq.d,*.conf --interface bat-nuernberg --dhcp-range=10.83.xx.1,10.83.xx.127,255.255.xxx.0,20m --pid-file=/var/run/dhcp-bat-nuernberg.pid --dhcp-leasefile=/var/lib/misc/bat-nuernberg.leases | |||
[Install] | |||
WantedBy=multi-user.target | |||
</pre> | |||
* <code>-k</code> behält dnsmasq im Vordergrund, was für systemd bequemer ist (in Kombination mit Type=simple) | |||
* <code>--interface</code> setzt das Interface, auf dem der DHCP-Server laufen soll. | |||
* <code>--dhcp-range</code> setzt die DHCP-Range. Die Angabe erfolgt in <von>,<bis>,<Netzmaske>,<Leasetime> | |||
** Bei neueren Batman-adv Versionen wird die Netzmaske automatisch ermittelt, wenn die Option weggelassen wird | |||
** Bei älteren Versionen ist ein Bug, daher fällt dnsmasq auf den Standard für die IP-Range (255.0.0.0 bei 10.0.0.0/8) zurück. | |||
* <code>pid-file</code> und <code>dhcp-leasefile</code> müssen für jede Hood eindeutig sein | |||
Anschließend den neuen Service registrieren und starten: | |||
<pre> | |||
systemctl daemon-reload | |||
systemctl enable dnsmasqbat0.service | |||
systemctl start dnsmasqbat0.service | |||
</pre> | |||
=== Voteile gegenüber ISC-DHCP === | |||
+ schlanker</br> | |||
+ lässt sich besser per Script konfigurieren</br> | |||
+ Loggt deutlich weniger Kram per Default mit</br> | |||
+ Logging von Leases lässt sich leicht abschalten</br> | |||
+ Man kann sehr schön pro Hood eine eigene Instanz laufen lassen und muss so bei Änderung nicht immer das komplette DHCP neu starten.</br> | |||
=== Nicht Freifunk Adressen === | |||
'''ACHTUNG''' | |||
'''Die folgende Beschreibung sollte keinesfalls ohne Rücksprache mit der Community bei dem zentralen Keyxchange umgesetzt werden, da es dort zu unvorhersehbaren Problemen kommen kann''' | |||
Für große Hoods macht es u.U. Sinn per DHCP Adressen zu vergeben die nicht im Freifunk verwendet werden (z.b. aus dem 192.168.0.0/16 oder 100.64.0.0/10 Netz). Um diese Adressen auf das Freifunk zu routen ist SNAT nötig. Folgende iptables rule ist hilfreich: | |||
<pre> | |||
iptables -t nat -A POSTROUTING -s 192.168.16.0/20 -j SNAT --to-source 10.83.252.xx | |||
</pre> | |||
wobei nach -s(ource) die Adressen die per DHCP vergeben werden angegeben werden und bei --to-source die Adresse des Servers verwendet werden muss welche im Freifunk korrekt geroutet wird. | |||
==== Achtung Freifunkprinzipien ==== | |||
Stellt bitte sicher das hier zumindest für [https://wiki.freifunk-franken.de/w/IPv6 IPv6] die Freifunkprinzipien aufrecht erhalten werden. Ein Client sollte zumindest über IPv6 dann aus dem gesamten Freifunknetz erreichbar sein. | |||
== ISC-DHCP-Server == | == ISC-DHCP-Server == | ||
'''Es ist sehr schwierig, bei diesem Server das Logging der Mac Adressen abzuschalten. Daher wird dessen Einsatz nicht empfohlen''' | |||
<div class="mw-collapsible mw-collapsed"> | |||
In isc-dhcp-server definieren wir ... | In isc-dhcp-server definieren wir ... | ||
<code> | <code> | ||
Zeile 63: | Zeile 158: | ||
Ähnlich verhält es sich mit den Nameservern: Auf unserem Gateway wurde ein DNS Server eingerichtet, also kann der domain-name-server unser eigenes Gateway, mit der reservierten statische IP aus der Hood, wie in [[Portal:Netz]], sein. Als Backup empfiehlt sich ein weiterer DNS-Server aus der Hood, in unserem Beispiel ro1 in der Fürther. | Ähnlich verhält es sich mit den Nameservern: Auf unserem Gateway wurde ein DNS Server eingerichtet, also kann der domain-name-server unser eigenes Gateway, mit der reservierten statische IP aus der Hood, wie in [[Portal:Netz]], sein. Als Backup empfiehlt sich ein weiterer DNS-Server aus der Hood, in unserem Beispiel ro1 in der Fürther. | ||
<br> | <br> | ||
</div> | |||
Aktuelle Version vom 6. November 2021, 15:11 Uhr
Funktion
Ein DHCP Server wird benötigt damit IPv4 Adressen in der Hood vergeben werden können. Es können hier verschiedene Systeme verwendet werden. Aus gründen der Datensparsamkeit sollte man das logging soweit wie möglich abstellen und nur wirklich techn. zwingende Daten speichern.
Der DHCP Server muss auf das Batman Interface arbeiten, falls eine Bridge verwendet wird auf der Bridge. IP Adressen müssen hier https://wiki.freifunk-franken.de/w/Portal:Netz reserviert werden.
Die DHCP Konfiguration kann schon mal vorbereitet werden, sollte aber erst mit als vorletzter Schritt scharf geschaltet werden. Ein DHCP-Server, der Clients nicht funktionierende DNS-Server oder ein nicht funktionierendes Gateway mitteilt, sperrt diese aus dem Freifunk Netz aus. Daher hier bitte acht geben!
dnsmasq
Installation
Einfach aus den Paketquellen installieren z.b.
apt-get install dnsmasq
Konfiguration
zuerst die default systemd Unit deaktivieren
systemctl stop dnsmasq systemctl disable dnsmasq
Globale Optionen
Danach kann man einige globale Optionen in /etc/dnsmasq.d/dhcp.conf
quiet-dhcp bind-interfaces dhcp-authoritative dhcp-option=6,10.83.252.11,10.83.252.31,10.50.252.0 domain=fff.community
quiet-dhcp
stellt das Logging ab. dhcp-option=6,..
setzt die DNS-Server, die an den Client gesendet werden.
DNS-Funktionalität abschalten
Außerdem sollte die DNS-Funktionalität in /etc/dnsmasq.d/disable-dns.conf
vollständig abgeschaltet werden.
port=0
Hoodspezifische Einstellungen
Nun kann für jede Hood noch eine systemd Service angelegt werden.
/etc/systemd/system/nuernberg-dhcp.service
[Unit] Requires=network.target After=network.target [Service] Type=simple Restart=always RestartSec=20 ExecStart=/usr/sbin/dnsmasq -k --conf-dir=/etc/dnsmasq.d,*.conf --interface bat-nuernberg --dhcp-range=10.83.xx.1,10.83.xx.127,255.255.xxx.0,20m --pid-file=/var/run/dhcp-bat-nuernberg.pid --dhcp-leasefile=/var/lib/misc/bat-nuernberg.leases [Install] WantedBy=multi-user.target
-k
behält dnsmasq im Vordergrund, was für systemd bequemer ist (in Kombination mit Type=simple)--interface
setzt das Interface, auf dem der DHCP-Server laufen soll.--dhcp-range
setzt die DHCP-Range. Die Angabe erfolgt in <von>,<bis>,<Netzmaske>,<Leasetime>- Bei neueren Batman-adv Versionen wird die Netzmaske automatisch ermittelt, wenn die Option weggelassen wird
- Bei älteren Versionen ist ein Bug, daher fällt dnsmasq auf den Standard für die IP-Range (255.0.0.0 bei 10.0.0.0/8) zurück.
pid-file
unddhcp-leasefile
müssen für jede Hood eindeutig sein
Anschließend den neuen Service registrieren und starten:
systemctl daemon-reload systemctl enable dnsmasqbat0.service systemctl start dnsmasqbat0.service
Voteile gegenüber ISC-DHCP
+ schlanker
+ lässt sich besser per Script konfigurieren
+ Loggt deutlich weniger Kram per Default mit
+ Logging von Leases lässt sich leicht abschalten
+ Man kann sehr schön pro Hood eine eigene Instanz laufen lassen und muss so bei Änderung nicht immer das komplette DHCP neu starten.
Nicht Freifunk Adressen
ACHTUNG
Die folgende Beschreibung sollte keinesfalls ohne Rücksprache mit der Community bei dem zentralen Keyxchange umgesetzt werden, da es dort zu unvorhersehbaren Problemen kommen kann
Für große Hoods macht es u.U. Sinn per DHCP Adressen zu vergeben die nicht im Freifunk verwendet werden (z.b. aus dem 192.168.0.0/16 oder 100.64.0.0/10 Netz). Um diese Adressen auf das Freifunk zu routen ist SNAT nötig. Folgende iptables rule ist hilfreich:
iptables -t nat -A POSTROUTING -s 192.168.16.0/20 -j SNAT --to-source 10.83.252.xx
wobei nach -s(ource) die Adressen die per DHCP vergeben werden angegeben werden und bei --to-source die Adresse des Servers verwendet werden muss welche im Freifunk korrekt geroutet wird.
Achtung Freifunkprinzipien
Stellt bitte sicher das hier zumindest für IPv6 die Freifunkprinzipien aufrecht erhalten werden. Ein Client sollte zumindest über IPv6 dann aus dem gesamten Freifunknetz erreichbar sein.
ISC-DHCP-Server
Es ist sehr schwierig, bei diesem Server das Logging der Mac Adressen abzuschalten. Daher wird dessen Einsatz nicht empfohlen