Pourriez-vous apporter votre expertise pour comprendre comment s'y prendre
pour configurer la séparation du trafic réseau sur deux interfaces réseau ?
D'après ce que j'ai compris 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
aucune route préférée n'a été spécifiée 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, même si j'ai des hôtes configurés de telle manière qu'
ils communiquent sur les deux interfaces, des hôtes individuels semblent "entendre"
le trafic sur la mauvaise interface. Par exemple :
Héberger 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)
Depuis l'hôte 140, j'exécute cette commande :tcpdump -i eth0
. Dans une session séparée
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 est-ce que je vois la sortie ci-dessus sur eth0
? Je pense que je ne devrais voir le trafic que pour 10.10.10.140.
Je vois aussi cela sur 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 ping depuis l'hôte 50 (même ifconfig
résultats - juste un dernier carré différent),
puis eth0
est silencieux et je vois les échos ICMP sur eth1
, comme prévu.
J'aimerais comprendre comment configurer chaque interface pour gérer uniquement
le trafic dont elle est responsable dans deux principales variétés de Linux.
Je pense que j'y suis presque, mais il me manque quelque chose que je peux juste' t semblent 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 d'EL 6.x.
J'aimerais éviter d'utiliser un script RC pour exécuter des commandes, en optant à la place
pour utiliser les 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
Ma Debian 8 "Jessie" /etc/network/interfaces
fichier :
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 netstat -anr
pourrait 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
Réponse acceptée :
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_tables
, est la même dans EL 6.x et DEB 7/8, au moins. C'est le fichier qui crée une table de routage nommée pour les routes statiques.
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
252 mgmt
Ci-dessus, le numéro de la route statique nommée, 252, est essentiellement arbitraire; ou, chaque route statique obtient son propre numéro unique entre 1 et 252.
Le fichier, /etc/network/interfaces
en 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 show
sur 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
L'EL 6.x /etc/sysconfig/network
fichier :
NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1
Ci-dessus, GATEWAY est la route par défaut. Ci-dessous, si BOOTPROTOCOL était défini sur DHCP, la route par défaut serait acquise à partir de DHCP.
LE EL 6.x /etc/sysconfig/network-scripts/ifcfg-eth0
fichier, 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 EL 6.x /etc/sysconfig/network-scripts/ifcfg-eth1
fichier, 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 EL 6.x /etc/sysconfig/network-scripts/route-eth1
fichier :
192.168.100.0/24 dev eth1 table mgmt
default via 192.168.100.1 dev eth1 table mgmt
Le EL 6.x /etc/sysconfig/network-scripts/rule-eth1
fichier :
from 192.168.100.0/24 lookup mgmt
Le résultat de ip route show
sur 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
default via 10.10.10.1 dev eth0
Mise à jour pour RHEL8
Cette méthode décrite ci-dessus fonctionne avec RHEL 6 &RHEL 7 ainsi que les dérivés, mais pour RHEL 8 et dérivés, il faut d'abord installer network-scripts
utiliser la méthode décrite ci-dessus.
dnf install network-scripts
L'installation génère un avertissement indiquant que network-scripts
sera supprimé dans l'une des prochaines versions majeures de RHEL et que NetworkManager fournit ifup
/ifdown
scripts également.
Mise à jour pour Ubuntu 20.04 LTS
La création d'une table de routage nommée est correcte, mais pas obligatoire avec netplan
, qui n'utilisera pas le nom de toute façon. Néanmoins le numéro de la table de routage nommée dans les rt_tables
le fichier peut être utilisé pour netplan
. Les cartes réseau correspondantes sont enps03
(eth0
) et enp0s8
(eth1
).
network:
version: 2
ethernets:
enp0s3:
addresses:
- 10.10.10.140/24
dhcp4: false
dhcp6: false
gateway4: 10.10.10.1
nameservers:
addresses:
- 1.2.3.4
- 1.2.3.5
search:
- your-search-domain-name.com
enp0s8:
dhcp4: false
dhcp6: false
addresses:
- 192.168.100.140/24
routes:
- to: 192.168.100.0/24
via: 192.168.100.1
table: 252
routing-policy:
- from: 192.168.100.0/24
table: 252
Il en résulte les routes suivantes à partir de ip r s
.
default via 10.10.10.1 dev enp0s3 proto static
10.10.10.0/24 dev enp0s3 proto kernel scope link src 10.10.10.140
192.168.100.0/24 dev enp0s8 proto kernel scope link src 192.168.100.140