DHCP envahissant !

Salut,

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

auto eth0
iface eth0 inet static
address 10.1.1.254
netmask 255.255.255.0
etc…

dans le fichier /etc/network/interfaces

Sauriez-vous me dire pourquoi ?
D’avance merci.
Ted

Salut,
Il n’y aurait pas un gestionnaire réseau graphique par hasard ?

Non, rien de graphique ! Pas de network manager.

Only Lynx is good enough :wink: !

Ted

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,

j’ai un truc du style :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.253
netmask 255.255.255.0
gateway 192.168.1.254
network 192.168.1.0
broadcast 192.168.1.255

auto eth1
iface eth1 inet static
address 10.1.1.254
netmask 255.255.255.0
network 10.1.1.0
broadcast 10.1.1.254

eth0 est connecté à un routeur NAT d’où la passerelle.
La route par défaut est 192.168.1.254

Ted

:question:

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.

Ted

@ 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”]
@ theted
Y a-t-il un client DHCP qui tourne parmi les processus ?[/quote]

J’ai la machine au boulot, je vérifie ça demain. Si le processus est actif, je suppose que je dois le désactiver ?

Merci de l’info.

Ted

Oui, mais il faudrait aussi voir pourquoi il est actif. Sinon ça risque de revenir au prochain démarrage.

[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 ?

A+

Ted

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)? :unamused: (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…)

:006

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… :wink: )

:006

La position des lignes “auto”, “allow-auto”, “allow-hotplug”… par rapport aux définitions des interfaces n’a pas d’importance.

Ok. Merci beaucoup… :wink:

:006

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.

Ceci devrait convenir:

[code]#!/bin/sh

TRACE_FILE=’/tmp/trace_dhcp’

date >> $TRACE_FILE

getParentPid() {
printf “\nPID -----> %s\n” $PID >> $TRACE_FILE

# 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. :030

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:

[code]#!/bin/sh

insertion de l’ascendance dans syslog

logger $(pstree -As $$)

exécution du vrai dhclient

/sbin/dhclient.original

exit 0
[/code]