Für den funktionierenden Betrieb vom IPv4 und IPv6 über Ethernet ist es Voraussetzung, dass die verwendete IP im lokalen Subnetz nur einmal vergeben ist. Andernfalls wüssten die anderen Geräte im lokalen Netz - im Besonderen auch der Gateway - nicht, an welche MAC Adresse sie Pakete, die an eine bestimmte IP adressiert sind, senden müssen. Die IPv4-Adressen werden in der FeM daher zentral verwaltet und mittels DHCP vergeben. Doch damit nicht genug, wird müssen die ausschließliche Verwendung der zulässigen IPs auch durchsetzen.
Dafür kommt auf vielen Switchen DHCP-Snooping zum Einsatz. Mit dieser Technik filtert der Switch DHCP-Antworten von nicht authorisierten DHCP Servern und speichert außerdem die derzeit dem an diesem Port betriebenen Gerät zugeteilte Adresse zwischen. Versucht das angeschlossene Gerät mit einer anderen IP-Adresse zu kommunizieren, werden die Pakete verworfen.
In dem Teil des FeM-Net, wo diese Filter von den Switchen noch nicht unterstützt werden, setzen wir auf eine automatische Benachrichtigung der Administratoren, wenn fehlerhafte MAC-IP-Kombinationen auftauchen.
Während in den meisten VLANs statisch zugeteilte IPv4-Adressen zum Einsatz kommen, sind in einigen VLANs auch dynamische zugeteilte Adressen in der Verwendung. Um die Quell-MAC und Quell-IP eines Paketes auch im Fall einer dynamisch zugeteilten IP überprüfen zu können, müssen wir auf die DHCP Lease-Datenbank des DHCP Servers zugreifen.
Dafür gibt es verschiedene Möglichkeiten.
1. OMAPI-Schnittstelle
Über diese Schnittstelle kann die interne Datenbank des ISC DHCP Servers nach den derzeit gültigen Leases abgefragt werden. Daneben kann sie auch genutzt werden, um zur Laufzeit neue Hosts einzutragen uvm. Nachteilig ist dabei, dass nach dem Ablauf eines Leases die Information sofort aus der Datenbank gelöscht wird. Benötigt nun die Verarbeitung des Paketes, das überprüft werden soll, etwas länger, ist die notwendige Information mittels OMAPI nicht mehr zu ermitteln. Dafür kann das Konsolentool omshell oder auch der Perl-Wrapper darum verwendet werden (
http://search.cpan.org/~jhthorsen/Net-ISC-DHCPd/lib/Net/ISC/DHCPd/OMAPI.pm ).
2. on-Hooks
Der ISC DHCP Server unterstützt sogenannte Trigger. Das sind Programme, die ausgeführt werden, wenn ein Lease erzeugt oder beendet wird oder abläuft. Alternativ können in diesem Fall auch Log-Einträge erzeugt werden. Wichtig ist, dass das Script sehr schnell beendet, da der DHCP Server während der Ausführung angehalten ist! Mehr Informationen auch zu den unterstützten Parametern und Ausdrücken findet sich in der Man-Page zu dhcp-eval. Diese Hooks in der FeM derzeit verwendet, um die aktuellen Leases mit Verfallsdatum in einer Redis-Datenbank zu halten, wo sie auch noch ein paar Sekunden nach Ablauf des Leases ermittelt werden können
dhcpevent-Script.
subnet [% subnet.value.network %] netmask [% subnet.value.subnetmask %] {
[% IF subnet.value.dynDHCP %]
range [% subnet.value.firstAddr %] [% subnet.value.lastAddr %];
on commit {
set clip = binary-to-ascii(10, 8, ".", leased-address);
set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
set cltm = binary-to-ascii(10, 32, ".", encode-int(lease-time, 32));
execute("/usr/sbin/dhcpevent", "add", clip, clhw, cltm);
}
on release {
set clip = binary-to-ascii(10, 8, ".", leased-address);
set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
execute("/usr/sbin/dhcpevent", "remove", clip, clhw, "");
}
on expiry {
# we don't have a mac in hardware here
if(exists agent.remote-id) {
set clhw = binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6));
} else {
set clhw = "";
}
set clip = binary-to-ascii(10, 8, ".", leased-address);
execute("/usr/sbin/dhcpevent", "remove", clip, clhw, "");
}
[% END %]
}
3. Sniffen von DHCP-Paketen
Einen anderen Weg geht das Tool
DHCP-Snoopingd, welches dynamisch ebtables-basierte Filter basierend auf den aktuell gültigen Leases erstellt. Es lässt sich alle DHCP Anfragen und Antworten mittels ebtables NFLOG-Target zusenden und pflegt daraus eine lokale Datenbank der gültigen Leases. Wir verwenden es derzeit, um DHCP-Snooping auf den AccessPoints zu implementieren. Dazu werden die Leases außerdem in einer zentralen MySQL-Datenbank gespeichert. Außerdem informiert der Linux-Kernel den Dienst über neu gelernte MAC-Adressen an lokalen Bridge-Ports, sodass bei roamenden Clienten das Lease sofort aus der MySQL-Datenbank übernommen werden kann.
Trackbacks