jan 23

Apple Software Update — Un serveur interne et transparent

Tag: GénéralYoann @ 20:47

Mac OS X Server propose une fonctionnalité très intéressante, le serveur de mise à jour, il permet d’utiliser notre serveur comme miroir du serveur de mise à jour d’Apple. Son seul défaut est de nécessité des manipulations pour l’imposer au client, sauf si vous connaissez bien les DNS. C’est tout l’objet de cet article.

Voici le principe, Mac OS X, qu’il soit client ou serveur, utilise plusieurs serveurs pour gérer les mises à jour, celui qui nous intéressera ici est swscan.apple.com qui renvoie aux clients une liste de mise à jour sous forme de fichier xml. Dans cette liste se situe donc les mises à jour avec entre autre leur localisation, par exemple pour Apple les mises à jour son sur swcdn.apple.com.

L’idée ici va être de faire en sorte que notre serveur se fasse passer pour swscan.apple.com et redirige ainsi non pas sur swcdn.apple.com, mais sur notre propre serveur interne, mais cela uniquement pour nos clients, il ne faudrait pas que notre serveur de mise à jour tourne sur lui-même.

Différentes méthodes sont disponibles sur internet, la plus répandue propose de mettre en place deux serveurs dont un qui n’est pas relié à votre DNS interne. Cette solution ne me plais pas vraiment, elle limite les possibilités de ce serveur. Voici donc une solution que je viens de mettre en production chez moi, elle vous est donc proposée à titre d’exemple, je vous laisse le soin de la tester pleinement.

Je considère pour cet article que votre serveur de mise à jour est déjà opérationnel, je m’attarderais donc uniquement sur le hack du serveur DNS.

Ouvrez donc Server Admin et créé une nouvelle zone DNS pour swscan.apple.com. où vous rajouterez une entrée A pour le FQDN swscan.apple.com. pointant vers l’adresse IP de votre serveur de mise à jour.

De cette manière vos clients se verrons envoyé sur votre serveur en lieu et place du serveur d’Apple. Cependant, votre serveur de mise à jour écoute par défaut sur le port 8088 alors que les clients chercherons le port 80. Nous allons donc rajouter un site à notre serveur web qui écoute déjà sur le port 80.

Là aussi, plusieurs méthodes existent, la plus couramment proposé rajoute un site et configure des redirections pour chaque fichier servant d’index de mise à jour. Pour ma part je vais utiliser une méthode beaucoup plus rapide puisque mon serveur web et mon serveur de mise à jour se trouve sur le même disque. Je vais définir le même dossier racine pour mon faux swscan.apple.com que celui utilisé par le serveur de mise à jour.

Par défaut les mises à jour sont stockées dans /usr/share/swupd sauf si vous les avez déplacés sur un disque externe, dans ce cas je vous laisse retrouvé où vous les avez mises à l’aide de la configuration du service de mise à jour. Dans le dossier du service de mise à jour il y a un dossier html, c’est celui-ci qu’il faudra définir comme racine de notre nouveau site.

Rajoutons donc un site dans notre serveur web :

J’ai également modifié le fichier index par défaut bien que ce ne soit pas nécessaire pour les machines. J’ai placé ici index.sucatalog pour voir plus facilement si ma configuration marche.

Ainsi avec cette configuration, si vous vous rendez sur http://swscan.apple.com/ (avec éventuellement index.sucatalog à la fin) vous devez vous retrouver avec une page comme celle-ci :

Vous remarquerez en lisant le contenue que les mises à jour sont bien indiquées comme étant sur http://office.inig-services.com:8088/ qui est bien mon serveur de mise à jour.

Faites donc un test depuis vos clients, sous conditions qu’ils soient correctement configuré au niveau des serveurs DNS vous utilisez maintenant votre serveur interne !

Il reste une chose à faire maintenant, configurer votre serveur interne pour qu’il s’adresse bien au serveur externe d’Apple. Pour cela nous allons exploiter une fonctionnalité très intéressante de Mac OS X qui est le dossier /etc/resolver.

Ce dossier permet de spécifier un serveur DNS spécial pour un domaine précis (cf. Mac OS X Hints pour plus d’informations).

Par défaut ce dossier n’existe pas, nous allons donc le créer en tant que root et laisser les droits par défaut (rwxr-xr-x root:wheel) puis rajouter un fichier swscan.apple.com à l’intérieur qui contiendra ceci :

domaine swscan.apple.com
search_order 2
nameserver 8.8.8.8
nameserver 8.8.4.4
port 53

Cela indiquera à notre serveur que pour retrouver swscan.apple.com il doit consulter les DNS de Google.

Profitez de votre terminal en root pour faire un dscacheutil -flushcache et essayez donc d’ouvrir http://swscan.apple.com/content/catalogs/index-1.sucatalog depuis votre serveur !

Vous constatez bien que les URL de téléchargement ici renvois vers swcdn.apple.com, c’est donc que notre hack a fonctionné !

Vous pouvez aussi le voir en ouvrant l’application Software Update sur un client et sur le serveur et constater ainsi la différence de vitesse.

Une note cependant à propos du dossier resolver. C’est une fonctionnalité qui n’est pas forcément utilisée par les commandes unix, ainsi host ou dig vous renverrons la valeur de votre DNS local alors que le ping lui essayera bien de contacter le bon serveur.

Si vous avez des remarques concernant cette manipulation n’hésitez pas à laisser des commentaires.

Je rappelle également que ceci n’est pas un fonctionnement standard, vous êtes seul responsable de ce que vous faites, évitez par exemple de faire cette manipulation avec un serveur DNS qui peut être contacté depuis l’Internet…

2 Responses to “Apple Software Update — Un serveur interne et transparent”

  1. gooz67 says:

    Bonjour
    Vraiment Bravo pour l’article…..d’ailleur ce site est une mine d’or

    encore bravo et longue vie au site

  2. Yoann says:

    Merci bien :-)

Leave a Reply

You must be logged in to post a comment.