Spring til indhold

IP-adresse

et tal, der fortæller netværket, hvor en pakke skal leveres

  • Number 8, door, close-up
    Foto: Liza / Pixabay
  • Dead end, sign, cul-de-sac
    Foto: Violinka / Pixabay

Brug begrebet i en beslutning

Brug »Hvad er en IP-adresse?« i en konkret beslutning. Vi kan knytte begrebet til det system, du bygger eller køber. Wi-Fi, firewalls og fjernadgang sat op, så medarbejdere kan arbejde hvor som helst, og kun de rette kommer ind.

Se vores ydelser Kontakt os

Undersøg antagelserne bag ordet

Brug forklaringen og det tilknyttede arbejde til at formulere spørgsmål til dit projekt. Vi kan undersøge antagelserne sammen, før et værktøj vælges. Har administreret 30 Ubuntu Linux VPS‑instanser — 30 Linux‑servere driftet, med en plan for gendannelse

Har administreret 30 Ubuntu Linux VPS‑instanser Kontakt os

Hvad det er

En IP-adresse er det tal, som internetprotokollen skriver ind i hver eneste pakke for at angive, hvor den skal hen, ved siden af en anden adresse, der fortæller, hvor den kom fra. I daglig tale kaldes den ofte et IP-nummer. RFC 791, specifikationen af IP version 4 fra 1981, kalder den en internetadresse og trækker grænsen i én sætning: »En adresse angiver, hvor den er.« Et navn, for eksempel et domæne, siger, hvad man leder efter, og skal først oversættes til en adresse, og det klarer DNS. Ruten, vejen mellem de to adresser, overlades til routerne undervejs.

I IPv4 er adressen på 32 bit, fire oktetter, skrevet som fire decimaltal fra 0 til 255 adskilt af punktummer: 192.0.2.10. RFC 791 delte de bit i et netværksnummer og en lokal del, og tre faste klasser afgjorde, hvor delingen faldt. Klasserne passede dårligt til de fleste organisationer: et klasse C-netværk rummede højst 254 værter, et klasse B op til 65.534, så klasse B-numrene slap op, mens routingtabellerne voksede. I september 1993 erstattede RFC 1519 klasserne med CIDR, som lader delingen falde efter en hvilken som helst bit og skriver dens position efter en skråstreg. 192.0.2.0/24 er den blok, hvis første 24 bit ligger fast: 256 adresser.

IPv6 udvider adressen til 128 bit. Den skrives som otte grupper med op til fire hexadecimale cifre adskilt af koloner, og RFC 4291 tillader, at én række af nulgrupper trækkes sammen til ::, så 2001:db8:0:0:0:0:2:1 også kan skrives 2001:db8::2:1. Fordi den samme adresse dermed kunne staves på mange måder, fastlagde RFC 5952 senere én anbefalet form: små bogstaver, ingen foranstillede nuller i en gruppe og :: brugt til den længste række af nulgrupper.

En adresse tilhører en netværksgrænseflade, ikke en maskine. Allerede RFC 791 sagde, at en enkelt vært skal kunne optræde som flere, med flere internetadresser, og at nogle værter har flere fysiske grænseflader. RFC 4291 kræver, at hver IPv6-grænseflade har mindst én link-lokal adresse, der kun gælder på dens eget netværkssegment, uanset hvilke andre adresser den har. En vært på et netværk, der kører begge versioner, har derfor flere adresser på én gang, foruden de loopback-adresser, den bruger til at nå sig selv: blokken 127.0.0.0/8 i IPv4 og ::1 i IPv6.

Ikke alle adresser kan nås fra alle steder. RFC 1918 afsætter tre IPv4-blokke til private netværk, 10.0.0.0/8, 172.16.0.0/12 og 192.168.0.0/16, og siger, at routinginformation om dem ikke må gives videre mellem organisationer. En enhed med en af dem når derfor kun internettet gennem noget, der træder i stedet for den, for eksempel NAT, som RFC 3022 beskriver som oversættelse af den private adresse til en offentlig på vej ud. Tre andre blokke, 192.0.2.0/24, 198.51.100.0/24 og 203.0.113.0/24, er reserveret af RFC 5737 til dokumentation, og RFC 3849 gør det samme for 2001:db8::/32 i IPv6. Alle eksempeladresser i denne artikel kommer fra disse dokumentationsområder.

Hvorfor det betyder noget

Adressen er den ene oplysning om en klient, som en server altid har, for uden den ville svaret ikke have nogen steder at gå hen. Derfor er den standardnøglen til mange beslutninger: regler i en firewall tillader eller blokerer efter adresse, en rate limit tæller anmodninger pr. adresse, en adgangslog skriver den på hver linje, og en misbrugsanmeldelse nævner den. Hver af dem virker kun så godt, som adressen identificerer det, man tror, den identificerer.

Den identificerer mindre, end det ser ud til. Bag NAT kan alle enheder på et kontor eller i en husstand nå internettet fra den samme offentlige IPv4-adresse, så en blokering eller en grænse rettet mod én af dem rammer dem alle. Bag en proxy eller et CDN ser serveren proxyens adresse på hver anmodning, og klientens egen adresse ankommer, hvis den overhovedet gør, i en header, som en anden har skrevet. En regel skrevet mod en adresse er en regel om en position i netværket, aldrig om en person.

Samtidig afslører den mere, end folk regner med. RFC 7239, der standardiserede den Forwarded-header, som proxyer bruger til at give klientens adresse videre, bemærker i sit afsnit om privatliv, at en IP-adresse kan identificere en klient entydigt, vise hvilken operatør den bruger, og give et groft billede af, hvor den befinder sig. En log fuld af adresser er derfor et ansvar lige så meget som et værktøj, og en god grund til at beslutte, hvad man gemmer, før man begynder at gemme det.

Og nu findes der to slags. Alt, der fortolker, gemmer eller sammenligner adresser, skal tage lige godt imod IPv4 og IPv6, fordi en klient på et netværk, der tilbyder begge, kan komme over den ene eller den anden. Kode skrevet dengang, hvor hver adresse kunne være i femten tegn af cifre og punktummer, går i stykker ved den første besøgende med IPv6, som regel et sted langt fra der, hvor adressen blev læst.

Sådan ser det ud i praksis

Pythons standardbibliotek har et ipaddress-modul, der fortolker begge versioner og klarer regnestykkerne, så man aldrig behøver at splitte tekststrenge i hånden. I en interaktiv session:

>>> import ipaddress
>>> ipaddress.ip_address("203.0.113.57")
IPv4Address('203.0.113.57')
>>> ipaddress.ip_address("2001:0DB8:0000:0000:0000:0000:0002:0001")
IPv6Address('2001:db8::2:1')
>>> ipaddress.ip_network("203.0.113.57/24", strict=False)
IPv4Network('203.0.113.0/24')
>>> ipaddress.ip_network("2001:db8:42:7::5/48", strict=False)
IPv6Network('2001:db8:42::/48')

Det andet kald viser den normalisering, RFC 5952 beder om: den lange stavemåde med store bogstaver og den korte med små er den samme adresse, og modulet udskriver den kanoniske form. En streng som 192.0.2.300 afvises med en ValueError, fordi 300 ikke kan være i en oktet. De to sidste kald gør en adresse til netværket omkring den. Uden strict=False ville modulet også afvise dem, fordi 203.0.113.57/24 har værtsbit sat; med det sættes værtsdelen til nul, og tilbage står netværket alene.

Netop den nulstilling bruger dette site på sine besøgendes adresser. Dets side om privatliv siger, at IP-adressen aldrig gemmes fuldt ud: den forkortes i det øjeblik, loglinjen skrives, og den sidste del erstattes med nuller, før noget som helst rammer disken, så det, der gemmes, peger på et groft netværk, hvor et helt kontor og en hel gade kan se ens ud. Siden tilføjer, at serveren skriver adressen i to felter og slører dem begge, og at de felter i forespørgslen, der kan bære en adresse i sig selv, dem en virksomheds proxy eller et indholdsnetværk sætter foran den besøgende, fjernes, før linjen skrives. Den siger ikke, hvor mange bit der overlever; /24 og /48 ovenfor er denne artikels illustration, ikke sitets indstillinger. Pointen holder uanset hvad. En adresse, der aldrig skrives fuldt ud, kan ikke lække fuldt ud, og når den forkortes på vej ind, afhænger det ikke af et oprydningsjob, der en dag kan holde op med at køre.

Hvor det går galt

At stole på en header for klientens adresse. X-Forwarded-For og den standardiserede Forwarded-header er almindelige felter i forespørgslen, og RFC 7239 advarer om, at hver knude på vejen til serveren kan ændre Forwarded-headeren, også klienten selv. Kode, der tager den første adresse på listen, lader enhver klient vælge sin egen adresse og dermed sin egen rate limit og sin egen plads på en tilladelsesliste. Brug adressen fra TCP-forbindelsen, medmindre forespørgslen kom gennem en proxy, du selv driver, og læs i så fald kun det, dine egne proxyer har tilføjet, talt fra højre.

At behandle en adresse som en person. Fordi mange brugere kan dele én adresse, kan en udelukkelse af en adresse spærre et helt kontor ude, og en grænse beregnet til én person kvæler en hel skole. Brug adresser til grove beslutninger, sæt grænser med delte adresser i tankerne, og knyt alt personligt til en konto, der er logget ind.

At sammenligne adresser som tekst. 2001:db8::2:1 og 2001:DB8:0:0:0:0:2:1 er én adresse og to forskellige strenge, så en tilladelsesliste, der matcher på tekst, godtager den ene og afviser den anden. Fortolk begge sider, før du sammenligner, eller gem kun formen fra RFC 5952.

At fortolke for IPv4 alene. Et regulært udtryk for fire tal med punktummer, en kolonne beregnet til femten tegn eller kode, der deler vært og port ved det sidste kolon, fejler alle på IPv6. Brug en rigtig parser og en kolonnetype eller -længde, der passer til begge versioner. Når en port skrives ved siden af en IPv6-adresse, anbefaler RFC 5952 kantede parenteser, som i [2001:db8::1]:443, fordi den sidste gruppe ellers kunne læses som en del af adressen.

At gemme fulde adresser længere end nødvendigt. Logs, analysetabeller og backups samler adresser i årevis, hvis intet stopper dem. Beslut, hvilken præcision du har brug for, forkort adressen, når den skrives, i stedet for bagefter, og giv resten en udløbsdato.

At bruge rigtige adresser i eksempler. En eksempelkonfiguration, et sæt testdata eller et skærmbillede med en andens rigtige adresse sender kopieret trafik til en fremmed. RFC 5737 reserverer sine tre blokke netop for at mindske den slags konflikter og forvirring; brug dem, og 2001:db8::/32 til IPv6.

Læs mere

Ordliste

Vælg ud fra dine faktiske vilkår

Medbring udrulningsforløbet, driftsrisiciene og dem, der har vagten. Vi kan afgrænse en ændring med kontroller, en vej tilbage og tydeligt ansvar.

Se, hvad det koster Kontakt os

Gør begreberne praktiske

Spørg, hvordan »Hvad er en IP-adresse?« gælder i din organisation. Et konkret eksempel fra dit nuværende system er nok til at begynde samtalen.

Se vores ydelser
welcome@engineer.company +45 50 10 61 84 København, Danmark
QR-kode til IP-adresse
Tag denne side med dighttps://engineer.company/da/glossary/ip-address/