web-dev-qa-db-fra.com

Serveur DHCP avec plusieurs interfaces sur Ubuntu, détruit la passerelle par défaut

J'utilise Ubuntu et j'ai de nombreuses interfaces. eth0, qui est ma connexion Internet, et il reçoit ses informations d'un serveur DHCP totalement hors de mon contrôle.

J'ai alors eth1, eth2, eth3 et eth4 pour lesquels j'ai créé un serveur DHCP. (Serveur DHCP ISC)

Cela semble fonctionner et je reçois même une adresse IP du serveur DHCP étranger sur l'interface Internet.

Cependant, pour une raison quelconque, il semble que ma passerelle pour eth0 soit devenue vissée après avoir installé mon serveur DHCP local pour eth1-eth4. (Je pense que oui, parce que j'ai une adresse IP pour eth0, et que je peux cingler d'autres trucs sur le réseau local, mais je ne peux pas avoir accès à Internet).

Mon eth0- informations spécifiques dans /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
  address 10.0.1.1
  netmask 255.255.255.0
  network 10.0.1.0
  broadcast 10.0.1.255
  gateway 10.0.1.1
  mtu 8192


auto eth2
iface eth2 inet static
  address 10.0.2.1
  netmask 255.255.255.0
  network 10.0.2.0
  broadcast 10.0.2.255
  gateway 10.0.2.1
  mtu 8192

Mon /etc/default/isc-dhcp-server:

INTERFACES="eth1 eth2 eth3 eth4"

Alors pourquoi mon serveur DHCP local gâche-t-il la passerelle pour eth0, quand je lui dis de ne pas écouter eth0? Quelqu'un voit le problème ou ce que je peux faire pour le résoudre?

Le problème semble en effet être les passerelles. netstat -nr donne:

0.0.0.0 --- 10.X.X.X ---- 0.0.0.0 --- UG 0 0 0 eth3

Ça aurait dû être

0.0.0.0 129.2XX.X.X 0.0.0.0 UG 0 0 0 eth0

Donc, pour une raison quelconque, mon serveur DHCP local remplace la passerelle que je reçois du réseau DHCP.

Edit: dhcp.conf ressemble à ceci (j'ai inclus des informations uniquement pour le sous-réseau eth1):

ddns-update-style none;

not authoritative;

subnet 10.0.1.0 netmask 255.255.255.0 { interface eth1; 
option domain-name "example.org"; 
option domain-name-servers ns1.example.org, 
ns2.example.org; 
default-lease-time 600; 
max-lease-time 7200;
range 10.0.1.10 10.0.1.100;
Host camera1_1 { hardware ethernet 00:30:53:11:24:6E; fixed-address 10.0.1.10; }
Host camera2_1 { hardware ethernet 00:30:53:10:16:70; fixed-address 10.0.1.11; } 
}

De plus, il semble que la passerelle soit correctement définie si j'exécute /etc/init.d/networking restart dans un terminal, mais cela ne m'aide pas. J'ai besoin que la bonne passerelle soit définie au démarrage et je préfère trouver la source du fichier. problème

3
Henrik Alstad

Je ne suis quasiment pas un expert sur ce sujet, mais je soupçonne qu'en raison de la nature de diffusion des paquets DHCP, votre serveur DHCP local va toujours répondre aux demandes locales, quelles que soient les interfaces d'écoute que vous avez configurées.

Donc, je vous suggérerais d'essayer simplement de définir des instructions "rejeter" dans votre dhclient.conf pour rejeter les offres du serveur local:

reject 10.0.1.1;
reject 10.0.2.1;

(Je suppose seulement que vous pouvez utiliser plusieurs déclarations de rejet, la page de manuel n’est pas claire.)

Je peux penser à quelques autres choses à essayer aussi, mais je me trompe peut-être quand même dans mon hypothèse initiale. Je trouve toujours cela un outil utile pour diagnostiquer ce qui se passe:

apt-get install dhcpdump
dhcpdump -i eth1

PS: si vous souhaitez conserver eth0, eth1, eth2, etc. correctement séparés, envisagez l’utilisation de VLAN pour isoler le trafic en couche 2.

1
Will Daniels

Vous ne devriez avoir qu'une seule passerelle par défaut sur votre ordinateur. Et cela devrait aller à un routeur qui va vers la frontière ou hors de votre réseau. Vous pouvez toujours utiliser ip route list pour voir vos routeurs.

Il y a donc deux erreurs dans chacune de vos strates eth1 et eht2 dans /e/n/interfaces.

  1. Vous ne devriez pas avoir une directive gateway pointant sur elle-même. Si votre ordinateur ne sait pas où envoyer un paquet avec une adresse inconnue IP-, pourquoi devriez-vous lui dire de transmettre ce paquet à lui-même? Donc, vous ne devriez jamais pointer une gateway sur elle-même.
  2. Vous ne devriez avoir qu’une (ou aucune) passerelle par défaut sur votre ordinateur. Et cela devrait pointer à l'extérieur. L’interface vers l’extérieur est sur eth0, et cela prend le gatway de dhcp. Donc, pas besoin de définir gateway ici.

Donc, supprimez tous les gateway dirctives de /e/n/interfaces et cela fonctionnera (mieux).

Et soit dit en passant, network et broadcast sont calculés à partir de address et netmask, vous n'avez donc pas besoin de les spécifier. Cela peut en fait créer des erreurs étranges si vous vous trompez, il est donc préférable de ne pas les spécifier. Voir https://askubuntu.com/a/432876/999

Si vous avez votre propre serveur DHCP sur vos clients de votre réseau local, vous devez leur dire d’utiliser votre ordinateur dans la configuration du serveur DHCP. Ainsi, sur eth1, vous devez indiquer aux clients d'utiliser 10.0.1.1 comme routeur. Vous ne pouvez pas faire cela dans /e/n/interfaces.

1
Anders