Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:benutzerrechner:wlan:coovachilli-statisch]] 

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 <secret> 

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-<datum von heute> 

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 <MAC>

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
[...]
 [[anwenderwiki:benutzerrechner:wlan:coovachilli-statisch]] anwenderwiki/benutzerrechner/wlan/coovachilli-statisch.txt · Zuletzt geändert: 2016/05/06 19:56 (Externe Bearbeitung)