DNS-oppdatering versjon 1.2

Beskrivelse av DNS-oppdatering versjon 1.2.

1   Innledning

Dette dokumentet beskriver hvordan Cerebrum skal utvides til å kunne håndtere informasjon om DHCP-bindinger mellom IP-adresser og MAC-adresser.

2   Kilder for DHCP-informasjon

Det nyttes ingen eksterne kilder for DHCP-informasjon, og det blir ikke gjennomført noen initiell import av data i forbindelse med at DHCP-funksjonaliteten beskrevet i dette dokumentet blir innført. All info og alle opdateringer om DHCP-assosieringer vil dermed komme via bofh.

3   MAC-adresse-formater

I databasen skal MAC-adresser kun lagres på følgende format:

  • Skilletegn ':' mellom hvert andre tegn
  • Heksadesimale tegn, dog kun små bokstaver tillatt

Eksempel: 01:23:45:67:89:ab

Det er dermed også dette formatet som vil nyttes ved host info-oppslag og i eksporter som går fra Cerebrum.

Ved import, så skal flere formater kunne nyttes, nærmere bestemt:

  • Karakterene ':', '-', '.' og ' ' skal kunne brukes som skilletegn
  • Tegnene skal være heksadesimale; store og små bokstaver skal aksepteres
  • Skilletegn skal brukes mellom hver andre eller hvert fjerde tegn

Det gir følgende permutasjoner:

  • 01:23:45:67:89:ab
  • 01-23-45-67-89-ab
  • 01.23.45.67.89.ab
  • 01 23 45 67 89 ab
  • 01:23:45:67:89:AB
  • 01-23-45-67-89-AB
  • 01.23.45.67.89.AB
  • 01 23 45 67 89 AB
  • 0123:4567:89ab
  • 0123-4567-89ab
  • 0123.4567.89ab
  • 0123 4567 89ab
  • 0123:4567:89AB
  • 0123-4567-89AB
  • 0123.4567.89AB
  • 0123 4567 89AB

4   Lagring i databasen

Det forutsettes at det kun kan assosieres én MAC-adresse med hvert IP-nummer, mens én MAC-adresse kan assosieres med en eller flere IP-adresser. Dermed kan MAC-adresse anses som et attributt for en gitt IP-adresse, og lagres enklest ved å legge til en kolonne mac_adr i tabellen dns_ip_number.

5   API-endringer

API'et relatert til IP-nummer (klassen IPNumber i Cerebrum/modules/dns/IPNumber.py) utvides til også å kunne håndtere setting, endring og sletting av MAC-adresser.

  • mac_adr legges til blant write_attr.
  • Ny metode set_mac_adr som setter mac_adr. Ved å sette verdien til None/NULL så gjør man i praksis en sletting av MAC-adr for IP-nummeret.
  • Metoden write_db må oppdateres til å kunne håndtere mac_adr.
  • Metodene find, find_in_range og list oppdateres til også å returnere MAC-adresse.

5.1   Changelogging

Changeloggingen i metoden write_db må oppdateres til å også logge endringer i MAC-adresse.

6   Eksport

Det settes opp en jobb dns_dhcp_map som kjøres som pre-jobb til dist_zones. Denne genererer filen /cerebrum/dumps/dns/dhcp_maps.txt som består av en linje for hver IP-adresse som har en MAC-adresse assosoiert med seg.

Linjeformat:

<MAC> <IP>[,<IP>]*

hvor <IP> starter på tegn 20; mellom <MAC> og <IP> bufres det med mellomrom. Dersom en MAC-adresse er assosiert med mer enn én IP-adresse, så skal alle IP-adressene oppgis i en komma-separert liste

Filen distes til dhcp-master.uio.no:/etc/dhcpd.conf.d/dump/ ca hvert 20. minutt. I tillegg så vil filen distes til ns1.uio.no sammen med øvrige DNS-filer som distes, som del av jobben dist_zones.

BSD er ansvarlige for at brukeren cerebrum har de tilganger som trengs for å få rsync'et filen til dhcp-master.uio.no.

7   DHCP-relatrete BOFH-kommander

TBD: Hvilke andre kommandoer skal påvirkes av at vi legger til info om MAC-adresser i Cerebrum? host info? host add? host find?

7.1   dhcp assoc <IP/HOST> <MAC> <FORCE>

Knytter en MAC-adresse til den gitte IP-adressen, evt IP-adressen som tilhører den gitte hosten. Feiler dersom:

  • IP-adressen allerede har en MAC-adresse assosiert med seg, og <FORCE> ikke er brukt.
  • Host'en har mer enn én IP-adresse knyttet til seg; i stedet så må MAC-adresse assosieres direkte med hver MAC-adresse.
  • Host'en har ingen IP-adresser knyttet til seg.
  • Host/IP finnes ikke.
  • MAC-adressen er ugyldig, dvs på feil format.

Se over for hvilke formater som skal kunne aksepteres for MAC-adressen som oppgis.

Merk at å knytte en MAC-adresse til en IP-adresse som allerede har en MAC-adresse knyttet til seg er i praksis en oppdatering, og det er derfor <FORCE> er påkrevd i disse tilfellene.

7.2   dhcp disassoc <IP>/HOST> <FORCE>

Sletter MAC-adressen som er knyttet til den gitte IP-adressen.

Feiler dersom man prøver å slette MAC-adresser på en host med multiple IP-adresser uten å bruke <FORCE>.

7.3   host info

MAC-adresser skal vises sammen med sine tilhørende IP-adresser, à la:

(...)
A-records              IP              MAC
  morpheus.uio.no.     129.240.6.242   00:14:22:59:42:8c
(...)

7.4   host rename

Hvis en host får ny IP-adresse, så vil MAC-adresse assosiert med den gamle IP-adressen bli assosiert med den nye i stedet. Når dette skjer, så skal det gis melding om det.

8   Testing

8.1   BOFH-kommandoer

8.1.1   dhcp assoc

  • MAC-assosiering for gyldig IP-adresse uten MAC virker
  • MAC-assosiering for host med én gyldig IP-adresse uten MAC virker
  • MAC-assosiering for host med mer enn én gyldig IP-adresse virker ikke.
  • MAC-assosiering for gyldig IP-adresse med MAC gir feilmelding når FORCE ikke er brukt
  • MAC-assosiering for gyldig IP-adresse med MAC virker når FORCE er brukt
  • MAC-assosiering for ugyldig IP-adresse gir feilmelding
  • MAC-assosiering for ugyldig host gir feilmelding

8.1.2   dhcp disassoc

  • Sletting av MAC for gyldig IP-adresse med MAC virker
  • Sletting av MAC for gyldig IP-adresse uten MAC gir feilmelding
  • Sletting av MAC for host med én gyldig IP-adresse med MAC virker
  • Sletting av MAC for host med mer enn én gyldig IP-adresse gir feilmelding
  • Sletting av MAC for ugyldig IP-adresse gir feilmelding
  • Sletting av MAC for ugyldig host gir feilmelding

8.1.3   host info

  • Viser korrekt MAC-adresse på host'er som har dette

8.1.4   host find

  • Finner riktig host ved søk basert på MAC-adresse.

8.2   Eksport

  • Eksport-fil genereres slik den skal.
  • Eksport-fil reflekterer oppdatering som gjøres (for alle dhcp-bofh-kommandoer).
  • Fil distes slik den skal til ns1.uio.no og til dhcp-master.uio.no.

9   Produksjonssetting

Oppdatering av "cerebrum"-treet og installering av kode derfra:

cd ~/src/cerebrum
svn up Cerebrum/modules/dns/
svn up contrib/migrate_cerebrum_database.py
svn up contrib/dns/generate_dhcp_dump.py
svn up design/migrate_to_dns_1_2.sql
svn up design/mod_dns.sql
python setup.py install --prefix=/cerebrum |egrep -v "skipping|not"'

Oppdatering av konfig:

cd /cerebrum/etc/cerebrum
cvs up scheduled_jobs.py

For å gjennomføre oppgradering av databaseskjemaet og sette inn nye konstanter:

cd ~/src/cerebrum
python contrib/migrate_cerebrum_database.py --component dns --from dns_1_1 --to dns_1_2 --makedb-path . --design-path design/

Sørg for å få med den nye ChangeLog-konstanten:

python makedb.py --update-codes

Sørg for at oppdaterte jobber har blitt lastet inn i job_runner:

/cerebrum/sbin/job_runner.py --reload
Av DNS og Cerebrum
Publisert 4. sep. 2014 16:36