Le 21 avril 2022, Apple a annoncé en mettant à jour sa page d'assistance que macOS Server est  abandonné.  Apple mettant fin à la prise en charge de macOS Server est dans le même ordre que Microsoft a mis fin à la prise en charge de Windows Home Server il y a des années où les services et les fonctionnalités ont été migrés. À la fin de 2010, Apple a annoncé qu'elle interromprait la ligne Xserve en 2011, mais sa ligne de serveurs n'a pas été complètement abandonnée. Au lieu de cela, Apple avait un plan de transition selon lequel ceux qui utilisaient Xserve pouvaient passer au Mac Pro de l'ère Intel Nehalem avec des performances similaires. L'autre option était de passer au Mac Mini pour les petits environnements de serveur. Apple a même suggéré des Mac Mini montés en rack pour ceux qui n'avaient pas besoin d'un Mac Pro mais qui avaient besoin de plus d'un serveur. Malheureusement, les services fournis par macOS Server ont pour la plupart été absorbés dans macOS principal ou sont passés par le Cloud.
Dans cet article, je vous communique les principales instructions à mettre en oeuvre afin de concevoir un serveur DHCP fonctionnel.

Alternatives aux services Apple macOS

SERVICESSTATUTS
ALTERNATIVES

Gestionnaire de profil Disponible dans le serveur 5.12.2 En savoir plus sur le choix d'une solution MDM
Xsan Supprimé dans le serveur 5.12 Quantum, outils de ligne de commande intégrés à macOS
FTP Supprimé dans Server 5.4 SFTP/SSH
Documents du serveur Supprimé dans Server 5.4 Documents iCloud, Apache/WebDAV
DHCP Outils d'interface utilisateur supprimés dans le serveur 5.7.1 bootpd, intégré à macOS
DNS Supprimé dans le serveur 5.7.1 BIND, Unbound, KnotDNS
VPN Supprimé dans le serveur 5.7.1 OpenVPN, SoftEther VPN, WireGuard
Pare-feu Outils d'interface utilisateur supprimés dans le serveur 5.7.1 Pare-feu pf (intégré dans macOS)
Serveur de messagerie Supprimé dans le serveur 5.7.1 Dovecot/Postfix - Courrier, KerioConnect
Calendrier Supprimé dans le serveur 5.7.1 CalendarServer, DavMail, Radicale, Kerio Connect
Wiki Supprimé dans le serveur 5.7.1 Fichiers MediaWiki, PmWiki, XWiki, Confluence, WordPress WMX
WebSites Outils d'interface utilisateur supprimés dans le serveur 5.7.1 Serveur HTTP Apache (intégré à macOS), Nginx, Lighttpd
Contacts Supprimé dans le serveur 5.7.1 CalendarServer, DavMail, Citadel, Kerio Connect
NetBoot/NetInstall Outils d'interface utilisateur supprimés dans le serveur 5.7.1 BOOTP, TFTP, HTTP, NFS (tous intégrés à macOS), NetSUS, BSDPy
Messages Supprimé dans le serveur 5.7.1 ejabberd, Openfire, Prosody
Radius Supprimé dans le serveur 5.7.1 Radio libre
Gestion AirPort Supprimé dans le serveur 5.7.1 Utilitaire AirPort


Les options DHCP

1: Subnet Mask
3: Router
6: Domain Name Server
15: Domain Name
31: Perform Router Discovery
33: Static Route
43: Vendor Specific Information
44: NetBIOS over TCP/IP Name Server
46: NetBIOS over TCP/IP Node Type
47: NetBIOS over TCP/IP Scope
119: Domain Search
121: Classless Static Route
249: Private/Classless Static Route Microsoft
252: Private/Proxy autodiscovery

Savoir si le serveur fonctionne
sudo /usr/bin/sudo launchctl list com.apple.bootpd

Documentation BOOTPD
man bootpd

MISE EN PLACE D'UN SERVEUR DHCP

Créer un fichier bootpd.plist dans le dossier etc
sudo nano /etc/bootpd.plist

Contenu du fichier

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>bootp_enabled</key>
    <false/>
    <key>detect_other_dhcp_server</key>
    <integer>1</integer>
    <key>dhcp_enabled</key>
    <array>
        <string>en0</string>
    </array>
    <key>reply_threshold_seconds</key>
    <integer>0</integer>
    <key>Subnets</key>
    <array>
        <dict>
            <key>allocate</key>
            <true/>
            <key>lease_max</key>
            <integer>432000</integer>
            <key>lease_min</key>
            <integer>432000</integer>
            <key>name</key>
            <string>192.168.1</string>
            <key>net_address</key>
            <string>192.168.1.0</string>
            <key>net_mask</key>
            <string>255.255.255.0</string>
            <key>dhcp_router</key>
            <string>192.168.1.1</string>
            <key>dhcp_domain_name</key>
            <string>bsalado.fr</string>
            <key>dhcp_domain_name_server</key>
            <array>
                <string>192.168.1.15</string>
            </array>
            <key>net_range</key>
            <array>
                <string>192.168.1.151</string>
                <string>192.168.1.201</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

Autre exemple de fichier

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>allow</key>
        <array>
                <string>••:••:••:64:5d:5e</string>
                <string>••:••:••:0b:61:a8</string>
                <string>••:••:••:76:31:48</string>
                <string>••:••:••:9f:20:79</string>
                <string>••:••:••:ed:7c:fd</string>
                <!...>
        </array>
        <key>Subnets</key>
        <array>
                <dict>
                        <key>_creator</key>
                        <string>com.apple.NetworkSharing</string>
                        <key>allocate</key>
                        <true/>
                        <key>dhcp_domain_name_server</key>
                        <array>
                                <string>10.0.2.1</string>
                        </array>
                        <key>dhcp_router</key>
                        <string>10.0.2.1</string>
                        <key>interface</key>
                        <string>en1</string>
                        <key>lease_max</key>
                        <integer>86400</integer>
                        <key>lease_min</key>
                        <integer>86400</integer>
                        <key>name</key>
                        <string>10.0.2/24</string>
                        <key>net_address</key>
                        <string>10.0.2.0</string>
                        <key>net_mask</key>
                        <string>255.255.255.0</string>
                        <key>net_range</key>
                        <array>
                                <string>10.0.2.2</string>
                                <string>10.0.2.31</string>
                        </array>
                </dict>
        </array>
        <key>bootp_enabled</key>
        <false/>
        <key>detect_other_dhcp_server</key>
        <array>
                <string>en1</string>
        </array>
        <key>dhcp_enabled</key>
        <array>
                <string>en1</string>
        </array>
        <key>dhcp_ignore_client_identifier</key>
        <true/>
        <key>use_server_config_for_dhcp_options</key>
        <false/>
</dict>
</plist>

Autre exemple de fichier

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
<dict>
    <key>allow</key>
    <array>
            <string>00:00:00:00:00:00</string>
            <string>...
    </array>
    <key>deny</key>
    <array>
            <string>...
    </array>
    <key>Subnets</key>
    <array>
            <dict>
                    <key>_creator</key>
                    <string>dan</string>
                    <key>allocate</key>
                    <true/>
                    <key>dhcp_router</key>
                    <string>10.0.2.1</string>
                    <key>lease_max</key>
                    <integer>86400</integer>
                    <key>lease_min</key>
                    <integer>86400</integer>
                    <key>name</key>
                    <string>10.0.2/24</string>
                    <key>net_address</key>
                    <string>10.0.2.0</string>
                    <key>net_mask</key>
                    <string>255.255.255.0</string>
                    <key>net_range</key>
                    <array>
                            <string>10.0.2.2</string>
                           <string>10.0.2.31</string>
                    </array>
            </dict>
    </array>
    <key>detect_other_dhcp_server</key>
    <true/>
    <key>dhcp_enabled</key>
    <array>
            <string>en1</string>
    </array>
    <key>use_server_config_for_dhcp_options</key>
    <false/>
</dict>
</plist>

Démarrage du serveur DHCP
sudo /bin/launchctl load -w /System/Library/LaunchDaemons/bootps.plist

Arrêt du serveur DHCP
sudo /bin/launchctl unload -w /System/Library/LaunchDaemons/bootps.plist

Pour que le service démarre automatiquement

ouvrir le fichier /System/Library/LaunchDaemons/bootps.plist puis changer (ligne 6)
<key>Enabled</key> --> <key>Enabled</key>
<true/> --> <false/>


RÉSERVATION D'ADRESSES IP

Créer un fichier bootptab dans le dossier etc

Contenu du fichier

%%
# hostname hwtype hwaddr ipaddr bootfile
client1 1 00:0c:29:1f:ed:54 10.0.0.128 
client2 6 00:0c:29:1e:fd:57 10.0.0.129 

Number Hardware Type (hwtype) References
1 Ethernet (10Mb) [JBP]
2 Experimental Ethernet (3Mb) [JBP]
3 Amateur Radio AX.25 [PXK]
4 Proteon ProNET Token Ring [JBP]
5 Chaos [GXP]
6 IEEE 802 Networks [JBP]
7 ARCNET [JBP]
8 Hyperchannel [JBP]
9 Lanstar [TU]

PRINCIPALES INSTRUCTIONS

bootpd n'écrit que dans /var/db/dhcp_leases

man bootpd
man bootptab
sudo nano /etc/bootptab
sudo nano /etc/bootpd.plist

sudo /bin/launchctl load -w /System/Library/LaunchDaemons/bootps.plist
sudo /bin/launchctl unload -w /System/Library/LaunchDaemons/bootps.plist