Innhold
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