Enkodiranje imena servisa u IPv6 adresu
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.