Iemand geeft je een eerste en een laatste adres en vraagt om een VPN-route. De verleidelijke zet is het kortste prefix kiezen dat beide uiteinden bevat, en die zet voegt stilletjes bestemmingen toe waar niemand om vroeg. Een CIDR-blok heeft altijd een grootte die een macht van twee is en een startadres dat daaraan is uitgelijnd, dus een willekeurig interval heeft meestal meer dan één nodig. Loop het interval door, splits het exact en controleer daarna de adressen net erbuiten.

Begin bij het interval, niet bij het prefix

Schrijf het eerste adres en het laatste adres op voordat je iets anders schrijft. Het paar is de eis; een prefix is er maar één mogelijke uitdrukking van, en soms een verkeerde. Twee getallen zijn ook veel makkelijker te controleren dan een masker.

Een uitgelijnd interval valt samen tot één blok. Een niet-uitgelijnd interval valt uiteen in meerdere, en de ontleding is exact in plaats van benaderend. Wat je niet moet doen, is naar buiten afronden en het dichtbij genoeg noemen, want de extra adressen krijgen het beleid dat de route draagt.

Beide foutrichtingen zijn belangrijk. Voor een route de tunnel in worden extra adressen de VPN in getrokken. Voor een bypass-uitzondering slaan extra adressen die over. Geen van beide uitkomsten is zichtbaar in een routetabel die alleen het prefix toont dat je hebt geïnstalleerd.

Geval één: het interval is toevallig uitgelijnd

Neem 198.51.100.64 tot en met 198.51.100.127. Het eerste adres is uitgelijnd op een grens van 64 adressen en het interval is precies 64 adressen, dus één enkel /26 beschrijft het zonder iets over te houden.

Dat is het makkelijke geval en het is de moeite waard het te herkennen, want het betekent dat de eis waarschijnlijk is geschreven door iemand die al in prefixen dacht. Het betekent ook dat de controle kort is: bevestig dat de grootte een macht van twee is en dat het begin een veelvoud van die grootte is.

Documentatiebereiken zijn goede voorbeelden juist omdat niemand ze bezit. Installeer deze adressen niet op een echte tunnel en ga er niet van uit dat een bereik dat je hebt gekregen documentatieruimte is alleen omdat het er ongewoon uitziet.

Geval twee: dat is het niet, dus splits het

Neem nu 198.51.100.100 tot en met 198.51.100.107. Dat zijn acht adressen, wat een macht van twee is, maar 100 is geen veelvoud van acht. Eén blok van die grootte kan daar niet beginnen, dus het interval moet door meer dan één worden gedekt.

De exacte dekking is twee /30-blokken: 198.51.100.100/30 dekt 100 tot en met 103, en 198.51.100.104/30 dekt 104 tot en met 107. Acht adressen in totaal, niets buiten het interval, en de ontleding is uniek voor een gegeven interval.

python3 -c "from ipaddress import ip_address, summarize_address_range as s; print(*s(ip_address('198.51.100.100'), ip_address('198.51.100.107')), sep='\n')"

De standaardbibliotheekfunctie doet de berekening voor je, en de ipaddress-documentatie bepaalt wat die teruggeeft. Wat ze niet doet, is een gateway kiezen, beslissen wie de adressen bezit, of toegang geven tot een dienst erachter.

Meet wat het bredere prefix zou hebben gevangen

Bereken de kosten voordat je een snelweg accepteert. Een /28 die bij 198.51.100.96 begint, dekt 96 tot en met 111, dat zijn zestien adressen in plaats van acht. De extra acht zijn 96 tot en met 99 en 108 tot en met 111, en elk daarvan zou de route erven.

python3 -c "from ipaddress import ip_network as n; w=set(n('198.51.100.96/28')); t=set(n('198.51.100.100/30'))|set(n('198.51.100.104/30')); print(len(w), len(t), sorted(w-t))"

Acht extra bestemmingen is een concreet getal dat je in een wijzigingsverzoek kunt zetten. Het is ook het getal dat bepaalt of de snelweg aanvaardbaar is, en dat is een kwestie van beleid en niet van rekenen.

Houd rekenen en ontdekken gescheiden. Een interval dat de netwerkbeheerder levert, wordt exact omgezet. Eén DNS-antwoord van een veranderende dienst stelt niet het volledige of blijvende bereik van die dienst vast, en onverwante namen kunnen een adres delen.

Installeer de exacte set en verifieer de randen

Geef elk resulterend prefix aan wie de VPN-configuratie bezit en laat die het via het ondersteunde mechanisme installeren. Als de eis twee vermeldingen nodig heeft, houd dan twee vermeldingen in plaats van er één te verbreden om een formulier korter te maken.

sudo ip route add 198.51.100.100/30 via 10.90.0.1 dev tun0
sudo ip route add 198.51.100.104/30 via 10.90.0.1 dev tun0
ip route get 198.51.100.101
ip route get 198.51.100.97

De laatste twee opdrachten zijn degene die mensen overslaan. Het eerste binnenste adres hoort de nieuwe route te volgen, en het adres net buiten het interval niet. Als beide dezelfde kant op gaan, is het interval ergens tussen de eis en de configuratie verbreed.

Leg het eerste adres, het laatste adres en de prefixen vast die ze uitdrukken. De volgende persoon die de regel beoordeelt, kan de eis dan tegen de configuratie controleren zonder het rekenwerk opnieuw te doen, en het verschil tussen een exacte en een gemakkelijke route blijft zichtbaar.

Gerelateerde artikelen