Résolution de nom d'hôte en fonction du réseau

Les boxs internet gèrent souvent mal l'accès aux serveurs configurés par un service de DNS dynamique qui sont sur leurs réseaux. Sur Linux il est simple de résoudre le problème en ajoutant des entrées dans /etc/hosts. Pour un portable cette solution n'est pas satisfaisante car dès que l'on quitte le réseau de la box, la résolution devient bloquante. Une solution consiste à modifier le fichier /etc/hosts en fonction du réseau sur lequel la machine est connectée.

La grande majorité des opérations se fait en super-utilisateur ; deux conséquences : il est facile de faire des erreurs et si on ne comprend pas ce que l'on fait on ne le fait pas ! Ceci était dit passons au travail...

Fichiers de configuration

Avant de faire une bêtise le fichier /etc/hosts est sauvegardé avec la commande cp /etc/hosts /etc/hosts.backup. En cas de problème on pourra revenir à la version initiale du fichier avec mv /etc/hosts.backup /etc/hosts

Configuration par défaut du réseau

Le fichier par défaut sera celui utilisé lorsque la machine n'est pas sur le réseau de la maison. Une copie du fichier hosts initial est faite pour cela cp /etc/hosts /etc.hosts.default

Configuration du réseau pour la maison

Le fichier de configuration pour la maison est construit à partir du fichier par défaut, on fait donc une copie avec cp /etc/hosts /etc/hosts.home. Il est ensuite édité (par exemple avec vim /etc/hosts.home) pour ajouter les résolutions locales :

Les trois sites webs pointent vers le même serveur, c'est Nginx qui gère la résolution des différents sites.

Gestion des événements de NetworkManager

La gestion des cartes réseaux est assurée par NetworkManager sous la très grande majorité des système Linux (en tout cas ça marche sur mon Linux Mint !). Une des qualités de NetworkManager est de proposer de gérer les événements associés aux changements d'états des cartes réseaux de manière très simple.

Les scripts traitant les événements doivent être placés dans le répertoire /etc/NetworkManager/dispatcher.d. Le script peut être sauvegardé avec n'importe quel nom (pour respecter la notation générale je l'ai sauvegardé sous le nom 02home) mais il doit avoir les droits d’exécution pour tous les utilisateurs et doit être la propriété de root (mais comme il faut être super utilisateur pour pouvoir écrire dans ce répertoire ça se fait tout seul...).

Les scripts de changement d'états de NetworkManager doivent traiter deux paramètres lors de l'appel qui sont le nom de la carte réseau concernée et le statut (arrêt, démarrage,...). La carte wifi de mon ordinateur est repérée par wlp1s0 et l’événement qui nous intéresse est la mise en marche de la carte (événement up).

Le script est ensuite assez simple à écrire :

Le nom du réseau WiFi est obtenu avec la commande iwlist et un grep. On vérifie ensuite que le nom du réseau local (MonWifi) est présent dans la chaîne. Dans ce cas on copie le fichier de configuration pour la maison dans le fichier /etc/hosts.

Si un autre événement (arrêt,...) se produit sur la carte le fichier de configuration par défaut est recopié sur /etc/hosts pour tout remettre à la configuration par défaut.

Bilan

Pour l'instant aucun problème ! Je suis toujours surpris par le côté "bien pensé" de Linux et la puissance de petits script tout simple...

Bibliographie

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *