Link-local adresser

Link-local adresser ger IPv6 unika egenskaper som IPv4 inte kan erbjuda. Till exempel en nätverksenhet kan själv konstruera sin egen IPv6 link-lokal adress vid start, utan hjälp från någon DHCPv6 server. Den egen konstruerade adressen kan sedan användas för att kommunicera med alla nätverksenheter på det lokala delnätet, inklusive med den lokala routern eller den lokala DHCPv6-server. Kommunikationen med routrar eller DHCPv6 servrar är oftast med syfte att få en global unicast-adress.

Bild 1: Link-local adresser

Nätverksenheter kan kommunicera med varandra lokalt om de har en link-lokal adress, till exempel när en datorklient kontaktar en nätverksskrivare för att skriva ut ett dokument. Nu med Internet of Things finns många enheter som kommunicerar med varandra just med link-local adresser.

Vissa operativsystem som Windows kör IPv6 som default eftersom en IPv6 link-local adress konstrueras vid start. Även om egen konstruerade link-local adresser underlättar den lokala kommunikationen med andra nätverksenheter kan de öppna möjlighet till olika risker exempelvis MITM (Man In The Middle) och DoS attacker. Ett sätt att undvika sådana attacker är en korrekt och fullständigt IPv6 konfiguration.

Link-local adresser har flera användningsområden:

  • När IPv6 globala unicast adresser tilldelas dynamiskt via DHCPv6 servrar använder nätverksenheter sin link-local adress för kommunikation med DHCPv6 servrar
  • Förutom IPv6 globala unicast adress får nätverksenheter andra nödvändiga adresser som till exempel default gateway adress.
  • Routrar som kör olika routing-protokoll använder sina link-local adresser för att upptäcka nätverkstopologin så att närliggande routrar kan detekteras.
  • Routrar kan använda link-local adresser som nästa-hopp adresser. Dessa link-local adresser finns i routing-tabeller via dynamiska processer.

Struktur av en link-lokal unicast adress

Bild 2: Link-local unicast adress – format

Bild 2 visar formatet för en link-local unicast-adress. Link-local unicast adresser ligger i intervallet fe80 :: / 10.

  • De minst signifikanta 64 bitarna används som interface ID.
  • De mest signifikanta 10 bitar används för prefixet
  • Användning av prefixet fe80 :: / 10 resulterar i ett antal adresser från fe80 :: / 10 till febf :: / 10

Adressintervallet från fe80 till febf kan illustreras i binärt format som följande:

Hexadecimalt hextet Binärt
fe80::/10 FE80 1111 1110 1000 0000
FE90 1111 1110 1001 0000
FEA0 1111 1110 1010 0000
FEBF 1111 1110 1011 1111

Med prefix /10 är de första bitar till vänster fördefinierat som fe80 (f=1111, e=1110, 8=1000) vilket illustreras i tabellen ovan. Eftersom en IPv6 adress består av 128 bitar, därav normalt tilldelas 64 bitar till Interface ID, återstår 64 bitar för det globala prefixet som inkluderar subnet ID. Med link-local adresser värda 10 bitar återstår 54 bitar som kan ta alla möjliga kombinationer. Att använda vilka kombinationer som helst för dessa 54 bitar kan ställa till för vissa operativsystem därför brukas de lämnas alla 54 bitar som nollor. Till exempel följande link-local adress:

fe80::5aac:7ff:fe93:da00 eller fe80:0000:0000:0000:5aac:7ff:fe93:da00

De 54 bitarna i ovan link-local adressen har färgmarkerats.

Automatisk konfiguration av en link-local adress

De flesta operativsystem såsom Windows, Linux, och Mac OS X aktiverar IPv6 som default. Det innebär att dessa operativsystem stödjer egen konstruerade adresser eller link-local adresser. Det finns två sätt att konstruera en link-local adress:

  • EUI-64 som används av Cisco IOS, MAC OS X, och Linux exempelvis Ubuntu.
  • Slumpmässigt som används av Windows

EUI-64 link-local adresskonstruktion

Standardiseringsorganisationen IEEE definierar EUI-64 metoden (Extended Unique Identifier). Enligt EUI-64 ska användas MAC adresser (48 bitar) för att konstruera link-local adresser. Link-local adresser har som global prefix fe80::/64 och den slumpmässiga konstruktionen kan illustreras som följande:

Bild 3: EUI-64 link-local uppbyggande
  1. MAC adressen konverteras från hexadecimalt till binärt
  2. MAC adressen delas upp i mitten, det vill säga 24 bitar OUI och 24 bitar DI.
  3. Hexadecimal tal fffe (16 bitar) eller 1111 1111 1111 1110 sätts in i mitten av MAC adressen, det vill säga mellan OUI och DI. fffe är ett fördefinierat värde som regleras av IEEE.
  4. Invertera den universal/lokal bit (sjunde bit i första byte) för att indikera om link-local adressen är unique/universell (0) eller lokal administrerat (1).

En automatisk konfiguration eller dynamisk konfiguration är oftast bästa alternativ men vissa nätverksenheter, såsom routrar, behöver identifieras av nätverksadministratören och då passar inte en dynamisk konstruktion av LLA adresser.

Link-local adresser

Med hjälp av topologin i Laboration 1 kan vi utforska IPv6 Link-local adresser. Syftet är att rekonstruera MAC adressen från Link-local adresser.

 Vi tar fram PT-övningen där vi konfigurerade 3 routrar och 2 pc med globala unicast adresser. Vi studerar link-local adresser på varje router:

Bild 4: IPv6 nätverk
Cisco väljer att visa IPv6 adresser med stora bokstäver.

  • Link-local adress: FE80::260:2FFF:FECB:C201
  • Prefix FE80::/64
  • FFFE identifieras i adressen (i mitten av MAC)
    0000 0010 0110 0000 0010 1111 1111 1111 1111 1110 fortsätter
  • Sjunde bit inverteras om 0000 0000 (0010 = 2 nu 0000 = 0)
  • MAC adress: 00-60-2f-cb-c2-01
  • OUI = 00-60-2f och DI = cb-c2-01

Bild 5: R1 IPv6 adresskonfiguration
  • Link-local adress: FE80::204:9AFF:FE93:CA01
  • Prefix FE80::/64
  • FFFE identifieras i adressen (i mitten av MAC)
    0000 0010 0000 0100 1001 1100 1111 1111 1111 1110 fortsätter
  • Sjunde bit inverteras om 0000 0000 (0010 = 2 nu 0000 = 0)
  • MAC adress: 00-04-9a-93-ca-01
  • OUI = 00-04-9a och DI = 93-ca-01

Bild 6: R2 IPv6 adresskonfiguration
  • Link-local adress: FE80::201:C7FF:FE8A:3501
  • Prefix FE80::/64
  • FFFE identifieras i adressen (i mitten av MAC)
    0000 0010 0000 0001 1100 0111 1111 1111 1111 1110 fortsätter
  • Sjunde bit inverteras om 0000 0000 (0010 = 2 nu 0000 = 0)
  • MAC adress: 00-01-c7-8a-35-01
  • OUI = 00-01-c7 och DI = 8a-35-01

Bild 7: R3 IPv6 adresskonfiguration

Slumpmässigt link-local adresskonstruktion

Att använda EUI-64 för att skapa automatiskt ett 64-bitars Interface ID från en 48-bitars MAC-adress är en lämplig och praktisk teknik. Men det introducerar en vis komplexitet i adresskonstruktionen när den fysiska adressen ska identifieras först. Det leder att vissa operativsystem föredrar använda en annan metod, en slumpmässigt genererande 64-bitars Interface ID.

Cisco IOS, Linux Ubuntu, Mac OS X använder EUI-64 däremot använder Windows operativsystem, senare än Windows XP, ett slumpmässigt genererat Interface ID. Tidigare Windows operativsystem använde EUI-64.

Zone ID

Bredvid en slumpmässigt genererat link-local adress visas Zone ID, ett decimalt nummer som föregås av procenttecken exempelvis %19. Detta är känt som zone ID, eller Scope ID eller Interface Scope, på svenska användningsområde, räckvidd eller identifiering av ett interface och dess räckvidd.

Operativsystem som Windows, Linux och Mac OS använder Zone ID för att associera en link-lokal adress med ett visst interface. Zone ID hjälper till att avgöra vilket Interface som ska användas när en enhet har flera, var och en på en separat länk (delnät). Zone ID är endast lokalt signifikant.

Min dator använder trådlöst Internetuppkoppling men även trådbundet nät. Med Loopback, Bluetooth-nätverksanslutning, VirtualBox och tunneling har min dator upp till 7 interface. Varje Interface bör ha en IPv6 link-local addres. Det är nu som Zone ID hjälper till att identifiera ett specifikt interface.

Här nedan visas min dators IP konfiguration för Ethernet interface en link-local adress med Zone ID %6. Observera IPv4 adressen som är 192.168.1.110

Bild 8: Link-local adress och Zone ID

Här nedan visas min dators WiFi IP konfiguration en link-local adress med Zone ID %19. Observera IPv4 adressen 10.27.75.243

Bild 9: Link-local adress och Zone ID

En dator med två interface kommer att ha två link-lokal adresser. När ett paket ska skickas ut till någon mottagare behövs ett specifikt interface identifieras. Som sagt, Zone ID används för att identifiera rätt interface. På bilden ovan har det ena interface Zone ID %6 och det andra %19.

Med kommandot netsh interface ipv6 show interfaces kan alla Zone ID tas fram:

Bild 10: Zone ID

Duplicate Address Detection

Hur detekteras dubbletter? Link-local adresser byggs upp helt automatisk i varje nätverksenhet och då finns risken för till exempel två lika link-local adresser. IPv6 använder Duplicate Address Detection eller DAD för att säkra att inte förekommer dubbla IPv6 link-local adresser. Förenklat kan vi säga att DAD är ett protokoll som gör att nätverksenheter skickar ut meddelande till andra nätverksenheter och informerar vad för link-local adress som enheten har. Alla andra nätverksenheter kontrollerar att de inte har samma link-local adress.

Om någon mottagare i länken (delnät) detekterar samma link-local adress svarar enheten avsändaren. Hur situationen åtgärdas varierar beroende på operativsystem. Om ingen annan mottagare svarar till avsändaren kan denne verifiera att ingen annan har samma link-local adress.

Detektering av dubbla link-local adresser görs innan adressen tilldelas till en host.

Laboration 4: Link-local manuell konfiguration

Även om link-local adresser underlättar IP konfigurationer när de byggs upp och konfigureras automatiskt finns behov av att konfigurera dessa adresser manuellt istället. Dynamiska Routing protokoll som EIGRP eller OSPF använder link-local adresser som nästa hopp adress. Men med 16 hexadecimala siffror är det inte lätt för routrarna att identifiera link-local adresser och bygga upp routing-tabeller.

Laborationens syfte är att förenkla IPv6 Link-local adresser. Manuell konfiguration kan förenkla link-local adresser. Här nedan anges kommandot:

Router(config-if)# ipv6 address <link-local adress> link-local

Bild 11: Manuell LLA adresskonfiguration

Med samma nätverk som vi konstruerade tidigare i Laboration 1 kan vi förenkla link-local adresser. Det är bra att ha i åtanke att link-local adresser är unika i den länken (delnät) som de befinner sig. R1 kommer att ha samma LLA FE80::1, R2 FE80::2 och R3 FE80::3

  • R1(config)# interface gigabitethernet 0/0
  • R1(config-if)# ipv6 address fe80::1 link-local
  • R1(config-if)# exit
  • R1(config)# interface gigabitethernet 0/1
  • R1(config-if)# ipv6 address fe80::1 link-local
  • R1(config-if)# exit
  • R1# show ipv6 interface brief
  • R2(config)# interface gigabitethernet 0/0 
  • R2(config-if)# ipv6 address fe80::2 link-local
  • R2(config-if)# exit
  • R2(config)# interface gigabitethernet 0/1
  • R2(config-if)# ipv6 address fe80::2 link-local
  • R2(config-if)# exit
  • R2# show ipv6 interface brief
  • R3(config)# interface gigabitethernet 0/0
  • R3(config-if)# ipv6 address fe80::3 link-local
  • R3(config-if)# exit
  • R3(config)# interface gigabitethernet 0/1
  • R3(config-if)# ipv6 address fe80::3 link-local
  • R3(config-if)# exit
  • R3# show ipv6 interface brief

Laboration 5: LLA och static routing

Syftet med denna laboration är att förenkla routing konfigurationen genom att använda Link-local adresser som next hop adress.

  • R1(config)#ip cef
  • R1(config)#ipv6 unicast-routing
  • R1(config)#ipv6 cef
  • R1(config)#ipv6 route ::/0 g0/0 fe80::2
  • R2(config)#ip cef
  • R2(config)#ipv6 unicast-routing
  • R2(config)#ipv6 cef
  • R2(config)#ipv6 route 2001:db8:cafe:1::/64 g0/0 fe80::1
  • R2(config)#ipv6 route 2001:db8:cafe:4::/64 g0/1 fe80::3
  • R3(config)#ip cef
  • R3(config)#ipv6 unicast-routing
  • R3(config)#ipv6 cef
  • R3config)#ipv6 route ::/0 g0/1 fe80::2
  • Verifieringar
Bild 12: IPv6 Default Gateway, en Link-local adress

IP kommunikation via ping

Som bekant är det inte samma sak att pinga mellan globala unicast adresser och att pinga mellan link-local adresser, mest av två orsaker:

  • Avsändare och mottagare måste befinna sig i samma länk (delnät)
  • Link-local adresser är unika endast inne i samma länk (delnät)

Det är också bra att tänka på den default gateway för en host är egentligen routerns link-local adressen.