La Fibre

Télécom => Réseau => reseau TCP/IP / Fonctionnement des réseaux => Discussion démarrée par: Leon le 13 mai 2013 à 19:18:04

Titre: Plusieurs IP sur 1 seul interface
Posté par: Leon le 13 mai 2013 à 19:18:04
Bonjour à tous.

Je continue avec mes questions bizarres. Est-il possible de définir plusieurs adresses IP pour une seule et unique interface Ethernet d'un PC? Je suppose que oui, ou plutôt je sais que oui, car je le fais déjà avec des machines virtuelles dans VMWare.
Mais sans machine virtuelle? Je suppose que c'est possible aussi. D'ailleurs, je sais que certains serveurs possèdent plusieurs IP, sans faire de la virtualisation pour autant. Mais je n'ai aucune idée de comment ça marche.

En parallèle, je sais qu'on peut faire cohabiter plusieurs "sous-réseaux" (au sens IP) au sein d'un même réseau Ethernet. Ca fonctionne très bien, il n'y a rien à configurer de particulier. Tout ceci sans VLAN, je précise!

Donc en voyant ces 2 aspects, j'envisage la chose suivante: à partir d'un seul PC, équipé d'une seule interface Ethernet, serait-il possible d'accéder à chacun de ces 2 sous réseaux (qui cohabitent sur le même réseau ethernet), donc avec 2 IP différentes? Juste avec des bidouilles logicielles? Sans VLAN? Le tout avec un PC Vista ou XP?
Si oui, comment différencier quel logiciel utilise quelle IP (et donc sous-réseau)?

N'hésitez pas à me dire si je ne suis pas clair. Et merci d'avance aux experts en réseau.

Leon.
Titre: Plusieurs IP sur 1 seul interface
Posté par: kgersen le 13 mai 2013 à 19:33:40
oui on peut, ça s’appelle du multi-homing (attention toutefois, ce terme a plusieurs sens suivant le contexte).

Sous Windows, on peut le faire avec l'interface graphique (bouton config avancée) ou en ligne de commande avec netsh.

Sauf cas speciaux, on ne différencie pas explicitement comment les logiciels utilisent tel ou tel IP. C'est le systeme (le routage en fait) qui s'en charge en fonction de la destination a atteindre.

Pour les logiciels type 'serveurs' (qui 'écoutent' sur port en attente de quelque chose) soit ils ont prévu le cas et permettent de choisir sur quel(s) ip(s) ils ecoutent (generalement ca s'appele la/les bind address(es) dans leur config), soit il n'ont pas prévu et dans ce cas ils n’écoutent que sur une seule IP , la première définie (dite IP principale).
Titre: Plusieurs IP sur 1 seul interface
Posté par: BadMax le 13 mai 2013 à 19:56:58
Exemple sous Linux :

ifconfig eth0 1.1.1.1 netmask 255.0.0.0
ifconfig eth0:1 2.2.2.2 netmask 255.0.0.0
ifconfig eth0:2 3.3.3.3 netmask 255.0.0.0

etc etc etc

On peut très bien définir des adresses IP d'un meme réseau IP : ça s'appelle de l'aliasing. Ca peut etre pratique dans le cas de la migration d'un ancien serveur.
Titre: Plusieurs IP sur 1 seul interface
Posté par: Leon le 13 mai 2013 à 20:01:40
Merci pour la rapidité de la réponse!
Pour les logiciels type 'serveurs' (qui 'écoutent' sur port en attente de quelque chose) soit ils ont prévu le cas et permettent de choisir sur quel(s) ip(s) ils ecoutent (generalement ca s'appele la/les bind address(es) dans leur config), soit il n'ont pas prévu et dans ce cas ils n’écoutent que sur une seule IP , la première définie (dite IP principale).
Et côté "client"? Peut-on choisir laquelle des 2 IP va être choisie par un logiciel client sur le PC qui possède 2 IP? Le logiciel qui va initier une connexion TCP? Si non, comment va se faire le choix?

Est-ce que par exemple une adresse IP de destination qui est déjà dans un des 2 sous-réseaux (donc joignable directement sans passeer par une passerelle/routeur) sera systématiquement atteinte depuis l'IP du PC qui est sur le même sous-réseau?

Merci d'avance.

Leon.
Titre: Plusieurs IP sur 1 seul interface
Posté par: BadMax le 13 mai 2013 à 20:04:59
En priorité ce sont les règles de routage qui s'appliquent : si une IP est accessible en direct, on l'utilise. Si on essaye de forcer le trafic du client à passer par une autre interface, il est probable (voir meme certain) que le serveur réponde par l'interface étant directement connecté au client.

Dans les cas posant problèmes en multi-homing, les controleurs de domaine Windows en font partie (à l'époque NT4 c'était meme interdit).
Titre: Plusieurs IP sur 1 seul interface
Posté par: kgersen le 13 mai 2013 à 20:24:04
Et côté "client"? Peut-on choisir laquelle des 2 IP va être choisie par un logiciel client sur le PC qui possède 2 IP? Le logiciel qui va initier une connexion TCP? Si non, comment va se faire le choix?

Est-ce que par exemple une adresse IP de destination qui est déjà dans un des 2 sous-réseaux (donc joignable directement sans passeer par une passerelle/routeur) sera systématiquement atteinte depuis l'IP du PC qui est sur le même sous-réseau?

coté 'client', c'est exactement comme avec 2 cartes réseaux, y'a pas de différence.
on ne choisi pas l'IP, c'est le systeme qui fait le choix en fonction de l'IP distante
c'est le principe du routage comme a expliqué BadMax.
Titre: Plusieurs IP sur 1 seul interface
Posté par: Leon le 13 mai 2013 à 21:01:53
Effectivement, je viens de tester à l'instant.
 
L'adresse IP source utilisée depuis le PC qui possède 2 adresses IP, c'est l'adresse IP la plus "proche" de la destination, selon la table de routage du PC; et c'est vrai que l'adresse de destination soit sur le même sous-réseau ou derrière un routeur/passerelle. Donc ça me semble assez optimal comme méthode de fonctionnement. Ca m'arrange bien en fait.

Leon.
Titre: Plusieurs IP sur 1 seul interface
Posté par: Electrocut le 13 mai 2013 à 21:32:06
Je rajouterais qu'avec la commande netstat (sous Linux comme sous Windows), on peut regarder sur quelle(s) interface(s) écoute telle application serveur.

Exemple sous Windows :

C:\>netstat -an

Connexions actives

  Proto  Adresse locale         Adresse distante       État
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
...
  TCP    127.0.0.1:2559         0.0.0.0:0              LISTENING
  TCP    127.0.0.1:4370         0.0.0.0:0              LISTENING
  TCP    127.0.0.1:4380         0.0.0.0:0              LISTENING
...
  TCP    192.168.1.2:139        0.0.0.0:0              LISTENING

Si adresse locale = 0.0.0.0, écoute sur toutes les interfaces à la fois.
Si adresse locale = 127.0.0.1, n'écoute que sur l'interface locale
Si adresse locale = 192.168.1.2, n'écoute que sur l'interface 192.168.1.2 (associée ici à la carte Ethernet, j'ai qu'une adresse IP)

L'application serveur choisit l'interface lors de l'appel à la fonction système bind().
Titre: Plusieurs IP sur 1 seul interface
Posté par: corrector le 14 mai 2013 à 02:20:41
Bonjour à tous.

Je continue avec mes questions bizarres.
Ces questions me semblent normales!

Est-il possible de définir plusieurs adresses IP pour une seule et unique interface Ethernet d'un PC?
Sans problème. Pouvoir faire cela n'est pas exigé par les RFC pour les OS supportant IPv4, mais tous les OS supportant IPv4 le permettent. En IPv6 le support par l'OS est obligatoire.

Je suppose que oui, ou plutôt je sais que oui, car je le fais déjà avec des machines virtuelles dans VMWare.
Les machines virtuelles ont leurs propres interfaces Ethernet, distinctes de l'interface de l'hôte : le trafic interne d'une interface Ethernet d'une machine virtuelle ne remonte pas forcèment au niveau d'une interface Ethernet de l'hôte.

Mais sans machine virtuelle? Je suppose que c'est possible aussi. D'ailleurs, je sais que certains serveurs possèdent plusieurs IP, sans faire de la virtualisation pour autant. Mais je n'ai aucune idée de comment ça marche.
Avoir plusieurs adresses IP c'est comme avoir une seule adresse IP, mais plusieurs fois.

En parallèle, je sais qu'on peut faire cohabiter plusieurs "sous-réseaux" (au sens IP) au sein d'un même réseau Ethernet. Ca fonctionne très bien, il n'y a rien à configurer de particulier.
Il n'y pas de raison que ça ne fonctionne pas.

Je crois qu'on appelle ça le "partage de média".

Tout ceci sans VLAN, je précise!
Les VLAN c'est de la triche!

Donc en voyant ces 2 aspects, j'envisage la chose suivante: à partir d'un seul PC, équipé d'une seule interface Ethernet, serait-il possible d'accéder à chacun de ces 2 sous réseaux (qui cohabitent sur le même réseau ethernet), donc avec 2 IP différentes?
Oui.

Remarque : J'ai indiqué l'autre fois qu'un routeur IP est toujours un machin qui a plusieurs IP, sur plusieurs sous-réseaux. Mais la réciproque est fausse. Ton PC a plusieurs IP, sur plusieurs sous-réseaux, sans être un routeur.

Juste avec des bidouilles logicielles? Sans VLAN?
Bien sûr sans VLAN, créer un VLAN c'est créer un lien Ethernet virtuel distinct, ce serait de la triche!

Si oui, comment différencier quel logiciel utilise quelle IP (et donc sous-réseau)?
Convention IP

En IP, 0 est un joker : adresse non spécifiée, adresse non liée.

En IPv4 le joker d'adresse IP est donc 0.0.0.0.
En IPv6 le joker d'adresse IP se note [::] se qui correspond à l'adresse nulle (que des 0).

Pour visualiser l'adresse IP d'écoute

Sous Windows Vista, tu peux voir toutes les socket TCP avec netstat -ta; les socket d'écoute apparaissent en état "LISTENING".

Tu vois l'adresse locale et l'adresse distante de chaque socket. L'adresse distante d'une socket d'écoute est toujours non-spécifiée par définition.

Une socket connectée a toujours ses deux adresses spécifiées.

Pour configurer l'adresse IP d'écoute

Comme administrateur

Tu dois configurer chaque logiciel serveur séparèment : consulter la doc du logiciel en question; quelques exemples :

Pour Apache 2.2 : directive Listen (http://httpd.apache.org/docs/2.2/fr/mod/mpm_common.html#listen) :

Listen [IP-address:]portnumber

Pour sshd : directive ListenAddress dans /etc/ssh/sshd_config

Pour vsftpd : directive listen_address dans vsftpd.conf

Pour les services démarrés par un "super serveur" (comme le classique /usr/sbin/in.telnetd) : dans la config du service dans le "super serveur" :

xinetd : directive bind

Comme programmeur C

La séquence minimal pour ouvrir un TCP passivement est :

/* créer une socket :
   type d'adresses pour cette socket :

   PF_INET : de domaine d'adressage "IP" (IPv4)
   ou bien
   PF_INET6 : de domaine d'adressage IPv6
   (pour passer en IPv6, il faut rajouter "6" dès qu'il est question d'adresse IP)

   type de socket :

   SOCK_STREAM :
   définit la sémantique de la socket :
   - socket de type connecté nécessitant une ouverture passive (listen) et active (connect) de l'autre coté
   - socket fournissant à l'application un flux d'octets, sans délimitation des messages (piège pour des débutants!)
   
   protocole :

   IPPROTO_TCP : je choisis explicitement le protocole TCP
   (mais en pratique on peut aussi laisser 0 qui demande le choix par défaut, qui est toujours TCP)
*/
s = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);

// si s < 0 l'appel a échoué (examiner errno)
if (s < 0) // en cas d'erreur
  { perror ("socket"); exit (1); } // afficher un message puis quitter

/* une adresse d'extrémité de TCP est constituée d'un port et d'une adresse IP
   sockaddr_in : adresse IPv4 + port */
sockaddr_in addr;
// initialisation :
addr.sin_family = AF_INET; // adresse IP (IPv4)
addr.sin_port = 80; // choix de port TCP
addr.sin_addr = INADDR_ANY; // INADDR_ANY = adresse 0

// lier la socket à une adresse d'extrémité de TCP
err = bind (s, &addr, sizeof addr);

// si err = -1 l'appel a échoué (examiner errno)
if (err != 0) // en cas d'erreur
  { perror ("bind"); exit (1); } // afficher un message puis quitter

/* ouverture passive du TCP
   backlog  : 5
   "Le paramètre backlog définit une longueur maximale pour la file des connexions en attente."
*/
err = listen (s, 5);
// si err = -1 l'appel a échoué (examiner errno)
if (err != 0) // en cas d'erreur
  { perror ("listen"); exit (1); } // afficher un message puis quitter


Voilà la façon habituelle de démarrer un serveur TCP :
- l'adresse locale de la socket d'écoute est 0:80, ce qui signifie *:80
- l'adresse distante d'une socket d'écoute est toujours *:*

Si tu veux lier ton serveur à une adresse IP précise, par exemple pour avoir plusieurs différents sur la machine, tu remplaces INADDR_ANY par une adresse IP de ta machine.

Remarque : un pare-feu ne permet pas de choisir l'adresse locale d'une socket. Seule la programmation le permet.

N'hésitez pas à me dire si je ne suis pas clair. Et merci d'avance aux experts en réseau.
Clair comme de l'eau de source.
Titre: Plusieurs IP sur 1 seul interface
Posté par: corrector le 14 mai 2013 à 02:28:59
oui on peut, ça s’appelle du multi-homing (attention toutefois, ce terme a plusieurs sens suivant le contexte).
Ce terme est surtout utilisé pour ceux qui font du BGP.

ils n’écoutent que sur une seule IP , la première définie (dite IP principale).
Faux.

Il n'y a rien de tel. Fais des netstat -a.
Titre: ifconfig est dépassée
Posté par: corrector le 14 mai 2013 à 02:31:37
Exemple sous Linux :

ifconfig eth0 1.1.1.1 netmask 255.0.0.0
ifconfig eth0:1 2.2.2.2 netmask 255.0.0.0
ifconfig eth0:2 3.3.3.3 netmask 255.0.0.0
Pourrait-on enfin arrêter d'utiliser cette commande obsolète depuis 10 ans?

Il faut utiliser ip

On peut très bien définir des adresses IP d'un meme réseau IP : ça s'appelle de l'aliasing. Ca peut etre pratique dans le cas de la migration d'un ancien serveur.
Les "alias" d'interfaces sont obsolètes sous linux depuis une dizaine d'années!

Voir Documentation/networking/alias.txt :
IP-aliases are an obsolete way to manage multiple IP-addresses/masks
per interface. Newer tools such as iproute2 support multiple
address/prefixes per interface, but aliases are still supported
for backwards compatibility.
Titre: Choix de l'adresse source
Posté par: corrector le 14 mai 2013 à 02:33:24
Peut-on choisir laquelle des 2 IP va être choisie par un logiciel client sur le PC qui possède 2 IP?
Programmation C

Le logiciel peut le choisir explicitement avec bind :
s = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s < 0) // en cas d'erreur
  { perror ("socket"); exit (1); } // afficher un message puis quitter

// adresse locale de socket

sockaddr_in loc;
loc.sin_family = AF_INET;
loc.sin_port = ...;
loc.sin_addr = ...;

err = bind (s, &loc, sizeof loc);
if (err != 0) // en cas d'erreur
  { perror ("bind"); exit (1); } // afficher un message puis quitter

// adresse distante de socket

sockaddr_in dist;
dist.sin_family = AF_INET;
dist.sin_port = ...;
dist.sin_addr = ...;

// ouverture active du TCP

err = connect (s, &dist, sizeof dist);
if (err != 0) // en cas d'erreur
  { perror ("connect"); exit (1); } // afficher un message puis quitter

Choix de l'utilisateur

L'utilisateur peut choisir l'adresse source avec certains utilitaires; p.ex.

telnet
Citer
     -s src_addr
             Set the source IP address for the telnet connection to src_addr,
             which can be an IP address or a host name.

ssh
Citer
     -b bind_address
        Use bind_address on the local machine as the source address of
        the connection.  Only useful on systems with more than one
        address.

Sinon, ou s'il "choisit" l'adresse joker, c'est un paramètre de la table de routage.
Titre: Adresses IPv4 de bouclage local
Posté par: corrector le 14 mai 2013 à 03:53:30
C:\>netstat -an

Connexions actives

  Proto  Adresse locale         Adresse distante       État
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
...
  TCP    127.0.0.1:2559         0.0.0.0:0              LISTENING
  TCP    127.0.0.1:4370         0.0.0.0:0              LISTENING
  TCP    127.0.0.1:4380         0.0.0.0:0              LISTENING
...
  TCP    192.168.1.2:139        0.0.0.0:0              LISTENING

Si adresse locale = 0.0.0.0, écoute sur toutes les interfaces à la fois.
Si adresse locale = 127.0.0.1, n'écoute que sur l'interface locale
Petite remarque :

127.0.0.1 n'est pas la seule adresse de bouclage local, toute la plage 127/8 est dédiée au bouclage local; donc tu peux utiliser 127.0.0.2, 127.0.0.3 ... pour distinguer des serveurs tournants sur un même port TCP ou UDP.
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 14 mai 2013 à 14:06:48
Merci pour ces informations détaillées !
Titre: Plusieurs IP sur 1 seul interface
Posté par: krtman le 14 mai 2013 à 15:26:39
Merci pour la rapidité de la réponse!Et côté "client"? Peut-on choisir laquelle des 2 IP va être choisie par un logiciel client sur le PC qui possède 2 IP? Le logiciel qui va initier une connexion TCP? Si non, comment va se faire le choix?

Certaines applications permettent de configurer l'IP utilisée pour la sortie. Tout dépend comment est programmée l'application (cf exemples plus haut).

Est-ce que par exemple une adresse IP de destination qui est déjà dans un des 2 sous-réseaux (donc joignable directement sans passeer par une passerelle/routeur) sera systématiquement atteinte depuis l'IP du PC qui est sur le même sous-réseau?

Cela dépend de la table de routage de votre machine et de la métrique du subnet directement connecté par rapport a la route par défaut. Ou a toute autre route que vous auriez manuellement ajoutée.

Sachant que de manière relativement exhaustive (fonctionnement d'un routeur) le choix d'une route ce fait (en cas de plusieurs chemins possibles) dans l'ordre, par rapport aux critères suivant : masque, distance administrative, métrique.

Les routeurs peuvent avoir plusieurs adresses sur la même interface. Aprés on peut aussi créer des instances de routage virtuelle (VRF chez Cisco), qui crée une table de routage pour chaque VRF. Cela permet de mutualiser le matériel tout en gardant un cloisonnement des réseaux.

Ce type de concepts existe aussi sous Linux, mais l’intérêt, me semble plus limité. Tout au moins en entreprise ou les serveurs sont plutôt mono rôle. Et ou les RSSI n'aiment pas avoir des équipements avec des pattes dans plusieurs réseaux.
Titre: Plusieurs IP sur 1 seul interface
Posté par: Leon le 14 mai 2013 à 20:31:16
Merci à tous pour vos réponses. Effectivement, ça m'a permi de bidouiller. Je découvre des choses.

Dans mes bidouilles, j'ai aussi constaté qu'une "passerelle" dans une table de routage d'un PC pouvait être en dehors de la plage du (des) sous-réseaux IP, tout en étant sur le même réseau ethernet. Là aussi c'est pratique. Mais par contre, il faut que la "voie retour" soit prévue, et donc que le routeur en face connaisse la route vers le PC en question.

Leon.
Titre: ifconfig est dépassée
Posté par: vivien le 17 février 2017 à 15:10:40
Les "alias" d'interfaces sont obsolètes sous linux depuis une dizaine d'années!

Voir Documentation/networking/alias.txt :
IP-aliases are an obsolete way to manage multiple IP-addresses/masks
per interface. Newer tools such as iproute2 support multiple
address/prefixes per interface, but aliases are still supported
for backwards compatibility.

J'ai donc testé le fait de mettre plusieurs IP sans mettre d'alias : cela ne fonctionne pas

Je précise que chaque IPv4 est dans un /24 différent avec une gateway différente.
Même chose pour IPv6 où chaque IPv6 est dans un /64 différent.

auto eno1
iface eno1 inet static
        address IPv4-A
        netmask 255.255.255.0
        gateway GWv4-A

iface eno1 inet static
        address IPv4-B
        netmask 255.255.255.0
        gateway GWv4-B

iface eno1 inet6 static
        address IPv6-A
        netmask 64
        gateway GWv6-A

iface eno1 inet6 static
        address IPv6-B
        netmask 64
        gateway GWv6-B


Peut être qu'il n'est possible de mettre plusieurs IPv4 sur la même interface qui si elles sont toutes dans la même plage ?

Si les alias semble toujours d’actualité pour IPv4, elle ne sont plus nécessaire pour IPv6 : Cette configuration fonctionne

auto eno1
iface eno1 inet static
        address IPv4-A
        netmask 255.255.255.0
        gateway GWv4-A

iface eno1 inet6 static
        address IPv6-A
        netmask 64
        gateway GWv6-A

iface eno1 inet6 static
        address IPv6-B
        netmask 64
        gateway GWv6-B

auto eno1:0
iface eno1:0 inet static
        address IPv4-B
        netmask 255.255.255.0
        gateway GWv6-B


Voici ce que cela donne avec un ifconfig : Les 2 IPv6, chacune dans un /64 sont bien dans la même interface sans alias.
$ ifconfig
eno1      Link encap:Ethernet  HWaddr 00:26:b9:8b:b7:05 
          inet adr:IPv4-A  Bcast:  Masque:255.255.255.0
          adr inet6: IPv6-A/64 Scope:Global
          adr inet6: IPv6-B/64 Scope:Global
          adr inet6: fe80::226:b9ff:fe8b:b705/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Packets reçus:492 erreurs:0 :0 overruns:0 frame:0
          TX packets:141 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          Octets reçus:46929 (46.9 KB) Octets transmis:21571 (21.5 KB)

eno1:0    Link encap:Ethernet  HWaddr 00:26:b9:8b:b7:05 
          inet adr:IPv4-B  Bcast:  Masque:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Titre: Plusieurs IP sur 1 seul interface
Posté par: Hugues le 17 février 2017 à 15:13:55
J'ai arrêté d'utiliser Ifconfig perso, je fais tout avec ip directement et des post-up dans le interfaces (le petit protip de Jack :) )
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 17 février 2017 à 15:27:24
J'ai cherché à  faire plus propre et à  mettre
eno1 : IPv4-A et IPv6-A
eno1:0 : IPv4-B et IPv6-B

Cela ne fonctionne pas, je ne récupère pas d'IPv6 sur l'alias en01:0

auto eno1
iface eno1 inet static
        address IPv4-A
        netmask 255.255.255.0
        gateway GWv4-A

iface eno1 inet6 static
        address IPv6-A
        netmask 64
        gateway GWv6-A

auto eno1:0
iface eno1:0 inet static
        address IPv4-B
        netmask 255.255.255.0
        gateway GWv6-B

iface eno1:0 inet6 static
        address IPv6-B
        netmask 64
        gateway GWv6-B



En résumé :
eno1 : IPv4-A et IPv6-A  + eno1:0 : IPv4-B et IPv6-B   => ne fonctionne pas car IPv6 refuse d'être sur un alias
eno1 : IPv4-A IPv4-B et IPv6-A IPv6-B                  => ne fonctionne pas car impossible de mettre deux IPv4 sans créer d'alias
eno1 : IPv4-A IPv4-B et IPv6-A  + eno1:0 : IPv6-B      => OK
Titre: Plusieurs IP sur 1 seul interface
Posté par: kgersen le 17 février 2017 à 15:46:02
il semble qu'en ipv4 il ne faut qu'un seul gateway par interface non ?

sinon la méthode recommandée est  avec 'ip' et des ifup/ifdown.
Titre: ifconfig est dépassée
Posté par: corrector le 17 février 2017 à 17:16:05
J'ai donc testé le fait de mettre plusieurs IP sans mettre d'alias : cela ne fonctionne pas

Je précise que chaque IPv4 est dans un /24 différent avec une gateway différente.
Même chose pour IPv6 où chaque IPv6 est dans un /64 différent.


iface eno1 inet static
        address IPv4-A
        netmask 255.255.255.0
        gateway GWv4-A
Je ne connais pas cette syntaxe!

Ce n'est pas du linux. Ce de la m...asse rajoutée.
Titre: Plusieurs IP sur 1 seul interface
Posté par: corrector le 17 février 2017 à 17:19:03
il semble qu'en ipv4 il ne faut qu'un seul gateway par interface non ?
Pardon?

Le "gateway" c'est lié à une route, pas une interface.
Titre: ifconfig est dépassée
Posté par: vivien le 17 février 2017 à 18:00:38
Je ne connais pas cette syntaxe!

Ce n'est pas du linux. Ce de la m...asse rajoutée.

Tu mets quoi dans ton fichier /etc/network/interfaces ?

C'est l'unique syntaxe, non ?

/etc/network/interfaces issu d'un serveur pré-configuré par OVH :
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 37.187.131.220
        netmask 255.255.255.0
        network 37.187.131.0
        broadcast 37.187.131.255
        gateway 37.187.131.254

iface eth0 inet6 static
        address 2001:41d0:000a:41dc::
        netmask 64
        dns-nameservers 2001:41d0:3:163::1
        post-up /sbin/ip -family inet6 route add 2001:41d0:000a:41ff:ff:ff:ff:ff dev eth0
        post-up /sbin/ip -family inet6 route add default via 2001:41d0:000a:41ff:ff:ff:ff:ff
        pre-down /sbin/ip -family inet6 route del default via 2001:41d0:000a:41ff:ff:ff:ff:ff
        pre-down /sbin/ip -family inet6 route del 2001:41d0:000a:41ff:ff:ff:ff:ff dev eth0
Titre: Plusieurs IP sur 1 seul interface
Posté par: Hugues le 17 février 2017 à 18:08:55
J'ai cherché à  faire plus propre et à  mettre

C'est pas plus propre, c'est une illusion parce que c'est parsé par le service 'networking', en vrai c'est déguelasse de faire des alias.


La vraie bonne solution c'est de mettre les autres IP en post-up et si tu veux plusieurs gateway en fonction, des post-up avec des 'src X.X.X.X', je fais ça pour le management de certaines VMs.
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 17 février 2017 à 18:24:34
Tu nous donnes un fichier /etc/network/interfaces avec IP anonymisées en exemple ?
Titre: ifconfig est dépassée
Posté par: corrector le 17 février 2017 à 18:55:36
Tu mets quoi dans ton fichier /etc/network/interfaces ?
Rien, ça me gonfle (pour parler poliment), je n'utilise pas ces niaiseries.

La configuration directe des interfaces et des routes me convient parfaitement. Je n'ai pas envie que des outils se mettent en travers.
Titre: Plusieurs IP sur 1 seul interface
Posté par: zoc le 17 février 2017 à 18:58:16
J'espère que tu respectes tes convictions jusqu'au bout et que tu utilises des cartes perforées à la place de ces niaiseries de clavier et d'écran. Et ne parlons pas de la souris...
Titre: Plusieurs IP sur 1 seul interface
Posté par: kgersen le 17 février 2017 à 19:24:11
une facon de faire. Certains preferent mettre les IP secondaires en post-up, pre-down plutot que up/down.
iface eth0 inet static
    address 192.168.1.1 
    netmask 255.255.255.0
    gateway 192.168.1.254
    up   ip addr add 192.168.1.2/24 dev $IFACE
    down ip addr del 192.168.1.2/24 dev $IFACE
    up  ip addr add 10.1.1.1/24 dev $IFACE
    post-up ip route add default via 10.1.1.254 src 10.1.1.1
    pre-down ip route del default via 10.1.1.254 src 10.1.1.1
    down ip addr del 10.1.1.1/24 dev $IFACE

mais en pratique on utilisera une table différente pour 10.1.1.1
par exemple:
    post-up ip route add default via 10.1.1.254 src 10.1.1.1 table mgmtavec "mgmt" étant la table de routage pour le trafic de management par exemple (nb: "mgmt" est a ajouter dans /etc/iproute2/rt_tables)

pius ensuite des regles, par exemple:

ip rule add from 10.1.1.1/32 table mgmt
ip rule add to 10.1.1.254/32 table mgmt

bref c'est un exemple fait de tête, j'ai peut-etre oublié un truc ou 2 :p
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 17 février 2017 à 19:37:38
Les label ne sont pas fortement recommandés pour éviter des pb avec certains drivers ?

Le wiki de debian propose
auto eth0
allow-hotplug eth0
iface eth0 inet static
    address 192.168.1.42 
    netmask 255.255.255.0
    gateway 192.168.1.1
    up   ip addr add 192.168.1.43/24 dev $IFACE label $IFACE:0
    down ip addr del 192.168.1.43/24 dev $IFACE label $IFACE:0
    up   ip addr add 192.168.1.44/24 dev $IFACE label $IFACE:1
    down ip addr del 192.168.1.44/24 dev $IFACE label $IFACE:1
    up   ip addr add 10.10.10.14/24 dev $IFACE label $IFACE:2
    down ip addr del 10.10.10.14/24 dev $IFACE label $IFACE:2
Titre: Plusieurs IP sur 1 seul interface
Posté par: Hugues le 17 février 2017 à 20:21:31
Tu nous donnes un fichier /etc/network/interfaces avec IP anonymisées en exemple ?


Flemme de trier, mais y'a un peu de tout ce dont je parle :


hugues@core:~$ cat /etc/network/interfaces
source /etc/network/interfaces.d/*

auto lo iface lo inet loopback

auto ens18
iface ens18 inet static
        address 192.168.1.231
        netmask 255.255.255.0
        gateway 192.168.1.1

iface ens18 inet6 static
        address 2a03:4980:1b:b300:c0de::1
        netmask 64

auto ens19
iface ens19 inet static
address 10.0.3.1
netmask 255.255.255.0

iface ens19 inet6 static
address 2a03:4980:1b:b300:cafe::1
netmask 80


# ____   ____ _____
#|  _ \ / ___|___ /
#| | | | |     |_ \
#| |_| | |___ ___) |
#|____/ \____|____/

#Tunnel DC3
post-up ip -6 tunnel add GRE-CSS-DC3 mode ip6gre remote 2001:bc8:2832::1 local 2a03:4980:1b:b300:c0de::1 ttl 255
post-up ip -6 link set GRE-CSS-DC3 up
post-up ip addr add 10.1.0.18/30 dev GRE-CSS-DC3
post-up ip -6 addr add 2001:bc8:2832:2::9/127 dev GRE-CSS-DC3

#Route DC3
post-up ip route add 2001:bc8:2832::1/128 via fe80::21e:80ff:fe1c:8b8a dev ens18
post-up ip route add 2001:bc8:2832::/48 via 2001:bc8:2832:2::8 src 2a03:4980:1b:b300:cafe::1
post-up ip route add 10.0.2.0/24 via 10.1.0.17

# _____ _   _ ____
#|_   _| | | |___ \
#  | | | |_| | __) |
#  | | |  _  |/ __/
#  |_| |_| |_|_____|

#Tunnel TH2
post-up ip -6 tunnel add GRE-CSS-TH2 mode ip6gre remote 2a03:4980:210:4000::c0de local 2a03:4980:1b:b300:c0de::1 ttl 255
post-up ip -6 link set GRE-CSS-TH2 up
post-up ip addr add 10.1.0.22/30 dev GRE-CSS-TH2
post-up ip -6 addr add 2001:bc8:2832:2::11/127 dev GRE-CSS-TH2

#Route TH2
post-up ip -6 route add 2a03:4980:210:4000::c0de/128 via fe80::21e:80ff:fe1c:8b8a dev ens18
post-up ip route add 10.0.1.0/24 via 10.1.0.21 dev GRE-CSS-TH2
post-up ip -6 route add 2a03:4980:210:4000:1::/50 via 2001:bc8:2832:2::10 dev GRE-CSS-TH2



# _  __   ___   _
#| | \ \ / / \ | |
#| |  \ V /|  \| |
#| |___| | | |\  |
#|_____|_| |_| \_|

post-up ip route add 10.0.0.0/24 via 10.1.0.17
Titre: Plusieurs IP sur 1 seul interface
Posté par: corrector le 17 février 2017 à 21:19:27
J'espère que tu respectes tes convictions jusqu'au bout et que tu utilises des cartes perforées à la place de ces niaiseries de clavier et d'écran. Et ne parlons pas de la souris...
Je trouve que l'interface "graphique" est très souvent une abjecte perte de temps dans les interfaces de configuration par rapport à un unique fichier texte avec une syntaxe bien conçue et très lisible.
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 25 avril 2017 à 19:01:57
Pour ceux qui tombent sur ce sujet et qui cherchent une solution pour un Debian ou un Ubuntu, voici une configuration qui fonctionne avec 4 IPv4 sur un même /29 et 4 IPv6 sur un même /64

Les "label" en IPv4 sont facultatifs, mais conseillés pour que les IP s'affichent avec ifconfig (sinon vous ne voyez que la première IPv4, mais les autres fonctionnent).

Les "label" en IPv6 sont inutiles et ignorés, tout est mis à coté des autres IPv6, dans un ordre que je ne comprend pas toujours...

enp1s0f0 est mon interface réseau (cela pourrait être eth0)


# The loopback network interface
auto lo
iface lo inet loopback

# Interface Ethernet
auto enp1s0f0

# IPv4/IPv6 N°1
iface enp1s0f0 inet static
        address 46.227.1.186
        netmask 255.255.255.248
        gateway 46.227.1.185

iface enp1s0f0 inet6 static
        address 2A01:6E00:10:410::2
        netmask 64
        gateway 2A01:6E00:10:410::1
        dns-nameservers 2001:860:b0ff:1::1 2001:860:b0ff:1::2

# IPv4/IPv6 N°2 :
        up   ip addr add 46.227.1.187/29 dev $IFACE label $IFACE:0
        down ip addr del 46.227.1.187/29 dev $IFACE label $IFACE:0
        up   ip -6 addr add 2A01:6E00:10:410::3/64 dev $IFACE
        down ip -6 addr del 2A01:6E00:10:410::3/64 dev $IFACE

# IPv4/IPv6 N°3 :
        up   ip addr add 46.227.1.188/29 dev $IFACE label $IFACE:1
        down ip addr del 46.227.1.188/29 dev $IFACE label $IFACE:1
        up   ip -6 addr add 2A01:6E00:10:410::4/64 dev $IFACE
        down ip -6 addr del 2A01:6E00:10:410::4/64 dev $IFACE

# IPv4/IPv6 N°4 :
        up   ip addr add 46.227.1.189/29 dev $IFACE label $IFACE:2
        down ip addr del 46.227.1.189/29 dev $IFACE label $IFACE:2
        up   ip -6 addr add 2A01:6E00:10:410::5/64 dev $IFACE
        down ip -6 addr del 2A01:6E00:10:410::5/64 dev $IFACE
Titre: Plusieurs IP sur 1 seul interface
Posté par: Hugues le 25 avril 2017 à 19:05:39
Quelle utilité de la supprimer au down sachant que c'est volatile ?
Titre: Plusieurs IP sur 1 seul interface
Posté par: corrector le 26 avril 2017 à 04:00:44
Les "label" en IPv4 sont facultatifs, mais conseillés pour que les IP s'affichent avec ifconfig (sinon vous ne voyez que la première IPv4, mais les autres fonctionnent).
Qui utilise encore ifconfig?
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 26 avril 2017 à 07:02:09
Qui utilise encore ifconfig?
Tu préfères ip address show ?

C'est clairement différent comme information entre les deux utilitaires.

ip address show :
$ ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: em1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether d4:ae:52:ce:9a:9c brd ff:ff:ff:ff:ff:ff
3: em2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether d4:ae:52:ce:9a:9d brd ff:ff:ff:ff:ff:ff
4: p1p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 90:e2:ba:19:f7:50 brd ff:ff:ff:ff:ff:ff
    inet 194.158.119.190/30 brd 194.158.119.191 scope global p1p1
       valid_lft forever preferred_lft forever
    inet6 2001:860:f70a:100::2/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::92e2:baff:fe19:f750/64 scope link
       valid_lft forever preferred_lft forever
5: p1p2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 90:e2:ba:19:f7:51 brd ff:ff:ff:ff:ff:ff


ifconfig n'affiche que les interfaces actives et donne des statistiques (erreurs, quantité de données transféré depuis le reboot)
$ ifconfig
lo        Link encap:Boucle locale 
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          Packets reçus:155294 erreurs:0 :0 overruns:0 frame:0
          TX packets:155294 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1
          Octets reçus:235414680 (235.4 MB) Octets transmis:235414680 (235.4 MB)

p1p1      Link encap:Ethernet  HWaddr 90:e2:ba:19:f7:50 
          inet adr:194.158.119.190  Bcast:194.158.119.191  Masque:255.255.255.252
          adr inet6: fe80::92e2:baff:fe19:f750/64 Scope:Lien
          adr inet6: 2001:860:f70a:100::2/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Packets reçus:27773859999 erreurs:0 :0 overruns:0 frame:0
          TX packets:59703120974 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          Octets reçus:2084601697821 (2.0 TB) Octets transmis:88905105285422 (88.9 TB)



Quelle utilité de la supprimer au down sachant que c'est volatile ?
C'est plus propre, non ?
Titre: Plusieurs IP sur 1 seul interface
Posté par: Hugues le 26 avril 2017 à 08:40:04
C'est clairement différent comme information entre les deux utilitaires.

Tu peux retrouver toutes les infos de ifconfig avec ip, mais ça prend beaucoup plus de temps...

C'est plus propre, non ?
Je n'ai jamais compris l'intéret, je monte tout à coup de post-up chez moi


auto eth0
iface eth0 inet static
address 178.250.208.130
netmask 27
gateway 178.250.208.142

iface eth0 inet6 static
address 2a03:4980:210:4000:1::1
netmask 50
gateway 2a03:4980:210:4000::1


post-up ip -6 addr add 2a03:4980:210:4000::c0de/50 dev eth0
post-up ip addr add 10.0.1.254/32 dev lo
Titre: Plusieurs IP sur 1 seul interface
Posté par: kgersen le 26 avril 2017 à 20:22:41
c'est plus future proof et plus clean. ca permet aussi si on a d'autres scripts en up/post-up et/ou pre-down/down d’être toujours dans un état cohérent (par exemple si on met a jour des entrée DNS).

mais c'est sur que la l'exemple étant simple les 'down' ne sont pas forcement nécessaire.

Tu peux retrouver toutes les infos de ifconfig avec ip, mais ça prend beaucoup plus de temps...
Je n'ai jamais compris l'intéret, je monte tout à coup de post-up chez moi


auto eth0
iface eth0 inet static
address 178.250.208.130
netmask 27
gateway 178.250.208.142

iface eth0 inet6 static
address 2a03:4980:210:4000:1::1
netmask 50
gateway 2a03:4980:210:4000::1


post-up ip -6 addr add 2a03:4980:210:4000::c0de/50 dev eth0
post-up ip addr add 10.0.1.254/32 dev lo

ton indentation ne correspond pas a la facon dont est interprété le fichier.

le systeme le comprend et l'executera comme ca:

auto eth0
iface eth0 inet static
address 178.250.208.130
netmask 27
gateway 178.250.208.142

iface eth0 inet6 static
address 2a03:4980:210:4000:1::1
netmask 50
gateway 2a03:4980:210:4000::1
post-up ip -6 addr add 2a03:4980:210:4000::c0de/50 dev eth0
post-up ip addr add 10.0.1.254/32 dev lo

ca revient au meme sur un exemple trivial comme ca mais faut faire gaffe sur des configs plus complexes.
Titre: Plusieurs IP sur 1 seul interface
Posté par: Hugues le 27 avril 2017 à 18:06:11
Moi j'aimerais bien trouver plus "future proof" que des post-up, ou autres, je trouve ça assez moche :/
Titre: Plusieurs IP sur 1 seul interface
Posté par: jack le 27 avril 2017 à 18:46:42
Tu peux déjà utiliser $IFACE à la place de eth0 etc
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 27 avril 2017 à 18:51:17
@Hugues, suit mon exemple: https://lafibre.info/tcpip/plusieurs-ip-sur-1-seul-interface/msg437810/#msg437810

Quand on a plusieurs IP sur une même interface qui ont accès à l'Internet, il faut choisir celle qui sera utilisée quand le serveur a des requêtes à faire (DNS, mises à jour,...)

Quelle est la solution la plus propre pour choisir l'IP ?
Mettre des métriques pour chaque IP est toujours la solution ? (certains disent que c'est déprécié)

Comment se fait le choix de l'interface utilisée quand les métriques sont équivalent et l'adresse mac aussi vu qu'on est sur la même carte ?
Il me semble que en IPv6, c'est l'IPv6 la plus élevée qui est utilisée.
Titre: Plusieurs IP sur 1 seul interface
Posté par: jack le 27 avril 2017 à 18:59:43
Quand tu rajoutes une route, par exemple ta default:
ip r a default via <ip> source <ip>

À voir s'il y a plus élégant
Titre: Plusieurs IP sur 1 seul interface
Posté par: Hugues le 27 avril 2017 à 19:01:18
J'utilise source, mais pourquoi les métric seraient dépréciées ? C'est une des composantes du routage...

Vivien : je parle d'une solution qui n'impliquerait pas de taper des commandes "ip" à la main, comme le fichier "interfaces" de base.
Titre: Plusieurs IP sur 1 seul interface
Posté par: jack le 27 avril 2017 à 20:48:06
Voila un début de solution pour toi, hugues:

Avant:

root@ole:~# cat /etc/network/interfaces
#
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 178.250.208.68
netmask 27
gateway 178.250.208.94

root@ole:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether aa:00:00:c9:03:22 brd ff:ff:ff:ff:ff:ff
    inet 178.250.208.68/27 brd 178.250.208.95 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a800:ff:fec9:322/64 scope link
       valid_lft forever preferred_lft forever

Après:
root@ole:~# cat /etc/network/interfaces
#
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback
post-up ip link add bidule link eth0 type macvlan mode bridge
post-up ip link add machin link eth0 type macvlan mode bridge
post-up ip link add truc link eth0 type macvlan mode bridge

auto eth0
iface eth0 inet static
address 178.250.208.68
netmask 27
gateway 178.250.208.94

auto bidule
iface bidule inet static
address 178.250.208.76
netmask 27

auto machin
iface machin inet static
address 178.250.208.77
netmask 27

auto truc
iface truc inet static
address 178.250.208.78
netmask 27

root@ole:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether aa:00:00:c9:03:22 brd ff:ff:ff:ff:ff:ff
    inet 178.250.208.68/27 brd 178.250.208.95 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a800:ff:fec9:322/64 scope link
       valid_lft forever preferred_lft forever
3: bidule@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether f2:e8:72:79:81:07 brd ff:ff:ff:ff:ff:ff
    inet 178.250.208.76/27 brd 178.250.208.95 scope global bidule
       valid_lft forever preferred_lft forever
    inet6 fe80::f0e8:72ff:fe79:8107/64 scope link
       valid_lft forever preferred_lft forever
4: machin@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 3e:51:5a:59:58:33 brd ff:ff:ff:ff:ff:ff
    inet 178.250.208.77/27 brd 178.250.208.95 scope global machin
       valid_lft forever preferred_lft forever
    inet6 fe80::3c51:5aff:fe59:5833/64 scope link
       valid_lft forever preferred_lft forever
5: truc@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether de:50:fa:98:3e:f0 brd ff:ff:ff:ff:ff:ff
    inet 178.250.208.78/27 brd 178.250.208.95 scope global truc
       valid_lft forever preferred_lft forever
    inet6 fe80::dc50:faff:fe98:3ef0/64 scope link
       valid_lft forever preferred_lft forever

root@ole:~# ping -c1 -I 178.250.208.76 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 178.250.208.76 : 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=61 time=5.99 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.995/5.995/5.995/0.000 ms

root@ole:~# ping -c1 -I 178.250.208.78 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 178.250.208.78 : 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=61 time=6.00 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms

Titre: Plusieurs IP sur 1 seul interface
Posté par: corrector le 28 avril 2017 à 02:56:59
@Hugues, suit mon exemple: https://lafibre.info/tcpip/plusieurs-ip-sur-1-seul-interface/msg437810/#msg437810

Quand on a plusieurs IP sur une même interface qui ont accès à l'Internet, il faut choisir celle qui sera utilisée quand le serveur a des requêtes à faire (DNS, mises à jour,...)
C'est toujours le code de routage qui définit l'adresse IP source quand elle n'est pas choisie par l'application.
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 16 juin 2017 à 18:37:28
Je remonte ce sujet : impossible de rajouter un métrique avec la commande ip :
ip addr add 192.168.10.1/24 dev enp1s0f0 label enp1s0f0:0 metric 12
Error: either "local" is duplicate, or "metric" is a garbage.

J'ai pourtant un vieux fichier de conf utilisé il y a 12 ans qui utilisait des métriques (par contre il y avait un port physique par IP)
# The loopback network interface
auto lo
iface lo inet loopback

# Internet
allow-hotplug eth0
#iface eth0 inet dhcp
iface eth0 inet static
        address 217.171.27.254
        netmask 255.255.252.0
        gateway 217.171.24.1
        metric  0

# VoIP
allow-hotplug eth1
iface eth1 inet static
        address 217.171.31.241
        netmask 255.255.252.0
#       gateway 217.171.28.1
        metric  11

# VoD
allow-hotplug eth2
iface eth2 inet static
        address 10.50.6.36
        netmask 255.255.254.0
#       gateway 10.50.6.1
        metric  11

# Supervision Flamingo
allow-hotplug eth3
iface eth3 inet static
        address 10.200.44.2
        netmask 255.255.255.248
#       gateway 10.200.44.1
        metric  11

# Multicast
allow-hotplug eth4
iface eth4 inet static
       address 192.168.10.2
       netmask 255.255.255.0
#       gateway 192.168.10.1
       metric  12
Titre: Plusieurs IP sur 1 seul interface
Posté par: jack le 16 juin 2017 à 18:39:35
Une metric sur une IP ?
La metric s'applique sur des routes, plutôt, non ?
Titre: Plusieurs IP sur 1 seul interface
Posté par: Leon le 16 juin 2017 à 19:04:02
J'ai pourtant un vieux fichier de conf utilisé il y a 12 ans qui utilisait des métriques (par contre il y avait un port physique par IP)
# The loopback network interface
auto lo
iface lo inet loopback

# Internet
allow-hotplug eth0
#iface eth0 inet dhcp
iface eth0 inet static
        address 217.171.27.254
        netmask 255.255.252.0
        gateway 217.171.24.1
        metric  0

# VoIP
allow-hotplug eth1
iface eth1 inet static
        address 217.171.31.241
        netmask 255.255.252.0
#       gateway 217.171.28.1
        metric  11

# VoD
allow-hotplug eth2
iface eth2 inet static
        address 10.50.6.36
        netmask 255.255.254.0
#       gateway 10.50.6.1
        metric  11

# Supervision Flamingo
allow-hotplug eth3
iface eth3 inet static
        address 10.200.44.2
        netmask 255.255.255.248
#       gateway 10.200.44.1
        metric  11

# Multicast
allow-hotplug eth4
iface eth4 inet static
       address 192.168.10.2
       netmask 255.255.255.0
#       gateway 192.168.10.1
       metric  12
En ce qui concerne ce "vieux fichier de config", je ne comprends pas...
On peut déclarer plusieurs "gateway" sur une même machine? Si oui, ça va fonctionner comment? Et surtout est-ce que ça sera répétable comme fonctionnement?

Ca me parait quand même très bizarre comme config, mais je suis loin d'être un expert, donc j'aimerais bien en savoir plus.

Leon.
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 16 juin 2017 à 19:24:24
Le vieux de fichier de config étais associé a des routes : chaque interface n'était utilisé que pour accéder à des plages IP précises.

Là dans ma conf actuelle, c'est un peu différent car chaque IP a accès à tous l'Internet. Si le serveur reçois une requête de l'IP A , il répond par l'IP A ect.. pour les autres IP. Cela fonctionne bien, sauf pour les connexions initiées par le serveurs qui sortent par la mauvaise IP.

Comme Metric apparaît au niveau de ifconfig, je pensais qu'on pouvais modifier le Metric d'une interface.

$ ifconfig | grep Metric
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
Titre: Plusieurs IP sur 1 seul interface
Posté par: Leon le 16 juin 2017 à 20:00:10
Le vieux de fichier de config étais associé a des routes : chaque interface n'était utilisé que pour accéder à des plages IP précises.
OK, mais je ne comprends toujours pas. Une gateway, c'est une route très spéciale, c'est LA route par défaut vers tout le reste du monde, vers tout ce qui est à l'extérieur du réseau local. C'est donc très différent d'une route classique.
D'ailleurs, dans le fichier de config en question, nulle part tu ne déclares "les plages d'IP précises" vers lesquelles pointe chaque "gateway".

Bref, je ne comprends toujours pas ce que fait ce fichier de config. Si toi ou quelqu'un d'autre pouvait m'expliquer...
Perso, je fais bien attention à ne mettre qu'une seule gateway, qu'une seule route par défaut sur une machine qui a plusieurs interfaces. Mais si on peut faire autrement, alors ça m'intéresse, et j'aimerais comprendre comment ça fonctionne.

Leon.
Titre: Plusieurs IP sur 1 seul interface
Posté par: Hugues le 16 juin 2017 à 20:01:54
On peut déclarer plusieurs "gateway" sur une même machine? Si oui, ça va fonctionner comment? Et surtout est-ce que ça sera répétable comme fonctionnement?

On peut, ça fait du loadbalancing entre les gateways si elles ont un poids/metric egal
Mais là dans l'exemple, elles sont commentées
Titre: Plusieurs IP sur 1 seul interface
Posté par: jack le 16 juin 2017 à 20:06:18
Une gateway, c'est une route très spéciale, c'est LA route par défaut vers tout le reste du monde, vers tout ce qui est à l'extérieur du réseau local. C'est donc très différent d'une route classique.
Une gateway est une route, elle n'a absolument rien de plus, rien de moins, rien de différent, de toutes les autres routes

Tu peux voir ça comme un alias
Titre: Plusieurs IP sur 1 seul interface
Posté par: kgersen le 16 juin 2017 à 20:13:32
metric dans ton fichier de conf vient d'un module optionnel  ifmetric qui sert a manipuler la metric du routage a posteriori. ca permet notamment de changer la metric sur des routes attachées a une interface configurée par dhcp . voir man ifmetric ( 8 ).

Le 'metric' qui apparait dans ifconfig ne fonctionne pas sous Linux (SIOCGIFMETRIC n'est pas implèmenté sous Linux). En revanche il marche sur les variantes de BSD (d'ou la présence de ifmetric sur Linux).

 


 
Titre: Plusieurs IP sur 1 seul interface
Posté par: Leon le 16 juin 2017 à 20:22:01
Une gateway est une route, elle n'a absolument rien de plus, rien de moins, rien de différent, de toutes les autres routes

Tu peux voir ça comme un alias
OK, du coup, si je déclare plusieurs routes par défaut, est-ce que le système d'exploitation choisira systématiquement la première qui apparait dans la table de routage? Ou alors comme le suggère Hugues, il va faire du "load balancing"?
Si oui, c'est du vrai load balancing propre, qui maintient une connexion (TCP ou UDP) sur la même route?

Est-ce que tous les systèmes d'exploitation (windows/linux) acceptent ça et surtout est-ce qu'ils fonctionnent tous de la même façon?

Leon.
Titre: Plusieurs IP sur 1 seul interface
Posté par: kgersen le 16 juin 2017 à 20:23:04
C’était le cas type c'est un PC en DHCP avec wifi + ethernet donc 2 connexion LAN identiques.

Par défaut les 2 routes par défaut seront de meme poids donc les flux vont se répartir en le wifi et l'ethernet (sauf si y'a Network Manager qui genere lui meme une métric plus forte pour le wifi).

Avec ifmetric on peut mettre un metric plus grande que 0 pour le wifi  ce qui fait qu'il ne servira plus par défaut quand l'ethernet est branché.


Titre: Plusieurs IP sur 1 seul interface
Posté par: Hugues le 16 juin 2017 à 20:24:45
OK, du coup, si je déclare plusieurs routes par défaut, est-ce que le système d'exploitation choisira systématiquement la première qui apparait dans la table de routage? Ou alors comme le suggère Hugues, il va faire du "load balancing"?
Si oui, c'est du vrai load balancing propre, qui maintient une connexion (TCP ou UDP) sur la même route?

Non, c'est purement et simplement un paquet de chaque coté, c'est assez inutilisable en fait.
(J'en ai fait les frais cet après midi en passant de mon xDSL Free à mon FTTH Orange, j'avais deux routes sur mon routeur, j'ai coupé Free : environ 1 ping sur 2 qui se perdait...)
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 16 juin 2017 à 21:51:50
Vous voyez où plusieurs gateway dans mes exemples ?

Dans mon vieux fichier de config, je rajoutais les routes à la main :
route add -net 10.50.0.0 netmask 255.255.0.0 gw 10.50.6.1
route add -net 10.200.0.0 netmask 255.255.0.0 gw 10.200.44.1
route add -net 225.0.0.0 netmask 255.0.0.0 gw 10.50.6.1

Sinon quand un même serveur porte plusieurs plages IP différentes sur une seule interface, une seule gateway est nécessaire et cela ne gêne pas Linux qu'elle ne soit pas dans le masque de sous réseau.

Dans mon exemple récent, le serveur porte deux plages IPv6 : une plage IPv6 unicast et une plage IPv6 anycast complètement différente.
Une seule gateway est déclarée. Le serveur répond bien aux requêtes en IPv6 anycast et en IPv6 unicast.
Par contre quand lui a besoin d'Internet (requêtes DNS par exemple), il utilise son IPv6 anycast par défaut. Si le serveur ciblé est proche aucun souci, mais si le serveur est plus proche d'un autre serveur avec la même plage IPv6 anycast, la réponse va au second serveur. Je pensais pouvoir m'en sortir avec des métriques, mais je vais rajouter des routes avec métriques.
Titre: Plusieurs IP sur 1 seul interface
Posté par: Leon le 16 juin 2017 à 22:09:11
Vous voyez où plusieurs gateway dans mes exemples ?
T'inquiètes pas, c'est juste moi qui ne sait pas lire les fichiers de conf linux.

Leon.
Titre: Plusieurs IP sur 1 seul interface
Posté par: raf le 17 juin 2017 à 09:57:15
Dans mon exemple récent, le serveur porte deux plages IPv6 : une plage IPv6 unicast et une plage IPv6 anycast complètement différente.
Une seule gateway est déclarée. Le serveur répond bien aux requêtes en IPv6 anycast et en IPv6 unicast.
Par contre quand lui a besoin d'Internet (requêtes DNS par exemple), il utilise son IPv6 anycast par défaut. Si le serveur ciblé est proche aucun souci, mais si le serveur est plus proche d'un autre serveur avec la même plage IPv6 anycast, la réponse va au second serveur. Je pensais pouvoir m'en sortir avec des métriques, mais je vais rajouter des routes avec métriques.
Si tu essaye de suivre RFC 6724, ca donne quoi ? Toujours l'anycast ?
As-tu essaye de mettre l'Anycast sur une loopback ?
En effet, en IPv6, la source address selection n'est pas aussi simple qu'en v4, voir la RFC en question (6724).
Titre: Plusieurs IP sur 1 seul interface
Posté par: Optix le 17 juin 2017 à 11:11:41
Non, c'est purement et simplement un paquet de chaque coté, c'est assez inutilisable en fait.
(J'en ai fait les frais cet après midi en passant de mon xDSL Free à mon FTTH Orange, j'avais deux routes sur mon routeur, j'ai coupé Free : environ 1 ping sur 2 qui se perdait...)

Euh c'est faux, le load balancing fonctionne super bien... quand c'est bien configuré :)

Toi ton problème, c'est que tu as une IP différente sur chaque sortie et que ton routeur sort sur Orange avec une IP source Free ! Ca ne te choque pas ? En tout cas, c'est la raison de ta perte.

Chez moi (sur du Mikrotik) je créé une règle src-nat PAR interface (et pas de masquerade, je parle bien de src-nat, nuance), et sur mes routes 0.0.0.0/0 à poids égal, je force ma pref-src avec l'IP de l'interface concernée pour être sur. Et ça juste marche :)

Bon ça c'est bien pour le ping, mais en pratique, il faut load-balancer par connexion et non par paquet. Et là pareil, un p'tit coup de règle "mangle" dans le firewall pour dispatcher ça selon tes goûts, sans craindre le loss en cas de perte d'un lien (quand un lien tombe chez moi, ça enlève les routes correspondantes, donc même si mon firewall load-balance, ça sort tout sur le seul lien avec la bonne IP source quand même).
Titre: Plusieurs IP sur 1 seul interface
Posté par: kgersen le 17 juin 2017 à 11:21:53
Dans mon exemple récent, le serveur porte deux plages IPv6 : une plage IPv6 unicast et une plage IPv6 anycast complètement différente.
Une seule gateway est déclarée. Le serveur répond bien aux requêtes en IPv6 anycast et en IPv6 unicast.
Par contre quand lui a besoin d'Internet (requêtes DNS par exemple), il utilise son IPv6 anycast par défaut. Si le serveur ciblé est proche aucun souci, mais si le serveur est plus proche d'un autre serveur avec la même plage IPv6 anycast, la réponse va au second serveur. Je pensais pouvoir m'en sortir avec des métriques, mais je vais rajouter des routes avec métriques.

Tu peux mettre le preferred_lft a 0 sur l'adresse anycast comme elle ne sera jamais sélectionnée pour sortir.

ou alors activer une ipv6 temporaire elle sera toujours choisie pour sortir (en plus cela limite l'exposition de ton serveur).
Titre: Plusieurs IP sur 1 seul interface
Posté par: Hugues le 17 juin 2017 à 14:38:36
Euh c'est faux, le load balancing fonctionne super bien... quand c'est bien configuré :)

Ce qui n'est pas le cas ici présent oui
Titre: Plusieurs IP sur 1 seul interface
Posté par: vivien le 19 juin 2017 à 15:47:24
Tu peux mettre le preferred_lft a 0 sur l'adresse anycast comme elle ne sera jamais sélectionnée pour sortir.

ou alors activer une ipv6 temporaire elle sera toujours choisie pour sortir (en plus cela limite l'exposition de ton serveur).

Merci, rajouter preferred_lft 0 semble parfait pour mon pb.

C'est très pratique aussi quand on a une IPv6 dédié à l'administration, afin d'éviter que le serveur l'utilise en sortie.

Je pense mettre preferred_lft 0 sur toutes les IPv6, hors de celle qui doit être utilisée en sortie.

Avec ip -6 addr, le mot deprecated + un ttl de 0 seconde est rajouté sur les IPv6 avec preferred_lft 0
# ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
4: enp1s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2001:a:a:1001::2/64 scope global deprecated
       valid_lft forever preferred_lft 0sec
    inet6 2001:a:a:1101:a:a:a:a/64 scope global deprecated
       valid_lft forever preferred_lft 0sec
    inet6 2001:a:a:1101::4/64 scope global
       valid_lft forever preferred_lft forever
    inet6 2001:a:a:1101::3/64 scope global
       valid_lft forever preferred_lft forever
    inet6 2001:a:a:1101::2/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::3efd:feff:fe1d:7660/64 scope link
       valid_lft forever preferred_lft forever

Un peu de doc en anglais : IPv6 Source Address Selection on Linux (http://www.davidc.net/networking/ipv6-source-address-selection-linux)