Hero Image

Privata IPv6-adresser

Enligt RFC är det rekommenderade sättet att erhålla ett unikt IPv6-prefix att kombinera tidpunkten på dygnet med ett unikt identifieringsvärde från ett system, till exempel ett serienummer eller en enhets-ID. Dessa värden hashas och trunkeras sedan, vilket resulterar i en uppsättning bitar som kan användas som en unik adress inom det reserverade privata IP-blocket fd00::/8.

För att börja generera ett IPv6-intervall ska du hämta en 64-bitars tidsstämpel med hjälp av verktyget date genom att använda följande kommando:

date +%s%N

Du kommer att få ett tal som ser ut så här, vilket är antalet sekunder (%s i datumkommandot) och nanosekunder (%N) sedan 1970-01-01 00:00:00 UTC sammanräknade:

1675615119278112544

Skriv ner värdet någonstans så att du kan använda det senare i detta avsnitt. Kopiera sedan värdet för din servers machine-id från filen /var/lib/dbus/machine-id. Denna identifierare är unik för ditt system och bör inte ändras så länge servern finns kvar.

cat /var/lib/dbus/machine-id

Du kommer att få ett resultat som ser ut ungefär så här:

283f074590a64de08635de362e8b0a7a

Nu måste du kombinera tidsstämpeln med maskin-id:t och beräkna ett hashvärde för det resulterande värdet med hjälp av SHA-1-algoritmen. Kommandot ska ha följande format:

printf <timestamp><machine-id> | sha1sum

Kör kommandot och ersätt värdena med din tidsstämpel och din maskinidentitet:

printf 1675615119278112544283f074590a64de08635de362e8b0a7a | sha1sum

Du kommer att få ett hashvärde som ser ut så här:

434a5151d85e17f863519a6afb2def55cdbc12df  -

Observera att utdata från kommandot sha1sum är i hexadecimal form, vilket innebär att varje byte i data representeras av två tecken. Till exempel är 4f och 26 i exempelutdata de två första bytena i den hashade datan.

Algoritmen i RFC kräver endast de 40 minst signifikanta (sista) bitarna, eller 5 byte, av hashvärdet. Använd kommandot cut för att skriva ut de sista 5 hexadecimalt kodade bytena från hashvärdet:

printf 434a5151d85e17f863519a6afb2def55cdbc12df | cut -c 31-

Argumentet -c anger att kommandot cut endast ska välja ut en angiven uppsättning tecken. Argumentet 31 anger att cut ska skriva ut alla tecken från position 31 till slutet av inmatningsraden.

Du bör få ett resultat som ser ut ungefär så här:

55cdbc12df

I detta exempel på utdata består uppsättningen av byte av: 55 cd bc 12 df.

Nu kan du skapa ditt unika IPv6-nätverksprefix genom att lägga till de 5 byte som du har genererat till fd-prefixet, och separera varje par byte med ett kolon (:) för att underlätta läsbarheten. Eftersom varje undernät i ditt unika prefix kan rymma totalt 18 446 744 073 709 551 616 möjliga IPv6-adresser kan du för enkelhetens skull begränsa undernätet till standardstorleken /64.

Om man använder de byte som tidigare genererats med subnätstorleken /64 blir det resulterande prefixet följande:

Unikt lokalt IPv6-adressprefix

fd55:cdbc:12df::/64

Den resulterande adressen blir fd55:cdbc:12df::1/64 för gatewayen. Vanligtvis ökar man värdet med ett varje gång man konfigurerar en server eller klient, t.ex. fd55:cdbc:12df::2/64.