Trafic réseau séparé sur deux interfaces réseau


11

Pourriez-vous apporter votre expertise pour comprendre comment configurer la séparation du trafic réseau sur deux interfaces réseau?

Si je comprends bien jusqu'à présent, les routes statiques sont utilisées pour le trafic réseau qui n'est pas conçu pour utiliser une passerelle par défaut. La passerelle par défaut est utilisée pour tout le trafic qui n'est pas destiné au réseau local et pour lequel aucun itinéraire préféré n'a été spécifié dans une table de routage.

Le scénario est le suivant.

  • Chaque ordinateur du réseau possède deux cartes réseau.
  • L'interface de production pour chacun est eth0(GW = 10.10.10.1).
  • L'interface de gestion pour chacun est eth1(GW = 192.168.100.1).
  • Le trafic de production et de gestion doit être totalement séparé.

J'ai posté ci-dessous ce que j'ai essayé avec Debian Wheezy. Et, mon problème est que, bien que j'ai des hôtes configurés de telle manière qu'ils communiquent sur les deux interfaces, les hôtes individuels semblent "entendre" le trafic sur la mauvaise interface. Par exemple:

Hôte 140

eth0      Link encap:Ethernet  HWaddr 08:00:27:d1:b6:8f
          inet addr:10.10.10.140  Bcast:10.10.10.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fed1:b68f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1341 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2530 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:641481 (626.4 KiB)  TX bytes:241124 (235.4 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:ad:14:b6
          inet addr:192.168.100.140  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fead:14b6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7220 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5257 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:602485 (588.3 KiB)  TX bytes:1022906 (998.9 KiB)

A partir de l' hôte 140, j'exécute cette commande: tcpdump -i eth0. Dans une session distincte sur l'hôte 140, j'exécute ping 192.168.100.50.

19:17:29.301565 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 10, length 64
19:17:30.301561 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 11, length 64
19:17:31.301570 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 12, length 64
19:17:32.301580 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 13, length 64

Pourquoi la sortie ci-dessus est-elle activée eth0? Je pense que je ne devrais voir le trafic que pour le 10.10.10.140. Je le vois aussi eth1, comme prévu:

19:18:47.805408 IP 192.168.100.50 > 192.168.100.140: ICMP echo request, id 1605, seq 247, length 64

Si je cingle de l'hôte 50 (mêmes ifconfigrésultats - juste un dernier quadruple), puis eth0est silencieux, et je vois les échos ICMP dessus eth1, comme prévu.

Je voudrais comprendre comment configurer chaque interface pour gérer uniquement le trafic dont elle est responsable dans deux principales variétés Linux. Je pense que j'y suis presque, mais il me manque quelque chose que je n'arrive pas à trouver.

  • Debian Wheezy (7.x) ou Debian Jessie (8.x)
  • Enterprise Linux (6.x) (RedHat / CentOS / Scientific / Oracle).

Je sais qu'une solution pour Debian devrait être bonne à la fois pour Wheezy et Jessie, et qu'une solution pour un EL devrait être la même pour toutes les versions EL 6.x. Je voudrais éviter d'utiliser un script RC pour exécuter des commandes, optant plutôt pour l'utilisation des fichiers de configuration.

Dans Debian, les fichiers de configuration pertinents que je connais sont:

  • /etc/network/interfaces

Dans EL 6.x, les fichiers de configuration pertinents que je connais sont:

  • /etc/sysconfig/network
  • /etc/sysconfig/network-scripts/ifcfg-eth0
  • /etc/sysconfig/network-scripts/ifcfg-eth1
  • /etc/sysconfig/network-scripts/route-eth0
  • /etc/sysconfig/network-scripts/route-eth1
  • /etc/sysconfig/network-scripts/rule-eth0
  • /etc/sysconfig/network-scripts/rule-eth1

Mon /etc/network/interfacesfichier "Jessie" Debian 8 :

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# Production interface
auto eth0
allow-hotplug eth0
iface eth0 inet static
  address 10.10.10.140
  netmask 255.255.255.0
  gateway 10.10.10.1

# Management interface
auto eth1
allow-hotplug eth1
iface eth1 inet static
  address 192.168.100.140
  netmask 255.255.255.0

Je pense que cela netstat -anrpourrait illustrer le problème:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.10.10.1      0.0.0.0         UG        0 0          0 eth0
10.10.10.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 eth1

checkiptabels -L -t nat
PersianGulf

Réponses:


7

J'aimerais en savoir plus sur ce sujet pour affiner la configuration afin qu'elle soit la meilleure possible, mais voici ce que j'ai jusqu'à présent. Même sans activer le filtrage ARP sur toutes les interfaces réseau ( net.ipv4.conf.all.arp_filter = 0), comme mentionné par @spuk, le trafic semble être complètement séparé dans cette configuration.

Le fichier,, /etc/iproute2/rt_tablesest le même dans EL 6.x et DEB 7/8, au moins. Il s'agit du fichier qui crée une table de routage nommée pour les itinéraires statiques.

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
1 mgmt

Ci-dessus, le numéro de la route statique nommée, 1, est essentiellement arbitraire; ou, chaque route statique obtient son propre numéro unique entre 1 et 252.

Le fichier, /etc/network/interfacesen DEB 7/8, au moins:

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
  iface lo inet loopback

# The production network interface
# The 'gateway' directive is the default route.
# Were eth0 configured via DHCP, the default route would also be here.
auto eth0
allow-hotplug eth0
iface eth0 inet static
  address 10.10.10.140
  netmask 255.255.255.0
  gateway 10.10.10.1

# The management network interface
# The 'gateway' directive cannot be used again because there can be
# one, and only one, default route. Instead, the 'post-up' directives
# use the `mgmt` static route.
auto eth1
allow-hotplug eth1
iface eth1 inet static
  address 192.168.100.140
  netmask 255.255.255.0
  post-up ip route add 192.168.100.0/24 dev eth1 src 192.168.100.140 table mgmt
  post-up ip route add default via 192.168.100.1 dev eth1 table mgmt
  post-up ip rule add from 192.168.100.140/32 table mgmt
  post-up ip rule add to 192.168.100.140/32 table mgmt

Le résultat de ip route showsur Debian:

default via 10.10.10.1 dev eth0
10.10.10.0/24 dev eth0  proto kernel  scope link  src 10.10.10.140
192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.140

Le /etc/sysconfig/networkfichier EL 6.x :

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1

Ci-dessus, GATEWAY est l'itinéraire par défaut. Ci-dessous, si BOOTPROTOCOL était réglé sur DHCP, la route par défaut serait acquise auprès de DHCP.

LE /etc/sysconfig/network-scripts/ifcfg-eth0fichier EL 6.x , sans "HWADDR" et "UUID":

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=10.10.10.140
NETMASK=255.255.255.0
NETWORK=10.10.10.0
BROADCAST=10.10.10.255

LE /etc/sysconfig/network-scripts/ifcfg-eth1fichier EL 6.x , sans "HWADDR" et "UUID":

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=192.168.100.140
NETMASK=255.255.255.0
NETWORK=192.168.100.0
BROADCAST=192.168.100.255

Le /etc/sysconfig/network-scripts/route-eth1fichier EL 6.x :

192.168.100.0/24 dev eth1 table mgmt
default via 192.168.100.1 dev eth1 table mgmt

Le /etc/sysconfig/network-scripts/rule-eth1fichier EL 6.x :

from 192.168.100.0/24 lookup mgmt

Le résultat ip route showsur EL 6.x:

192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.160
10.10.10.0/24 dev eth0  proto kernel  scope link  src 10.10.10.160
169.254.0.0/16 dev eth0  scope link  metric 1002
169.254.0.0/16 dev eth1  scope link  metric 1003
default via 10.10.10.1 dev eth0

4

Je n'ai pas lu l'intégralité de votre message (désolé, je ne peux pas vraiment passer du temps en ce moment), mais je pense que cela peut être lié à la façon dont Linux implémente le modèle d'hôte IP :

... L'implémentation IPv4 sous Linux est par défaut le modèle hôte faible. ...

De cette même page:

... Si la pile IP est implémentée avec un modèle d'hôte faible, elle accepte tout paquet destiné localement, quelle que soit l'interface réseau sur laquelle le paquet a été reçu. ...

C'est-à-dire que sous Linux, par défaut, les adresses IP "appartiennent à l'hôte", pas strictement "à l'interface". Vous pouvez modifier ce comportement via arp_filter, rp_filter, arp_announce, arp_ignoresysctls (obtenu à partir LVS: L'ARP Problème , vu ici ). Voir également ip-sysctl.txt .


Cet article a bien fonctionné pour moi: sivel.net/2006/12/linux-multi-homing
Richard Gomes
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.