Auteur : Didier Misson
• 27 novembre 2007

Dans certaines occasions, il est pratique d’avoir plusieurs IP sur une même interface.



D’abord un rappel des définitions classiques d’une interface réseau Ethernet.
Ces définitions se trouvent dans le fichier “/etc/network/interfaces“.

Définition en IP dynamique (DHCP) :

sudo vi /etc/network/interfaces
# 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 # Définition dynamique DHCP :  auto eth1 iface eth1 inet dhcp

C’est évidemment le plus simple.
Votre serveur DHCP, habituellement votre routeur ou modem ADSL, répond à la demande DHCP de votre PC et fourni en retour une IP, mask, default gateway…

Quand vous l’activez, vous recevez ce genre de messages :

$ sudo /etc/init.d/networking restart  * Reconfiguring network interfaces... There is already a pid file /var/run/dhclient.eth1.pid with pid 10202 killed old client process, removed PID file Internet Systems Consortium DHCP Client V3.0.5 Copyright 2004-2006 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth1/00:0a:e6:1f:9d:6f Sending on   LPF/eth1/00:0a:e6:1f:9d:6f Sending on   Socket/fallback DHCPRELEASE on eth1 to 192.168.168.254 port 67 There is already a pid file /var/run/dhclient.eth1.pid with pid 134519120 Internet Systems Consortium DHCP Client V3.0.5 Copyright 2004-2006 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth1/00:0a:e6:1f:9d:6f Sending on   LPF/eth1/00:0a:e6:1f:9d:6f Sending on   Socket/fallback DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 8 DHCPOFFER from 192.168.168.254 DHCPREQUEST on eth1 to 255.255.255.255 port 67 DHCPACK from 192.168.168.254 bound to 192.168.168.20 -- renewal in 368901 seconds.

C’est bien mon modem ADSL 192.168.168.254 qui a répondu au broadcast (255.255.255.255) de demande DHCP.

Dans le cas d’une définition statique :

auto eth1 iface eth1 inet static address 192.168.168.249 netmask 255.255.255.0 gateway 192.168.168.254

Le redémarrage donne nettement moins de messages ;-)

$ sudo /etc/init.d/networking restart  * Reconfiguring network interfaces...                 [ OK ]

Vous pouvez vérifier la bonne définition de l’interface :

didier@didier-ubuntu:/etc/network$ sudo ifconfig eth1      Lien encap:Ethernet  HWaddr 00:0A:E6:1F:9D:6F           inet adr:192.168.168.249  Bcast:192.168.168.255  Masque:255.255.255.0           adr inet6: fe80::20a:e6ff:fe1f:9d6f/64 Scope:Lien           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           Packets reçus:49547 erreurs:0 :0 overruns:0 frame:0           TX packets:41225 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 lg file transmission:1000           Octets reçus:45522135 (43.4 MB) Octets transmis:5413307 (5.1 MB)           Interruption:3 Adresse de base:0xd400

Essayons de définir une sous interface eth1:1 :

auto eth1 iface eth1 inet static address 192.168.168.249 netmask 255.255.255.0 gateway 192.168.168.254 auto eth1:1 iface eth1:1 inet static address 192.168.1.200 netmask 255.255.255.0 gateway 192.168.1.254

Redémarrons le réseau :

$ sudo /etc/init.d/networking restart  * Reconfiguring network interfaces... RTNETLINK answers: No such process SIOCDELRT: No such process                                                           [ OK ]

Vérifions :

$ sudo ifconfig eth1      Lien encap:Ethernet  HWaddr 00:0A:E6:1F:9D:6F           inet adr:192.168.168.249  Bcast:192.168.168.255  Masque:255.255.255.0           adr inet6: fe80::20a:e6ff:fe1f:9d6f/64 Scope:Lien           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           Packets reçus:49759 erreurs:0 :0 overruns:0 frame:0           TX packets:41532 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 lg file transmission:1000           Octets reçus:45596992 (43.4 MB) Octets transmis:5453632 (5.2 MB)           Interruption:3 Adresse de base:0xd400 eth1:1    Lien encap:Ethernet  HWaddr 00:0A:E6:1F:9D:6F           inet adr:192.168.1.200  Bcast:192.168.1.255  Masque:255.255.255.0           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           Interruption:3 Adresse de base:0xd400 lo        Lien 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:16436  Metric:1           Packets reçus:4 erreurs:0 :0 overruns:0 frame:0           TX packets:4 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 lg file transmission:0           Octets reçus:336 (336.0 b) Octets transmis:336 (336.0 b) 

Le message avec RTNETLINK, c’est une question de route.

$ route Table de routage IP du noyau Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface 192.168.1.0     *               255.255.255.0   U     0      0        0 eth1 192.168.168.0   *               255.255.255.0   U     0      0        0 eth1 link-local      *               255.255.0.0     U     1000   0        0 eth1 default         192.168.1.254   0.0.0.0         UG    100    0        0 eth1 default         fritz.fonwlan.b 0.0.0.0         UG    100    0        0 eth1

Il y a bien une route pour le réseau 192.168.1.0/24 et pour le réseau 192.168.168.0/24.
Mais il y a 2 default routes !
(Le Fritz!Box Fon Wlan, c’est mon modem ADSL)

Il semble tout simplement que, ayant 2 interfaces logiques définies avec 2 ranges IP différents, Linux ne sait pas la quelle de ces 2 interfaces utiliser par défaut…

Une idée serait de ne pas mettre de “gateway” pour la seconde interface.
De toute façon, à part la route par défaut vers Internet, les autres routes éventuelles vers la sous-interface devraient être manuellement précisées.

Je n’ai pas d’autre machine dans ce réseau 192.168.1.0 / 24.
Je ne peux donc pas vérifier que l’interface fonctionne réellement.

Juste pour vérification, je défini l’interface et la sous-interface dans le même range IP :

auto eth1 iface eth1 inet static address 192.168.168.249 netmask 255.255.255.0 gateway 192.168.168.254 auto eth1:1 iface eth1:1 inet static address 192.168.168.200 netmask 255.255.255.0 gateway 192.168.168.254

Et je vérifie depuis un autre PC :

$ ping 192.168.168.249 PING 192.168.168.249 (192.168.168.249) 56(84) bytes of data. 64 bytes from 192.168.168.249: icmp_seq=1 ttl=64 time=0.364 ms 64 bytes from 192.168.168.249: icmp_seq=2 ttl=64 time=0.284 ms $ ping 192.168.168.200 PING 192.168.168.200 (192.168.168.200) 56(84) bytes of data. 64 bytes from 192.168.168.200: icmp_seq=1 ttl=64 time=1.65 ms 64 bytes from 192.168.168.200: icmp_seq=2 ttl=64 time=0.292 ms 

Ca fonctionne parfaitement. :-)

Pour compliquer un peu, on pourrait même mélanger IP statique et DHCP :

auto eth1 iface eth1 inet dhcp auto eth1:1 iface eth1:1 inet static address 192.168.168.200 netmask 255.255.255.0 gateway 192.168.168.254

On redémarre le réseau :

$ sudo /etc/init.d/networking restart  * Reconfiguring network interfaces... ... Listening on LPF/eth1/00:0a:e6:1f:9d:6f Sending on   LPF/eth1/00:0a:e6:1f:9d:6f Sending on   Socket/fallback DHCPRELEASE on eth1 to 192.168.168.254 port 67 RTNETLINK answers: No such process SIOCDELRT: No such device ... Listening on LPF/eth1/00:0a:e6:1f:9d:6f Sending on   LPF/eth1/00:0a:e6:1f:9d:6f Sending on   Socket/fallback DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 7 DHCPOFFER from 192.168.168.254 DHCPREQUEST on eth1 to 255.255.255.255 port 67 DHCPACK from 192.168.168.254 bound to 192.168.168.20 -- renewal in 331166 seconds. SIOCSIFFLAGS: Cannot assign requested address

Il fait bien une demande DHCP sur eth1, et pas sur eth1:1

Vérifions :

$ sudo ifconfig eth1      Lien encap:Ethernet  HWaddr 00:0A:E6:1F:9D:6F           inet adr:192.168.168.20  Bcast:192.168.168.255  Masque:255.255.255.0           adr inet6: fe80::20a:e6ff:fe1f:9d6f/64 Scope:Lien           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           Packets reçus:50486 erreurs:0 :0 overruns:0 frame:0           TX packets:42326 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 lg file transmission:1000           Octets reçus:46052236 (43.9 MB) Octets transmis:5568588 (5.3 MB)           Interruption:3 Adresse de base:0xd400 eth1:1    Lien encap:Ethernet  HWaddr 00:0A:E6:1F:9D:6F           inet adr:192.168.168.200  Bcast:192.168.168.255  Masque:255.255.255.0           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           Interruption:3 Adresse de base:0xd400 lo        Lien 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:16436  Metric:1           Packets reçus:4 erreurs:0 :0 overruns:0 frame:0           TX packets:4 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 lg file transmission:0           Octets reçus:336 (336.0 b) Octets transmis:336 (336.0 b)

On retrouve bien les IP obtenues par

  • par DHCP sur l’interface eth1,
  • en statique sur la sous-interface eth1:1

A quoi cela pourrait servir ?

Par exemple, si vous devez permettre à une machine d’accéder à 2 réseaux différents, càd 2 ranges IP différents.

Ou à faire un firewall avec une seule interface !

  • eth1 en dhcp servirait à la communication avec le modem routeur
  • eth1:1 dans un AUTRE range IP servirait à la communication avec les autres machines derrière ce firewall.

Ce n’est pas vraiment une méthode conseillée au niveau firewall… Ce n’est pas le top en sécurité (si une machine est hackée, l’attaquant pourrait modifier la configuration de son interface réseau et ainsi accéder à l’autre range IP…), mais ça peut dépanner parfois.

Catégorie: Linux | Tags : ,
Vous pouvez suivre toutes les réponses à à ce billet via le flux RSS 2.0. Les commentaires et la notification par ping sont désactivés.

Une réponse

  1. 1
    Ottakar 
    3 décembre 2007

    Tiens c’est intéressant ça ;)