Informatique

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 :

127.0.0.1	localhost
127.0.1.1	linux

192.168.5.3	serveur1.chezmoi.local
192.168.5.3	serveur2.chezmoi.local
192.168.5.3	serveur3.chezmoi.local

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

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èmes 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 :

#!/bin/bash -e
IF=$1
STATUS=$2

if [[ $IF = "wlp1s0" ]] && [[ $STATUS = "up" ]]
then
	wifi=`iwlist wlp1s0 scan | grep SSID`
	if [[ $wifi == *"MonWifi"* ]]
	then

	cp /etc/hosts.home /etc/hosts
	fi
else
	#Use the normal host file
	cp /etc/hosts.default /etc/hosts
fi

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 scripts tout simples…

Bibliographie

Laisser un commentaire

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