CIDR-Notation und Subnetzmasken: /8 bis /32 richtig lesen
Die Zahl hinter dem Schrägstrich in 192.168.1.0/24 zählt Bits, keine Adressen. Sie gibt an, wie viele der 32 Bit einer IPv4-Adresse zum Netz gehören; was übrig bleibt, gehört den Hosts. Dieser eine Satz ist im Wesentlichen die ganze CIDR-Notation.
Alles Weitere folgt daraus. Ein /24 lässt 8 Host-Bits übrig, der Block fasst also 2⁸ = 256 Adressen. Ein /26 lässt 6 übrig und fasst damit 64. Jedes Bit, das Sie der Host-Seite zurückgeben, verdoppelt den Block; jedes Bit, das Sie ihr wegnehmen, verdoppelt die Anzahl der Blöcke. Die Zahl, die Sie tatsächlich an Geräte vergeben können, liegt normalerweise zwei darunter, denn die erste Adresse benennt das Netz und die letzte ist die Broadcast-Adresse. Ein /26 liefert 62 nutzbare Hosts, nicht 64.
Zwei Präfixe brechen diese Minus-zwei-Regel mit Absicht. Und eine Wildcard-Maske ist keine Subnetzmaske, auch wenn die beiden ständig im Feld der jeweils anderen landen. Ein Präfix zu lesen und die Maske von Hand auszurechnen ist schnell gelernt; interessant sind die Stellen, an denen die Arithmetik aufhört, offensichtlich zu sein. Wenn Sie nur die Antwort für einen einzigen Block brauchen, gibt der Subnetzrechner sie aus; hier geht es darum, ohne ihn dorthin zu kommen.
Was die CIDR-Notation tatsächlich aussagt
Eine Subnetzmaske ist selbst eine 32-Bit-Zahl, geschrieben wie eine Adresse. Ihre Bits bestehen aus einer Folge von Einsen, gefolgt von einer Folge von Nullen. Die Einsen markieren Netz-Bits, die Nullen markieren Host-Bits. Schreibt man ein /26 vollständig aus, ergibt das:
11111111.11111111.11111111.11000000
255 . 255 . 255 . 192
Rechnet man jedes Oktett zurück in Dezimal, steht dort 255.255.255.192. Die CIDR-Notation zählt die führenden Einsen, statt alle zweiunddreißig Stellen hinzuschreiben. 192.168.1.0/26 und 192.168.1.0 255.255.255.192 sind dieselbe Aussage in zwei Syntaxen, und welche ein Gerät haben will, hängt ausschließlich von dem Befehl ab, den Sie gerade tippen.
Die Zählung ist der ganze Trick. /8, /16 und /24 liegen auf Oktett-Grenzen, deshalb sehen sie in Dezimalschreibweise so aufgeräumt aus: 255.0.0.0, 255.255.0.0, 255.255.255.0. Die Notation verlangt das nirgends. /22 und /27 sind genauso gültig. Sie schneiden mitten durch ein Oktett und erzeugen Masken wie 255.255.252.0, die willkürlich wirken, bis man sie binär hinschreibt.
Warum die Klassen verschwunden sind. Vor 1993 entschieden die führenden Bits einer Adresse über ihre Größe: Klasse A bekam ein /8, Klasse B ein /16, Klasse C ein /24, und dazwischen gab es nichts. Eine Organisation mit 300 Hosts hatte die Wahl: eine Klasse B beanspruchen und über 65000 Adressen verschwenden oder zwei Klasse-C-Blöcke nehmen und zwei Routen mitschleppen. CIDR (RFC 1519, später überarbeitet als RFC 4632) hat diese Kopplung aufgelöst. Das Präfix reist mit der Adresse, ein Block kann also jede Zweierpotenz sein. Klassen tauchen weiterhin in Zertifizierungsprüfungen und in alter Dokumentation auf, aber klassenbasiertes Routing ist seit der Einführung von CIDR im Jahr 1993 obsolet. Über das Ende eines Netzes entscheidet die Maske, nicht das erste Oktett.
Die Subnetzmasken-Tabelle, /8 bis /32
Die letzte Spalte steht mit Absicht in der Tabelle: Sie zeigt, was die allgemeine Formel 2ⁿ − 2 liefert, und das deckt sich überall mit der echten Zahl nutzbarer Adressen, außer in den beiden untersten Zeilen.
| Präfix | Subnetzmaske | Wildcard-Maske | Adressen gesamt | Nutzbare Hosts | Naives 2ⁿ − 2 ergibt |
|---|---|---|---|---|---|
| /8 | 255.0.0.0 | 0.255.255.255 | 16777216 | 16777214 | 16777214 |
| /9 | 255.128.0.0 | 0.127.255.255 | 8388608 | 8388606 | 8388606 |
| /10 | 255.192.0.0 | 0.63.255.255 | 4194304 | 4194302 | 4194302 |
| /11 | 255.224.0.0 | 0.31.255.255 | 2097152 | 2097150 | 2097150 |
| /12 | 255.240.0.0 | 0.15.255.255 | 1048576 | 1048574 | 1048574 |
| /13 | 255.248.0.0 | 0.7.255.255 | 524288 | 524286 | 524286 |
| /14 | 255.252.0.0 | 0.3.255.255 | 262144 | 262142 | 262142 |
| /15 | 255.254.0.0 | 0.1.255.255 | 131072 | 131070 | 131070 |
| /16 | 255.255.0.0 | 0.0.255.255 | 65536 | 65534 | 65534 |
| /17 | 255.255.128.0 | 0.0.127.255 | 32768 | 32766 | 32766 |
| /18 | 255.255.192.0 | 0.0.63.255 | 16384 | 16382 | 16382 |
| /19 | 255.255.224.0 | 0.0.31.255 | 8192 | 8190 | 8190 |
| /20 | 255.255.240.0 | 0.0.15.255 | 4096 | 4094 | 4094 |
| /21 | 255.255.248.0 | 0.0.7.255 | 2048 | 2046 | 2046 |
| /22 | 255.255.252.0 | 0.0.3.255 | 1024 | 1022 | 1022 |
| /23 | 255.255.254.0 | 0.0.1.255 | 512 | 510 | 510 |
| /24 | 255.255.255.0 | 0.0.0.255 | 256 | 254 | 254 |
| /25 | 255.255.255.128 | 0.0.0.127 | 128 | 126 | 126 |
| /26 | 255.255.255.192 | 0.0.0.63 | 64 | 62 | 62 |
| /27 | 255.255.255.224 | 0.0.0.31 | 32 | 30 | 30 |
| /28 | 255.255.255.240 | 0.0.0.15 | 16 | 14 | 14 |
| /29 | 255.255.255.248 | 0.0.0.7 | 8 | 6 | 6 |
| /30 | 255.255.255.252 | 0.0.0.3 | 4 | 2 | 2 |
| /31 | 255.255.255.254 | 0.0.0.1 | 2 | 2 | 0 |
| /32 | 255.255.255.255 | 0.0.0.0 | 1 | 1 | −1 |
Die Tabelle ist eher eine Menge von Beziehungen als eine Liste von Antworten. Jede Zeile weiter unten halbiert den Block: /24 fasst 256 Adressen, /25 fasst 128, /26 fasst 64. Die Wildcard-Spalte ist die Subnetzmaske mit invertierten Bits, deshalb stehen 255.255.255.192 und 0.0.0.63 immer in derselben Zeile. Und die beiden fett gesetzten Zeilen sind die Stellen, an denen die Standardformel die Wirklichkeit nicht mehr beschreibt; davon handelt ein späterer Abschnitt.
Auswendig lernen muss man nur die Werte des letzten Oktetts in der Maskenspalte, denn sie wiederholen sich: 128, 192, 224, 240, 248, 252, 254, 255. Das sind die einzigen acht nicht-trivialen Byte-Werte, mit denen eine gültige Maske enden kann. Wer selbst nachrechnen möchte, warum das so ist: Der Zahlensystem-Konverter gibt jeden davon binär aus.
Die Tabelle rückwärts lesen: von der Subnetzmaske zum Präfix
Zählen Sie bei einer Maske in Punktnotation die Einsen. Jede 255 steuert 8 bei, und das eine interessante Oktett liefert den Rest:
| Letztes Maskenoktett | 128 | 192 | 224 | 240 | 248 | 252 | 254 | 255 |
|---|---|---|---|---|---|---|---|---|
| Beigesteuerte Bits | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
255.255.255.192 ist also 8 + 8 + 8 + 2 = /26. Und 255.255.252.0 ist 8 + 8 + 6 + 0 = /22, denn 252 lautet binär 11111100.
Daraus ergeben sich zwei Dinge. Jedes Oktett, das weder 255 noch 0 ist, ist das Grenzoktett, und eine gültige Maske kann davon immer nur eines haben. Der Wert dieses Oktetts liefert außerdem direkt die Blockgröße.
Subnetzmaske und Netz von Hand berechnen
Das mechanische Verfahren hat drei Schritte und funktioniert für jedes Präfix. Das durchgerechnete Beispiel unten benutzt 192.168.1.130/26, aber das Vorgehen bleibt für jede Adresse dasselbe.
Schritt 1: die Blockgröße bestimmen
Die Blockgröße ist 256 − das Grenzoktett der Maske.
Bei einem /26 lautet die Maske 255.255.255.192, die Blockgröße ist also 256 − 192 = 64. Subnetze dieser Größe liegen auf Vielfachen von 64 im vierten Oktett: 0, 64, 128, 192. Andere Startpunkte gibt es nicht.
Blockgröße und Adressanzahl sind dieselbe Zahl, nur von der Maskenseite her erreicht statt über die Bit-Zählung.
Schritt 2: den Block finden, in dem die Adresse liegt
Teilen Sie das Grenzoktett der Adresse durch die Blockgröße und runden Sie ab.
Die Adresse ist 192.168.1.130, die Blockgröße ist 64, also 130 ÷ 64 = 2.03…, abgerundet 2. Zurückmultipliziert: 2 × 64 = 128. Die Adresse liegt in dem Block, der bei 128 beginnt.
Die meisten Fehler passieren hier, und immer in dieselbe Richtung: Man hält die übergebene Adresse für den Anfang ihres Blocks, und das ist sie meistens nicht. 192.168.1.130 ist eine Host-Adresse im dritten /26 dieses /24.
Schritt 3: Netz, Broadcast, erster und letzter Host
Der Blockanfang ist die Netzadresse. Der Broadcast ist Blockanfang plus Blockgröße minus eins. Alles echt dazwischen lässt sich vergeben:
Network 192.168.1.128
Broadcast 192.168.1.191
Usable 192.168.1.129 - 192.168.1.190
Usable 62 (of 64 total)
Netmask 255.255.255.192
Wildcard 0.0.0.63
Der Broadcast ist 128 + 64 − 1 = 191. Der erste Host ist Netzadresse + 1, der letzte ist Broadcast − 1, und die nutzbare Anzahl ist 64 − 2 = 62, passend zur /26-Zeile der Tabelle.
Zusammengedampft auf einen Satz, den Sie sich selbst aufsagen können: Die Blockgröße ist 256 minus Maskenoktett; runden Sie die Adresse auf ein Vielfaches davon ab, das ist Ihr Netz; und der nächste Blockanfang minus eins ist Ihr Broadcast.
Das Verfahren ist nicht auf das vierte Oktett beschränkt. Bei einem /22 lautet die Maske 255.255.252.0, das Grenzoktett ist also das dritte, und die Blockgröße dort ist 256 − 252 = 4. Blöcke beginnen demnach bei 10.0.0.0, 10.0.4.0, 10.0.8.0, und der Block 10.0.0.0/22 reicht bis zum Broadcast 10.0.3.255 mit den nutzbaren Adressen 10.0.0.1 bis 10.0.3.254, also vier aufeinanderfolgende /24 in einer Broadcast-Domäne. Dieselben drei Schritte, anderes Oktett.
Wenn Sie zwischen Binär und Dezimal ins Stocken geraten: Der Leitfaden zur Umrechnung von Zahlensystemen behandelt das gründlicher, als es ein Artikel über Subnetting tun sollte.
Wer seine Rechnung lieber im Skript prüft als im Kopf: Pythons Standardbibliothek weiß das alles bereits.
import ipaddress
net = ipaddress.ip_network("192.168.1.130/26", strict=False)
print(net) # 192.168.1.128/26
print(net.network_address) # 192.168.1.128
print(net.broadcast_address) # 192.168.1.191
print(net.netmask) # 255.255.255.192
print(net.hostmask) # 0.0.0.63
print(net.num_addresses) # 64
print(len(list(net.hosts()))) # 62
strict=False erlaubt die Übergabe einer Host-Adresse anstelle einer Netzadresse; mit dem Standardwert strict=True löst derselbe Aufruf ein ValueError aus.
Wo die Minus-zwei-Regel aufhört zu stimmen
Hinter der Subtraktion steckt ein Grund. In einem gewöhnlichen Subnetz benennt das Host-Muster aus lauter Nullen das Netz selbst, und das Muster aus lauter Einsen ist die gerichtete Broadcast-Adresse. Keine der beiden lässt sich auf einer Schnittstelle konfigurieren, ein Block aus 2ⁿ Adressen bietet den Hosts also 2ⁿ − 2 an. Deshalb liefert ein /24 254 und ein /26 62.
Damit ist auch gesagt, wo die Regel endet. Sobald ein Block zu klein ist, um diese beiden reservierten Adressen überhaupt zu enthalten, ergibt es keinen Sinn mehr, sie abzuziehen.
Ein /31 hat zwei Adressen und zwei nutzbare Hosts. RFC 3021 definiert /31 für Punkt-zu-Punkt-Verbindungen. Eine solche Verbindung hat genau zwei Endpunkte und kein gemeinsames Segment; damit gibt es für eine Broadcast-Adresse nichts zu tun und für eine Netzadresse nichts zu identifizieren. Beide Adressen gehen an die beiden Enden. 2ⁿ − 2 liefert hier 0; die Arithmetik beantwortet eine Frage zu einer Topologie, für die sie nicht gilt. Die Voraussetzung dafür ist ernst gemeint: /31 ist nur auf echten Punkt-zu-Punkt-Schnittstellen gültig. Ein LAN-Segment mit Mehrfachzugriff braucht weiterhin /30 oder kürzer, und Windows akzeptiert auf einer NIC kein /31.
Ein /32 hat eine Adresse und einen nutzbaren Host. Es ist eine einzelne Host-Route: Loopback-Schnittstellen, statische Routen, Anycast-Adressen, Firewall-Regeln für eine einzelne Adresse. Eine Broadcast-Adresse gibt es nicht, das − 2 der Formel würde also −1 ergeben.
Python sieht das in beiden Fällen genauso:
import ipaddress
p2p = ipaddress.ip_network("203.0.113.4/31")
print([str(h) for h in p2p.hosts()]) # ['203.0.113.4', '203.0.113.5']
host = ipaddress.ip_network("10.0.0.1/32")
print([str(h) for h in host.hosts()]) # ['10.0.0.1']
Im Kopf behält man das am besten nicht als „zwei Ausnahmen, die man sich merken muss”, sondern als „die Subtraktion entfernt zwei bestimmte Adressen, und vorher prüft man, ob es sie gibt”. Ein /31 und ein /32 haben überhaupt keine Broadcast-Adresse, also wird nichts entfernt.
Gesamtzahl, nutzbare Adressen und Anzahl der Subnetze sind drei verschiedene Zahlen
Diese drei bringt man ständig durcheinander, und das ist nachvollziehbar, weil alle drei Zweierpotenzen aus demselben Präfix sind.
- Adressen gesamt in einem /p sind
2^(32 − p). Bei einem /26: 64. - Nutzbare Hosts sind das minus 2, außer bei /31 und /32. Bei einem /26: 62.
- Anzahl der Subnetze, die beim Aufteilen eines übergeordneten /p in /q entstehen, ist
2^(q − p). Ein /24 in /26 aufzuteilen leiht zwei Bits, macht2² = 4Subnetze.
Die drei beantworten verschiedene Fragen. Ein Satz wie „ein /26 gibt Ihnen 4” stimmt daher nur, wenn die Frage vom Aufteilen eines /24 handelte. Das Aufteilen kostet außerdem Adressen, denn jedes Kind-Subnetz reserviert sein eigenes Paar aus Netz- und Broadcast-Adresse. Vier aus einem /24 herausgeschnittene /26 fassen 4 × 62 = 248 nutzbare Adressen gegenüber 254 im Elternblock; sechs Adressen gehen für die Aufteilung selbst drauf.
Wildcard-Maske und Subnetzmaske: welcher Befehl welche will
Eine Wildcard-Maske ist das bitweise Komplement der Subnetzmaske. Wo die Subnetzmaske Einsen hat, hat die Wildcard-Maske Nullen. Nehmen Sie die /26-Zeile der Tabelle: Subnetzmaske 255.255.255.192, Wildcard-Maske 0.0.0.63. Invertieren Sie jedes Bit der einen, und Sie haben die andere, deshalb treten sie nie getrennt auf.
Die beiden wirken in entgegengesetztem Sinn, und genau das muss sitzen. Ein Gerät verknüpft die Subnetzmaske per bitweisem AND mit der Adresse, ein 1-Bit bedeutet also „dieses Bit gehört zum Netz”. Eine Wildcard-Maske ist ein Match-Filter, ein 0-Bit bedeutet also „dieses Bit muss übereinstimmen” und ein 1-Bit „egal”. Es ist dieselbe Operation mit umgekehrter Polarität. Falls die Mechanik auf Bit-Ebene unscharf ist: Der Leitfaden zu bitweisen Operationen behandelt AND, OR und NOT in allgemeinerer Form.
Welche ein Gerät will, ist keine Geschmacksfrage. Für den Block 192.168.1.128/26:
! wants the subnet mask
ip address 192.168.1.129 255.255.255.192
! wants the wildcard mask
access-list 10 permit 192.168.1.128 0.0.0.63
network 192.168.1.128 0.0.0.63 area 0
! Cisco ASA — wants the subnet mask, unlike IOS ACLs
access-list OUT permit ip 192.168.1.128 255.255.255.192 any
# Linux iproute2 — takes the prefix directly
ip addr add 192.168.1.129/26 dev eth0
Cisco-IOS-ACLs und OSPF-network-Statements nehmen die Wildcard-Maske; die ASA nimmt stattdessen die Subnetzmaske. Das ist ein Hersteller mit zwei Konventionen in derselben Produktfamilie, und deshalb ist das hier der häufigste Copy-Paste-Fehler. Andere Plattformen haben eigene Konventionen: Vergewissern Sie sich vor dem Einfügen in ein unbekanntes Feld, welche der beiden es erwartet.
Gefährlich wird es durch die Art des Fehlschlags. Fügen Sie 255.255.255.192 in eine IOS-ACL ein, liest der Router den Wert als Wildcard-Maske: Drei Oktette aus lauter Einsen bedeuten „egal”, die ersten drei Oktette werden also gar nicht mehr geprüft, und die Regel greift weit über den Block hinaus, den Sie im Sinn hatten. Es gibt keinen Syntaxfehler und keine Logzeile, nur ein permit-Statement mit falschem Geltungsbereich. Der umgekehrte Fehler hat wenigstens eine Chance aufzufallen, denn 0.0.0.63 ist keine gültige Subnetzmaske: Ihr fehlt die führende Folge von Einsen. Ob eine bestimmte Plattform den Wert zurückweist oder klaglos annimmt, sollte man nicht in der Produktion herausfinden.
Warum ACL-Wildcards Lücken haben dürfen und Subnetzmasken nicht
Eine Subnetzmaske muss aus einer zusammenhängenden Folge von Einsen bestehen, gefolgt von Nullen. Das ist keine Konvention, sondern genau das, was die AND-Operation eine Adresse in exakt zwei Teile zerlegen lässt. Ein Wert wie 255.0.255.0 hat ein Loch, beschreibt keine kohärente Grenze, und Geräte weisen ihn zurück. Python ebenfalls:
import ipaddress
ipaddress.ip_network("10.0.0.0/255.0.255.0")
# ValueError: '10.0.0.0/255.0.255.0' does not appear to be an IPv4 or IPv6 network
Gültig sind nur 33 Masken, /0 bis /32. Alles andere ist ein Tippfehler.
Für ACL-Wildcards gilt diese Einschränkung nicht, denn sie zerlegen keine Adresse in einen Netz- und einen Host-Teil. Sie sind ein Match-Filter pro Bit, Lücken sind also erlaubt und gelegentlich nützlich; eine einzelne Wildcard-Maske mit Lücke trifft zum Beispiel jede ungerade Adresse in einem Bereich. Dieser Unterschied in der Ausdrucksstärke ist der Grund, warum sich die beiden Werte nicht vertauschen lassen: Sie sind nicht dieselbe Art von Objekt, sie sehen in Punktnotation nur zufällig gleich aus.
Private, CGNAT und andere reservierte Bereiche
Ein Präfix sagt Ihnen, wie groß ein Block ist. Welcher Block es ist, sagt Ihnen, ob Sie ihn benutzen dürfen.
| Block | Bereich | Reserviert durch |
|---|---|---|
| 10.0.0.0/8 | 10.0.0.0 – 10.255.255.255 | RFC 1918 privat |
| 172.16.0.0/12 | 172.16.0.0 – 172.31.255.255 | RFC 1918 privat |
| 192.168.0.0/16 | 192.168.0.0 – 192.168.255.255 | RFC 1918 privat |
| 100.64.0.0/10 | 100.64.0.0 – 100.127.255.255 | RFC 6598 Carrier-Grade NAT |
| 169.254.0.0/16 | 169.254.0.0 – 169.254.255.255 | RFC 3927 Link-Local |
| 255.255.255.255/32 | einzelne Adresse | beschränkter Broadcast |
Die RFC-1918-Bereiche werden im öffentlichen Internet nie geroutet, und genau das macht sie als Vergabequelle sicher. Die anderen drei tauchen aus jeweils anderen Gründen auf.
100.64.0.0/10 ist Carrier-Grade-NAT-Raum. Wenn Ihr Provider Ihnen eine Adresse daraus gibt, sitzen Sie hinter dessen NAT, und ohne Tunnel erreicht Sie keine eingehende Verbindung. Es ist kein privater Raum im Sinne von RFC 1918 und steht Ihnen für einen internen Plan nicht zur Verfügung, weil Ihr Provider ihn auf der anderen Seite Ihres Routers möglicherweise schon benutzt.
169.254.0.0/16 ist Link-Local. Ein Host vergibt sich selbst eine solche Adresse, wenn DHCP scheitert; eine 169.254-Adresse auf einer Schnittstelle ist deshalb eine Diagnose und keine Konfiguration: Auf die DHCP-Anfrage hat nichts geantwortet. Verkehr dorthin überquert nie einen Router.
Für Beispiele in Dokumentation und Runbooks reserviert RFC 5737 die Bereiche 192.0.2.0/24, 198.51.100.0/24 und 203.0.113.0/24, gerade damit ein kopiertes Beispiel nicht auf einen echten Host zeigen kann.
172.16.0.0/12 sind sechzehn /16, nicht eines
Das ist der reservierte Bereich, bei dem sich die meisten vertun, und schuld ist das Präfix. Ein /12 leiht sich vier Bits aus dem zweiten Oktett, der Block reicht also von 172.16.0.0 bis 172.31.255.255 – sechzehn aufeinanderfolgende /16, nicht nur 172.16.x.x.
Die Folgen gehen in beide Richtungen. Eine Adresse wie 172.20.5.1 ist privat und liegt bequem innerhalb des Bereichs, obwohl sie nicht mit 172.16 beginnt. Und 172.15.x.x sowie 172.32.x.x sind öffentliche Adressen, die jemand anderem gehören: Eine Firewall-Regel oder eine Prüfung nach dem Muster „dem internen Bereich vertrauen”, die gegen 172.0.0.0/8 geschrieben ist, vertraut stillschweigend einem großen Stück des Internets.
Wenn Sie so eine Grenze bestätigen müssen, liefert die Tabelle die Arithmetik: Ein /12 hat 2^(32−12) Adressen, das zweite Oktett bewegt sich in Schritten von 256 − 240 = 16, und 16 + 16 = 32, der Block endet also unmittelbar vor 172.32.0.0.
VLSM: einen Block in ungleiche Subnetze aufteilen
Gleich große Subnetze sind einfach und meistens falsch. Eine Filiale, die ein einzelnes 192.168.1.0/24 bekommt, braucht vielleicht vier Segmente mit ganz unterschiedlichem Bedarf: hundert Arbeitsplätze, fünfzig Telefone, ein Dutzend Server und eine Handvoll Management-Schnittstellen. Teilen Sie das /24 in vier gleich große /26, läuft das Arbeitsplatz-Segment bei 62 Hosts über, während das Management-Segment auf 62 Adressen für zehn Geräte sitzt.
Variable Length Subnet Masking (Subnetzmasken variabler Länge) heißt, jedem Segment das Präfix zu geben, das es tatsächlich braucht. Dasselbe /24, zerlegt in ein /25, ein /26 und zwei /28.
Vom größten zum kleinsten Block vergeben. Jeder Block muss auf einem Vielfachen seiner eigenen Größe beginnen, der größte hat also die erste Wahl:
| Segment | Benötigte Hosts | Präfix | Netz | Nutzbarer Bereich | Broadcast | Subnetzmaske |
|---|---|---|---|---|---|---|
| Arbeitsplätze | 100 | /25 | 192.168.1.0 | 192.168.1.1 – 192.168.1.126 | 192.168.1.127 | 255.255.255.128 |
| Voice | 50 | /26 | 192.168.1.128 | 192.168.1.129 – 192.168.1.190 | 192.168.1.191 | 255.255.255.192 |
| Server | 12 | /28 | 192.168.1.192 | 192.168.1.193 – 192.168.1.206 | 192.168.1.207 | 255.255.255.240 |
| Management | 10 | /28 | 192.168.1.208 | 192.168.1.209 – 192.168.1.222 | 192.168.1.223 | 255.255.255.240 |
| nicht vergeben | — | /27 | 192.168.1.224 | 192.168.1.225 – 192.168.1.254 | 192.168.1.255 | 255.255.255.224 |
Mit dem Drei-Schritt-Verfahren durchgegangen:
- Das /25 hat die Blockgröße
256 − 128 = 128, beginnt also bei 0, und sein Broadcast ist0 + 128 − 1 = 127. Nutzbar 1 bis 126, das sind 126 Adressen, genug für 100 Arbeitsplätze mit Luft nach oben. Die /25-Zeile der Tabelle bestätigt es: 128 gesamt, 126 nutzbar. - Die nächste freie Adresse ist 128. Das /26 hat die Blockgröße 64, und 128 ist ein Vielfaches von 64, es passt also: Netz 192.168.1.128, Broadcast
128 + 64 − 1 = 191, nutzbar 129 bis 190. Das sind 62 nutzbare Adressen für 50 Telefone. /26-Zeile der Tabelle: 64 gesamt, 62 nutzbar. - Als Nächstes ist 192 frei. Das /28 hat die Blockgröße 16, und
192 = 16 × 12, es passt also: Netz 192.168.1.192, Broadcast 207, nutzbar 193 bis 206 – 14 Adressen für 12 Server. /28-Zeile der Tabelle: 16 gesamt, 14 nutzbar. - Als Nächstes ist 208 frei, und
208 = 16 × 13, das zweite /28 landet also auf 192.168.1.208 mit Broadcast 223 und nutzbar 209 bis 222.
Damit sind 128 + 64 + 16 + 16 = 224 der 256 Adressen verplant, übrig bleiben 192.168.1.224 bis 192.168.1.255. Diese 32 Adressen sind zufällig genau ein ausgerichtetes /27, und daraus kämen später die Punkt-zu-Punkt-Verbindungen: sechzehn /31 passen hinein, eines pro Router-Link.
Warum der größte zuerst, und was es kostet, wenn nicht. Angenommen, Sie legen die beiden /28 stattdessen nach unten: 192.168.1.0/28 und 192.168.1.16/28. Die nächste freie Adresse ist 192.168.1.32, und ein /25 muss auf einem Vielfachen von 128 beginnen, kann dort also nicht anfangen. Es muss auf 192.168.1.128 vorspringen. Die Adressen von 32 bis 127 sind nicht verloren, aber nur noch als kleinere ausgerichtete Stücke (ein /27 auf 192.168.1.32 und ein /26 auf 192.168.1.64), der Restplatz liegt am Ende also verstreut herum statt in einem zusammenhängenden Block am oberen Rand. Nehmen Sie ein weiteres Segment in die Anforderung auf, und dasselbe Manöver geht gar nicht mehr auf.
Die Sortierung nach Größe verhindert das. Nachdem Sie einen Block platziert haben, ist die nächste freie Adresse ein Vielfaches der Größe dieses Blocks, und ein Vielfaches einer größeren Zweierpotenz ist automatisch ein Vielfaches jeder kleineren. Jeder folgende, kleinere Block ist also dort ausgerichtet, wo der vorherige endete, und Sie müssen nie überspringen. Bevor Sie einen solchen Plan auf einen Switch übertragen, ist die Aufteilungstabelle im Subnetzrechner schneller, als die Ausrichtung jedes einzelnen Segments von Hand zu prüfen.
Fünf Fehler, die es bis in die Produktion schaffen
1. Die eingetippte Adresse für die Netzadresse halten
Symptom: Eine Firewall-Regel greift nirgends, oder eine Route deckt die falsche Hälfte eines Segments ab.
Ursache: 192.168.1.130/26 wurde als Netz 192.168.1.0 mit Broadcast 192.168.1.255 gelesen, also als die /24-Grenze, denn die sieht man in Dezimalschreibweise.
Lösung: Schritt 2 anwenden. Blockgröße 64, 130 ÷ 64 abgerundet ergibt 2, das Netz ist also 2 × 64 = 128. Der Block reicht von 192.168.1.128 bis 192.168.1.191, und 192.168.1.0 ist ein völlig anderes Subnetz. Sobald ein Präfix länger als /24 ist, gehen Sie davon aus, dass die übergebene Adresse eine Host-Adresse ist, solange Sie sie nicht maskiert haben.
2. 2ⁿ − 2 auf ein /31 anwenden
Symptom: Ein IPAM-Werkzeug oder eine Tabellenkalkulation meldet 0 nutzbare Hosts für eine Punkt-zu-Punkt-Verbindung, die läuft und Verkehr trägt. Ursache: Die Minus-zwei-Regel setzt voraus, dass es eine Netz- und eine Broadcast-Adresse zum Abziehen gibt. Auf einem /31 gibt es sie nicht. Lösung: Behandeln Sie /31 und /32 als Randbedingungen der Formel statt als Anomalien. RFC 3021 macht beide Adressen eines /31 vergebbar, und ein /32 ist eine einzelne Host-Route mit einer Adresse. Was 0 oder −1 meldet, hat die Formel außerhalb ihres Gültigkeitsbereichs angewendet. Prüfen Sie vorher die /31-Unterstützung der konkreten Schnittstelle, denn die Ausnahme gilt nur auf echten Punkt-zu-Punkt-Verbindungen.
3. 172.16.0.0/12 nur als 172.16.x.x lesen
Symptom: Ein interner Dienst ist aus einem Büro nicht erreichbar, oder eine Regel nach dem Muster „alle privaten Bereiche blockieren” ist undicht. Ursache: Das /12 wurde gelesen, als wäre es ein /16. Lösung: Der Bereich geht von 172.16.0.0 bis 172.31.255.255. Schreiben Sie ACLs und Allowlists gegen das Präfix 172.16.0.0/12 statt gegen ein Oktett-Muster, und denken Sie daran, dass 172.15.x.x und 172.32.x.x außerhalb davon im öffentlichen Internet liegen. Wer von Hand vergleicht: Das zweite Oktett ist das Grenzoktett und läuft in Schritten von 16.
4. Eine Wildcard-Maske in ein Feld einfügen, das eine Subnetzmaske will
Symptom: Eine ACL erlaubt weit mehr oder weit weniger als beabsichtigt, und an der Konfiguration sieht nichts falsch aus. Ursache: IOS-ACLs und OSPF-network-Statements nehmen die Wildcard-Maske, während die ASA die Subnetzmaske nimmt, und 0.0.0.63 und 255.255.255.192 sind auf den ersten Blick optisch austauschbar. Lösung: Prüfen Sie das Feld, bevor Sie einfügen. Ein brauchbares Erkennungszeichen: Bei jedem Präfix ab /8 beginnt eine Subnetzmaske mit 255 und eine Wildcard-Maske mit 0. Wenn ein Wert in einer ACL oder einem OSPF-network-Statement mit 255 beginnt, steht dort eine Subnetzmaske in einem Wildcard-Feld.
5. Eine nicht zusammenhängende Maske schreiben – oder versehentlich eine erzeugen
Symptom: Ein Gerät weist eine Konfigurationszeile zurück, oder ein selbstgebautes Skript produziert Masken, die plausibel aussehen und falsch sind. Ursache: Ein Wert wie 255.0.255.0 ist keine gültige Subnetzmaske, weil er ein Loch hat. Die Skript-Variante ist subtiler: In JavaScript nehmen die Shift-Operatoren ihren rechten Operanden modulo 32, ein Präfix außerhalb des gültigen Bereichs erzeugt also stillschweigend eine plausibel aussehende falsche Maske (aus 33 wird /1, aus −1 wird /31), statt einen Fehler zu werfen. Lösung: Den Präfixbereich vor dem Shiften validieren und jede Maske zurückweisen, die keine geschlossene Folge von Einsen gefolgt von Nullen ist. Eine Bibliothek, die bei schlechter Eingabe einen Fehler wirft, ist hier mehr wert als eine, die rät, denn beide Fehlerformen sind still.
FAQ
Was ist der Unterschied zwischen einem Subnetz und einem VLAN?
Ein VLAN ist eine auf Switches konfigurierte Broadcast-Domäne auf Layer 2; ein Subnetz ist ein Adressbereich auf Layer 3. Üblicherweise bildet man sie eins zu eins aufeinander ab, zwingend ist das aber nicht: Sie können zwei Subnetze in ein VLAN legen oder ein VLAN über Standorte hinweg trunken. Nummerieren Sie das Subnetz um, ändert sich die VLAN-ID nicht.
Wie viele Subnetze bekomme ich, wenn ich ein /24 in /26 aufteile?
Vier. Die Anzahl ist 2 hoch der Zahl der geliehenen Bits, und /26 ist zwei Bit länger als /24, macht 2² = 4 Subnetze zu je 64 Adressen. Jedes Kind reserviert seine eigene Netz- und Broadcast-Adresse, die vier /26 fassen also 248 nutzbare Adressen gegenüber 254 im übergeordneten /24.
Funktioniert die CIDR-Notation in IPv6 genauso?
Der Schrägstrich zählt weiterhin die führenden Netz-Bits, /64 bedeutet also 64 Netz-Bits von 128. Was nicht übertragbar ist, ist die Minus-zwei-Regel: IPv6 kennt keine Broadcast-Adresse, von der Gesamtzahl bleibt also nichts abzuziehen. Die Tabelle oben und der Rechner dahinter gelten nur für IPv4.
Was bedeutet 0.0.0.0/0?
Null Netz-Bits, damit trifft es jede IPv4-Adresse. In einer Routing-Tabelle ist es die Default-Route, die greift, wenn kein spezifischeres Präfix passt. Als Bind-Adresse bedeutet es „alle Schnittstellen”, weshalb ein Dienst, der auf 0.0.0.0 lauscht, aus jedem Netz erreichbar ist, an dem die Maschine hängt.
Was passiert, wenn sich zwei Subnetze im selben Netz überlappen?
Router nehmen die spezifischere Route, denn beim Weiterleiten gewinnt immer das längste passende Präfix. Hosts innerhalb der Überlappung sind sich dagegen uneinig, welche Ziele lokal sind. Das Symptom ist partiell: Manche Ziele funktionieren, andere nicht, und welche das sind, hängt davon ab, von wo aus Sie testen.
Warum wurden die Adressklassen A, B und C durch CIDR ersetzt?
Weil die Klassen nur drei Größen anboten: /8, /16 und /24. Eine Organisation mit Bedarf an 300 Adressen musste eine Klasse B nehmen und das meiste davon verschwenden oder zwei Klasse-C-Routen betreiben. CIDR erlaubte beliebige Präfixlängen. Das verlangsamte die Adressknappheit und ließ Provider viele Kundenblöcke zu einer Route zusammenfassen.
Kann ich einen privaten Bereich wie 192.168.0.0/16 beliebig unterteilen?
Ja. RFC-1918-Raum dürfen Sie in jeder Präfixlänge aufteilen, und niemand außerhalb Ihres Netzes sieht davon etwas. Die Einschränkung ist intern: Eine Überschneidung mit einem Partnernetz oder einer Cloud-VPC, mit der Sie später peeren, ist teuer wieder aufzulösen, deshalb meiden Pläne gern die Blöcke, die jeder Heimrouter ohnehin schon benutzt.
Was hängen bleiben sollte. Das Präfix zählt Netz-Bits, und die Blockgröße ist 256 − das Grenzoktett der Maske. Runden Sie die Adresse auf ein Vielfaches der Blockgröße ab, das ergibt das Netz, und addieren Sie Blockgröße minus eins für den Broadcast. Ziehen Sie zwei für das reservierte Paar ab, aber nur, wenn nicht schon ein /31 oder /32 den Grund zum Abziehen beseitigt hat. Halten Sie Wildcard-Maske und Subnetzmaske an ihrer Form auseinander. Vergeben Sie große Blöcke vor kleinen.
Nichts davon braucht ein Werkzeug, sobald es einmal sitzt, und genau deshalb lohnt es, das von Hand durchzuarbeiten. Zum Prüfen eines Plans, bevor er auf einen Router geht, oder um die binäre Grenze eines Blocks auf einen Blick zu lesen, erledigt der Subnetzrechner die Arithmetik lokal in Ihrem Browser.