{{tag> Coovachilli static dynamic IP statisch dynamisch Bereich Vergabe}} ====== Erweiterung des Coovachilli: Statische IPs für einige Clients vergeben ====== === (static IPs vs. dynamic IP range) === =====Das Problem ===== Es kommt häufig vor, dass man im WLAN einige IP-Adressen nicht ausschließlich //dynamisch// verteilen will, sondern dass gewisse Geräte eine **feste** IP erhalten sollen. So kann man beispielsweise schaltbare Steckdosen, Controller usw. immer unter der gleichen IP wiederfinden, was die Verwaltung vereinfacht. Das Problem hierbei ist, dass der Coovachilli die DHCP-Adressverwaltung selbst übernimmt. Die Konfiguration / Änderung ist daher etwas komplizierter als üblich, da man nicht nur die Chilli-Seite, sondern auch die Radius-Seite so einstellen muss, dass den entsprechenden Geräten per MAC-Adresse eine feste IP zugeordnet wird. =====Die Chilli-Seite===== Auf der Chilli-Seite muss zunächst das Netz angepasst werden. Standardmäßig ist es so eingestellt, dass alle IPs dynamisch vergeben werden. Dies muss geändert werden -- doch bevor es losgeht: Im Wiki ist das Netz für die WLAN-Clients falsch mit 172.**11**.0.0 voreingestellt! ( http://www.linuxmuster.net/wiki/dokumentation:addons:linuxmuster-chillispot:konfiguration ) Dies stellt ein Problem dar, da dieser Adressbereich nicht zum privaten Netz gehört sondern öffentliche IP-Adressen sind. Daher sollte man diese Einstellung unbedingt ändern und z.B. das Netz 172.**20**.0.0 wählen. (genaueres: http://de.wikipedia.org/wiki/Private_IP-Adresse#Adressbereiche ) Mit dem Befehl dpkg-reconfigure linuxmuster-chilli kann man diese Einstellung zunächst vornehmen. Alle weiteren Änderungen kann der reconfigure-Befehl nicht übernehmen. Von nun an ist Handarbeit angesagt! Unter /etc/chilli/config werden die folgenden Änderungen eingetragen: mcedit /etc/chilli/config # Diese Einstellung sollte bereits (ganz oben) vorhanden sein: HS_NETWORK=172.20.0.0 # HotSpot Network (must include HS_UAMLISTEN) HS_NETMASK=255.255.0.0 # HotSpot Network Netmask # Diese Einstellungen werden passend ergänzt: # Bereich für statische Adressen festlegen: # 30 statische Adressen und 2046 dynamische Adressen ohne Überlappung: HS_STATIP=172.20.7.0 HS_STATIP_MASK=255.255.255.224 # 30 Adressen statisch HS_DYNIP=172.20.0.0 HS_DYNIP_MASK=255.255.248.0 # 2046 Adressen dynamisch Hier ist es so eingetragen, dass "nur" 30 statische und 2046 dynamische IPs vergeben werden. Wer größere Bereiche benötigt, kann sich passende Netzmasken mit den Tool "ipcalc" bestimmen lassen: http://jodies.de/ipcalc Der aufmerksame Leser wundert sich an dieser Stelle darüber, dass sich die beiden IP-Bereiche überschneiden, bzw dass der statische Pool vollständig innerhalb des dynamischen Pools liegt. Diese Einstellung war hier zunächst auch anders, doch wenn man die Bereiche getrennt wählt, erhält man eine Warnung vom startenden CoovaChilli: //"Static out of range"!// Als nächstes folgen die Einträge zur MAC-Auth. in /etc/chilli/config: HS_MACAUTH=on # To turn on MAC Authentication HS_MACAUTHMODE=local # To allow MAC Authentication based on macallowed, not RADIUS # Hier kommasepariert die Geraete eintragen, die keine Auth. bekommen sollen: HS_MACALLOW="93:B2:5C:41:DC:83" **Achtung:** Die Datei /etc/chilli/config wird vom //dpkg-reconfigure//-Befehl automatisch überschrieben! Daher sollte man sich unbedingt nach getaner Handarbeit ein Backup dieser Datei anlegen, um die selbst gemachten Änderungen nicht zu verlieren: cp /etc/chilli/config /etc/chilli/config.bak-eigene-Einstellungen Anschließend wird der chilli neu gestartet: service chilli restart Die Logdatei unter tail -n 50 /var/log/linuxmuster-chilli/coova-chilli.log liefert ggf. Fehlermeldungen! Noch ein kleiner Tipp: Da man alle MAC-Adressen hintereinander in //eine// Zeile schreiben muss (ein Zeilenumbruch wird nicht akzeptiert), kann man den Befehl //HS_MACALLOW=// mehrmals //untereinander// einsetzen. Das erhöht die Lesbarkeit sehr! Zudem ist es ratsam, sich mit Kommentarzeichen dazu zu schreiben, welche Mac-Adresse zu welchem Gerät gehört. ===== Die Freeradius-Seite ===== Der Radius-Server übernimmt u.a. die Authentifizierung der User am Coovachilli-Server. Daher muss dem Freeradius-Server mitgeteilt werden, dass gewisse "User" (besser gesagt: MAC-Adressen) von nun an eine feste IP zugeteilt bekommen. Die Datei /etc/freeradius/users kann hierzu benutzt werden. Die laufende Version 1.3.0 benutzt diese Textdatei noch. In späteren Versionen wird sie allerdings gegen einen Eintrag in einer mySQL-Datenbank ersetzt -- aber *noch* funktioniert es so! Wer dennoch den Weg via MySQL-DB gehen will: https://help.ubuntu.com/community/WifiDocs/CoovaChilli (hier aber ungetestet!) Die Syntax in der users-Datei ist **exakt** einzuhalten. Die erste Zeile hat beispielsweise **kein** abschließendes Komma! Ein neuer und funktonierender Eintrag sieht so aus: mcedit /etc/freeradius/users ########################################################################### #Statische IP-Vergabe für Geräte im WLAN #Mac Adress Authentication fuer nicht 802.1x Geraete: # statisches Gerät 1: Unifi-Controller: 93-B2-5C-41-DC-83 Cleartext-Password := "93-B2-5C-41-DC-83" Framed-Protocol = PPP, Framed-IP-Address = 172.20.7.1, Framed-IP-Netmask = 255.255.248.0, Es muss beachtet werden, dass die Einrückungen mit dem TABULATOR vorzunehmen sind! Freeradius beschwert sich auch schnell über fehlende Kommata usw! Zudem ist das Trennzeichen bei den MAC-Adressen auf der Freeradius-Seite der Bindestrich, während auf Chilli-Seite ein Doppelpunkt gesetzt wird. Die Manpage zur users-Datei gibt es unter "//man 5 users//" oder online: http://freeradius.org/radiusd/man/users.html Anschließend wird der Freeradius-Server neu gestartet: service freeradius restart Die Log-Datei befindet sich unter tail -n 50 /var/log/freeradius/radius.log und sollte genau beobacht werden. Bei falscher/ungenauer Syntax startet der Freeradius-Server nicht und meldet dies auch in der Logdatei. Wenn alles fehlerfrei ist, erscheint als letzter Eintrag **"Info: Ready to process requests."** Mit dem radtest-Befehl kann man überprüfen, was der Freeradius-Server ausspuckt: cat /etc/chilli/hs.conf |grep radiussecret (natürlich ohne Anführungszeichen benutzen!) radtest -x 93-B2-5C-41-DC-83 93-B2-5C-41-DC-83 127.0.0.1 0 Als Antwort müsste etwas erscheinen wie: rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=66, length=38 Framed-Protocol = PPP Framed-IP-Address = 172.20.7.1 Framed-IP-Netmask = 255.255.248.0 Anschließend kann man unter tail -n 100 /var/log/freeradius/radacct/127.0.0.1/detail- einsehen, wer sich anmeldet und welche IP vergeben wurde. Die fest eingestellten Clients sollten (evtl nach Ablauf der eingestellten LeaseTime) ihre fest zugeordnete IP-Adresse erhalten. ==== Abschließende Bemerkungen: ==== Es sollte nicht unerwähnt bleiben, dass man sich mit der **MAC authentication** nicht nur das Leben erleichtert sondern ggf. auch ein Sicherheitsloch aufmacht! Die Freeradius-Webseite sieht eine etwas andere Vorgehensweise vor, die hier allerdings nicht getestet wurde: http://wiki.freeradius.org/guide/Mac-Auth (unter "Mac-Auth **or** 802.1x"). Möglicherweise kommt man (ebenfalls ungetestet) auch mit der Datei ///etc/freeradius/sites-available/dhcp// oder dem Modul ///etc/freeradius/modules/mac2ip// ans Ziel! ===== Tipps & Tricks ===== Bei der Recherche zum richtigen Vorgehen sind mir viele nützliche Befehle über den Weg gelaufen, die ich hier ebenfalls angebe: # Alle belegten MAC-/IP-Adressen sortiert ausgeben: chilli_query dhcp-list |sort -t . -k 2,2n -k 3,3n -k 4,4n -k 5,5n # Belegte IPs aus dem Pool anzeigen: chilli_query listippool |grep inuse # (Noch) angemeldete User anzeigen: ("man last" zeigt weitere Optionen) radlast -F |grep still # DHCP-Adresse freigeben: chilli_query dhcp-release Hier gab es aus nicht nachvollziehbaren Gründen den Fall, dass //ein// Client, der per DHCP seine Adresse beziehen sollte, nicht die für ihn vorgesehene //statische// Adresse bekam sondern für diesen Client jedes Mal eine //dynamische// Adresse aus dem Pool vergeben wurde. Das war besonders ärgerlich, da gerade dieser Client immer unter der gleichen IP erreichbar sein musste. Abhilfe brachte folgender clientseitiger Eintrag ganz am Ende unter ///etc/dhcp/dhclient.conf//. Danach lief alles wie geplant. interface "eth0" { send dhcp-requested-address 172.20.7.10; } ===== Offene Fragen ===== Im Moment ist es hier noch so, dass ein Client, der eine statische IP erhalten hat, alle 5 Minuten (!) am CoovaChilli anfragt, und von dort dann die Adresse bestätigt wird. Die LeaseTime steht jedoch auf 45 Minuten. Ursache momentan unklar... Genauso offen ist die Frage, warum der Befehl chilli_query listippool für die statischen Adressen die Ausgabe 0.0.0.0 liefert, wohingegen die dynamischen Adressen richtig angezeigt werden. -- Dynamic Pool ------------------------- Unit 0 : 3/ 1 : 172.20.0.2 : Unit 1 : 0/ 2 : 172.20.0.3 : [...] Unit 1791 : -inuse- : 172.20.7.1 : mac=93-B2-5C-41-DC-83 ip=172.20.7.1 age=17 [...] -- Static Pool -------------------------- Unit 2045 : -1/2046 : 0.0.0.0 : static Unit 2046 : 2045/2047 : 0.0.0.0 : static [...]