/usr/home

just some random thoughts

OS X DHCP (bootpd)

nur statische IP-Adresszuweisung

Der OS X DHCP Server bootpd vergibt in der Standardeinstellung dynamisch IP-Adressen in alles konfigurierten Subnetzen. Leider lässt sich dieses verhalten weder in der Server.app noch mit dem serveradmin Tool verändern.

Einzig über die KonfigurationsDatei /etc/bootpd.plist ist das deaktivieren der dynamischen Addresszuweisung möglich. Ich empfehle zusätzlich die man-page zu bootpd zu lesen, da es noch mehr Optionen gibt, die sich nur so setzen lassen. Glücklicherweise hat Apple die Server.app so gebaut, dass Änderungen an der Konfiguration erkannt und nicht überschrieben werden.

Zuerst lasse ich mir alle konfigurierten Subnetze anzeigen:

# sudo /usr/libexec/PlistBuddy -c "print :Subnets" /etc/bootpd.plist

Array {
    Dict {
        uuid = 423E141B-9AB3-4D35-B462-6A11CE77A88F
        dhcp_router = 10.0.3.1
        dhcp_domain_name = my.home
        net_range = Array {
            10.0.2.1
            10.0.3.253
        }
        lease_max = 3600
        dhcp_domain_name_server = Array {
            10.0.0.10
            10.0.0.11
        }
        net_mask = 255.255.254.0
        allocate = true
        net_address = 10.0.2.0
        dhcp_domain_search = Array {
            my.home
        }
        selected_port_name = bond0
        name = 10.0.2/23 Ethernet (bond0)
    }
    Dict {
        uuid = B177A962-EE8A-4AAE-BFCB-5C23A7C4A517
        dhcp_router = 10.0.79.1
        dhcp_domain_name = my.home
        net_range = Array {
            10.0.78.5
            10.0.78.6
        }
        lease_max = 3600
        dhcp_domain_name_server = Array {
            10.0.0.10
            10.0.0.11
        }
        net_mask = 255.255.254.0
        allocate = false
        net_address = 10.0.78.0
        dhcp_domain_search = Array {
            my.home
        }
        selected_port_name = bond0
        name = 10.0.78.0/23
    }
}

Relevant ist dabei die Option allocate, die für jedes Subnetz einzeln auf false gestellt werden kann (default: true). Und das geht so:

sudo /usr/libexec/PlistBuddy -c "set :Subnets:0:allocate false" /etc/bootpd.plist

Null (0) ist dabei das erste Subnetz, eins (1) das zweite und so weiter.

Interessant dabei ist, dass die Server.app nun einen Button aktivieren für die Subnetze hat. Scheint also, als wäre auch das deaktivieren vorgesehen, aber schon seit ein paar Versionen vergessen worden ;-).

Noch ein Hinweis dazu: macht man das für alle konfigurierten Subnetze, so wird der DHCP Dienst in der Server.app immer als deaktiviert dargestellt. Weil aber DHCP und NetInstall beide von bootpd zur Verfügung gestellt werden, läuft der Dienst trotzdem, sobald NetInstall aktiviert ist. Zur Not einfach den NetInstall Dienst (unkonfiguriert) laufen lassen.

statische IP Zuweisungen erstellen

Die statischen mappings zwischen IP und MAC-Adresse können an zwei stellen gemacht werden:

  • /etc/bootptab
  • im (lokalen) LDAP des Macs

Weil letzteres der Weg ist, den auch die Server.app geht, beschreibe ich nur diesen. Das Format der bootptab Datei wird in der man-page erklärt.

Das LDAP kann entweder lokal (default) sein, oder ein OpenDirectory/ActiveDirectory/LDAP im Netz. Das lässt sich, neben der Server.app z.B. mit dem Workgroup Manager bearbeiten - oder mit dscl bzw. jedem LDAP Browser.

Ein paar Beispiele:

  • Alle Rechner auflisten: dscl . -list /Computers
  • IP und MAC-Adresse eines Rechners anzeigen: dscl . -read /Computers/*Computername* ENetAddress IPAddress
  • Rechner löschen: dscl . -delete /Computers/*Computername*
  • Rechner anlegen:
dscl . -create /Computers/*Computername* ENetAddress aa:bb:cc:dd:ee:ff
dscl . -append /Computers/*Computername* IPAdress 10.0.78.5

dynamische DHCP leases löschen

gespeichert werden die in /var/db/dhcpd_leases. Die Datei einfach löschen/verschieben und den bootpd neustarten.