j’ai installé dhcp3-server sur un ubuntu 10.04 server, il fonctionne correctement mais l’interface réseau sur laquelle il écoute reçoit régulièrement une adresse du DHCP alors qu’elle est déclarée en
Salut,
Tu peux donner tout le contenu de /etc/network/interfaces ?
Une chose que je ne comprend pas. C’est un serveur dhcp qui va prendre (de temps en temps) son ip sur un autre dhcp ?
Salut,
c’est pas ça…
l’ordinateur sur lequel est installé le DHCP est configuré avec des IP fixes.
Mais il lui arrive de se retrouver avec une IP fournie par lui-même sur l’interface d’écoute.
Par exemple, il écoute sur eth1, fixée en 10.1.1.254/24 mais régulièrement cette interface se retrouve avec 10.1.1.11/24.
Je fais un /etc/init.d/networking restart et hop je retrouve mon IP fixe configurée dans /etc/network/interfaces c’est à dire 10.1.1.254/24.
@ lol :
Il se peut que la machine récupère une adresse de son propre serveur DHCP.
A noter que network manager n’est pas réservé aux systèmes avec environnement graphique. Il fonctionne aussi en ligne de commande. Cependant par défaut (sauf si ça a changé dans Ubuntu) il ne s’occupe pas des interfaces configurées dans /etc/network/interfaces.
@ theted
Y a-t-il un client DHCP qui tourne parmi les processus ?
[quote=“PascalHambourg”]@ lol :
Il se peut que la machine récupère une adresse de son propre serveur DHCP.
A noter que network manager n’est pas réservé aux systèmes avec environnement graphique. Il fonctionne aussi en ligne de commande. Cependant par défaut (sauf si ça a changé dans Ubuntu) il ne s’occupe pas des interfaces configurées dans /etc/network/interfaces.[/quote]
Merci pour les infos.
Je n’imaginait effectivement pas qu’un dhcp puisse prendre une ip sur la propre interface de la machine ou il se trouve…
en effet le processus dhclient fonctionne. Mais je ne sais pas comment faire en sorte qu’il ne démarre pas.
Que doit-on modifier pour qu’il ne démarre pas ?
Déjà, est-ce qu’il est relancé après un redémarrage ?
Il y a un cas où le redémarrage suffit : l’interface était en DHCP, puis reconfigurée en statique dans /etc/network/interface sans avoir été arrêtée auparavant. Résultat, ifupdown ne sait plus que l’interface était en DHCP et n’arrête pas le client DHCP qui continue à tourner jusqu’à l’arrêt ou au redémarrage du système.
Sinon, il faut identifier ce qui lance dhclient : network-manager ou équivalent notamment. Je ne connais pas les particularités d’Ubuntu. Peut-être en étudiant la “filiation” du processus dhclient, avec son PID parent ou avec pstree. Ou bien en examinant les logs système.
Comme le dit pascalhambourg, vérifie tes logs systèmes (var/log/syslog) pour voir en détail ce qui lance le dhclient sur le serveur chargé de servir d’autres que lui puisque lui a des ip statiques bien déclarées dans /etc/network/interfaces qui est examiné à chaque démarrage.
Juste une question “con”… ça ne viendrait pas du fait qu’il ait le “auto ethX” avant la “déclaration” du ethX (dans le /etc/network/interfaces)? (c’est une vraie question… je ne sais pas si ça a son importance… pour qu’une carte soit gérée par NetworkManager on ne met “que” auto ethX… d"où ma question…)
Non. “auto <interface” signifie juste que l’interface doit être activée au démarrage, selon la méthode et le protocole définis dans chaque ligne “iface <méthode>”. Un client DHCP n’est lancé que si la méthode est “dhcp”.
Merci pour ta réponse. Je savais que le “auto” voulait “juste dire” que le système doit activer la carte au démarrage… mais vu que je ne sais pas comment le système le fait (le fait-il dès qu’il “voit” le auto ou quand il a “lu” la config de la-dite carte… et vu que quand il y a network-manager on a plus besoin du inet dhcp… j’ai posé ma question con… )
Le plus simple, pour trouver qui a requis dhclient, est de tromper le processus à l’origine du dhclient en l’envoyant, par symlink, vers un script qui capturera récursivement les lsof en partant son PID. On enregistrera de cette manière toute la parenté ascendante du PID qui a requis dhclient et les fichiers qu’il a ouverts.
# Enregistrement du lsof du PID courant et capture du PID parent (option -R puis awk)
PID=$(lsof -R -p $PID | tee -a $TRACE_FILE | awk 'NR==2{print $3}')
# remontée récursive jusqu'au PID 1
[ $PID -ge 1 ] && getParentPid
}
lancement de la récursion en partant du PID de ce script
PID=$$
getParentPid
exécution du vrai dhclient
/sbin/dhclient.original
exit 0[/code]
[ul]
[li]Rendre le script exécutable par tous (par exemple 751)
[/li]
[li] sous root faire une copie de dhclient vers, par exemple dhclient.original
[/li]
[li] sous root faire un symlink temporaire vers le script:
A chaque invocation du client dhcp, tous les lsof seront enregistrés dans /tmp/trace_dhcp puis la vraie commande dhcp.original sera exécutée.
Ne pas oublier de remettre les choses en état une fois qu’on a suffisamment d’informations dans le fichier capturé!
[code]# rm /sbin/dhclient
mv /sbin/dhclient.original /sbin/dhclient
[/code]
Un peu tordu mais ça marche.
edit:
Version courte du script qui se contente d’envoyer l’ascendance du PID dans syslog. Devrait suffire pour détecter quel processus déclenche une demande dhcp: