jak pracować z nazwami DNS, gdy potrzebne są adresy IP?
Od dość dawna wiem, że nazwy DNS-owe są wspaniałą rzeczą i że administrator powinien ich używać zawsze. Ale co zrobić, gdy da się dostarczyć jedynie adres IP?
Na taką właśnie sytuację trafiłem (dość dawno temu) przy okazji cfengine 2.x. Klucze publiczne poszczególnych serwerów są umieszczane w /var/cfengine/ppkeys w formacie root-10.20.121.15.pub. Nie ma nazwy DNS, prawda?
Na szczęście rozwiązanie jest proste: składować klucze publiczne w katalogu /var/cfengine/ppkeys/hosts, a w samym /var/cfengine/ppkeys trzymać wygenerowaną listę symlinków:
[root@cfmaster ppkeys]# pwd /var/cfengine/ppkeys [root@cfmaster ppkeys]# ls hosts/ root-10.20.130.247.pub@ localhost.priv root-10.20.18.11.pub@ localhost.pub root-10.20.24.3.pub@ Makefile root-10.16.2.135.pub@ root-10.20.137.6.pub@ root-10.16.2.71.pub@ [...] [root@cfmaster ppkeys]# ls hosts/ audi.atled.pl.pub taunus.atled.pl.pub dodge.atled.pl.pub trabant.atled.pl.pub ferrari.atled.pl.pub us000149.atled.pl.pub [...] [root@cfmaster ppkeys]# ls -l root-10.20.130.247.pub lrwxrwxrwx 1 root root 31 Mar 7 10:49 root-10.20.130.247.pub -> uv000255.atled.pl.pub [root@cfmaster ppkeys]#
W ten sposób, gdy trafiła mi się zmiana adresu IP któregoś serwera, nie zastanawiałem się, któremu kluczowi zmienić nazwę. Po prostu regenerowałem symlinki.
[root@cfmaster ppkeys]# cfrun lexus
cfrun(0): .......... [ Hailing lexus.atled.pl ] ..........
WARNING - You do not have a public key from host lexus.atled.pl = 10.20.121.219
Do you want to accept one on trust? (yes/no)
--> ^C
[root@cfmaster ppkeys]# rm *(@)
[root@cfmaster ppkeys]# make
for pubkey in hosts/*.pub; do host=${pubkey#*/}; host=${host%.pub}; ln -sf $pubkey root-`getent hosts $host | awk '{print $1}'`.pub; done
[root@cfmaster ppkeys]# cfrun lexus
cfrun(0): .......... [ Hailing lexus.atled.pl ] ..........
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cfengine:lexus:
Executing script /usr/bin/svn update --quiet --config-dir /var/cfengine/svn/config...(timeout=90,uid=-1,gid=-1)
[...]
Dla wyjaśnienia, w zsh glob *(@) oznacza wszystkie pliki, które są symlinkami.
Podobnej techniki używam do utrzymywania katalogu z certyfikatami X.509 (takiego, który można podać jako CA path). Wrzucam pliki z nazwami czytelnymi dla człowieka (np. jarowit.net.cert.pem), a makefile mi regeneruje symlinki (nazwa symlinka jest ustalana komendą openssl x509 -noout -hash -in file.cert.pem).
Podsumowując, nie używaj identyfikatorów, które ci nic nie mówią. Używaj czytelnych nazw, a identyfikatory sobie generuj, czy to usługą katalogową, czy za pomocą haszowania. To oszczędza później kłopotu, gdy identyfikator się zmieni z jakiegoś powodu.
Wysłany: 07 marca 2012, 12:36:24; 7 komentarzy



