Enkodiranje imena servisa u IPv6 adresu

Josip Tišljar Mataušić (9A3SFZ)

Objavljeno: 8. rujna 2025.

Nedavno sam uveo IPv6 u svoju mrežu. Išao sam toliko daleko da sam u potpunosti onemogućio IPv4 te se sada oslanjam na NAT64 za pristup servisima koji imaju samo v4 adrese. Tijekom tranzicije morao sam naći način da računalima dodijelim smislene adrese kako bih im lakše pristupao.

Loše rješenje

U početku sam se vodio IPv4 načinom adresiranja. Koristio male brojeve za prepoznavanje VLAN-a i hosta zanemarujući da su adrese heksadekadske:

10.50.30.11   2001:db8:45d5:30::11
       |  |                  |   |
       |  HOST               |   HOST
       VLAN ID               VLAN ID

Opcije enkodiranja

Ubrzo sam shvatio da ovime nisam iskoristio puni potencijal 64-bitnih subneta. I dalje moram pamtiti koji host ima koji broj i slično. Potaknut adresama poput 2001:db8::cafe:beef:abba odlučio sam enkodirati ime hosta u adresu. Naravno, mogu tvoriti imena direktno iz heksadekadskih znamenki (npr. c0de), no to me ograničava samo na slova a-f.

ASCII

Druga zamisao bila je da enkodiram ASCII znakove u zadnjih 64 bita. Svaki znak zauzima 8 bitova pa bi najdulja riječ mogla imati 8 znakova. Nije loše, ali moglo bi i bolje pogotovo kad se uzme u obzir da je su mnogi znakovi komandni (\r \n…) i za ovu svrhu nepotrebni.

Baza 36

Da enkodiram sva slova engleske abecede i brojeve 0-9 potrebno je 36 kombinacija (bez da razlikujemo velika i mala slova). Zato sam odabrao brojevni sustav s bazom 36 gdje brojeve od 10 na dalje predstavljaju redom slova engleske abecede. Ovim brojevnim sustavom moguće je spremiti do 12 znakova u 64 bita.

   radio --> 45833712 --> 2bb5df0
   BAZA 36    BAZA 10      BAZA 16

Radi jednostavnosti implementacije u kodu dobiveni heksadekadski broj razlamam od kraja prema početku stavljajući dvotočku svake četiri znamenke. Zatim rezultat dodajem na kraj adrese.

2bb:5df0   2001:db8::2bb:5df0
    <----             |------|

Plan adresiranja

Od kad vršim vlastitu BGP najavu na raspolaganju mi je /40 prefiks. Ovo je moj konačni adresni plan:

  Fiksno            host BASE 36
|----------|     |-----------------|
2a0f:6284:4802:0:35df:83fe:7e3b:3ae3
            || |
            || UVIJEK 0 - nemam niti jednu lokaciju s više od 16 VLAN-ova
            |VLAN ID u heksadekadskom obliku
        Fizička lokacija

Implementacija enkodera

Sve ovo nema nikakvog smisla ako ne postoji način za brzo enkodiranje imena hosta u adresu. Zato sam napravio HTML dokument i BASH skriptu koji služe upravo tome.

HTML dokument možete isprobati tako da u padajućem izborniku odaberete 02 Bra DMZ - 0 je fizička lokacija, a 2 je broj VLAN-a. Zatim u istaknuto polje upišite radioz, zutiradio, util ili glazba (ne preusmjerava na https automatski) što će vas odvesti na prikazanu adresu kada pritisnete enter. (Dokument namjerno izgleda prastaro jer volim stare GUI-je)

BASH skripta radi na način da je prefiks već u skripti, prvi argument se samo dodaje prefiksu, a drugi se enkodira i dodaje.

./ipv36.sh 02 radioz --> 2a0f:6284:4802::6259:35e3
            || |----|
            || base36
            |VLAN ID
            Fizička lokacija
ping $(./ipv36 02 radioz)

Zašto samo ne koristiti DNS

DNS je izvrsno rješenje, kad radi. Često tijekom rada po mreži nije moguće uspostaviti vezu s DNS serverom. Iz tog razloga kad tad će biti potrebno znati IP adresu uređaja. Vođenje evidencije je svakako dobro rješenje i uvijek preporučljivo, ali kad znaš na što se želiš spojiti puno je lakše upisati ime uređaja u lokalnu HTML datoteku ili BASH skriptu nego tražiti broj u dokumentaciji. Ovakvo rješenje također ne zahtjeva sinkronizaciju podataka o imenima i odgovarajućim adresama između računala.

Dekoder