SHA2562f99d7a8a9f45d171758187d639d26220c41cee851698fab25163ba9e275b2b2Nach dem Download prüfen: echo "2f99d7a8a9f45d171758187d639d26220c41cee851698fab25163ba9e275b2b2 netdivide.sh" | sha256sum -c
Erst lesen, dann laufen lassen. Der vollständige Quelltext steht weiter unten auf dieser Seite. Einen curl … | bash-Einzeiler gibt es hier bewusst nicht.
Nutzung auf eigene Gefahr — keine Haftung für Datenverlust oder Systemschäden. Siehe Nutzungsbedingungen.
Wofür das Script gut ist
In manchen Netzen ist jede VLAN-ID fest einem eigenen Subnetz zugeordnet — eine Konvention, die das Nachschlagen in Doku oder Excel-Tabelle spart, aber im Kopf trotzdem Rechnerei bedeutet, sobald man mit einer ganzen Range von VLANs oder mit unterschiedlichen Subnetzgrößen arbeitet. Das Script macht diese Umrechnung in einem Schritt.
Was es macht
Rechnet aus einer VLAN-Range (START-VLAN END-VLAN) die zugehörigen Subnetze aus.
Zeigt Start-Netz, End-Netz und die Anzahl benötigter /24-Einheiten an.
Basis-Netz (--base), Anchor-VLAN (--anchor, die VLAN-ID, die auf x.x.0.0/PRAEFIX
zeigt) und Präfixlänge (--prefix, 8 bis 30, Default 27) sind frei einstellbar.
Warnt, wenn die Range das dritte Oktett sprengt (Basis-Netz oder Präfix zu klein).
Liefert mit --completion eine Bash-Autocompletion für die eigenen Optionen mit (per
source <(netdivide.sh --completion) einbinden oder dauerhaft nach /etc/bash_completion.d/ legen).
Wie es das umsetzt
Statt einer Lookup-Tabelle rechnet das Script die Position rein arithmetisch aus. Jede VLAN-ID bekommt einen Index relativ zur Anchor-VLAN, und aus diesem Index ergibt sich die Lage im Adressraum direkt über Ganzzahl-Division und Modulo — abhängig davon, ob das Subnetz kleiner oder größer als ein /24 ist:
local block_size=$(( 2 ** (32 - prefix) ))
if [ "$prefix" -ge 24 ]; then
local per_24=$(( 256 / block_size ))
s_third=$(( s_idx / per_24 ))
s_fourth=$(( (s_idx % per_24) * block_size ))
else
local step3=$(( block_size / 256 ))
s_third=$(( s_idx * step3 ))
s_fourth=0
fi
Ab /24 passt das Subnetz komplett ins vierte Oktett, wie bei den klassischen /27- oder /26-User-Netzen. Ist das Präfix kleiner als /24 (z. B. /23 oder /22), ist das Subnetz größer als ein /24 und belegt mehrere Einheiten im dritten Oktett — dann bleibt das vierte Oktett bei 0, und die Schrittweite im dritten Oktett wächst entsprechend. Beide Fälle laufen auf dieselbe Grundidee hinaus: keine Tabelle pflegen, sondern die Lage aus der Definition der Anchor-VLAN und der Blockgröße herleiten.
Warum ich das automatisiert habe
Es kam schon öfter vor, dass ich ich eine Anzahl an /27-Subnetzen oder anderen ausrechnen musste, weil VLANs alle ein eigenes Interface bekommen musste. Und weil ich das zu unübersichtlich fand mit einem Taschenrechner auszurechnen, hatte ich es einmal für einfache Nutzung in ein Skript eingebaut und und ergänzt habe.