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.






3 décembre 2007
Tiens c’est intéressant ça