Separare il traffico di rete su due interfacce di rete


11

Potresti prestare la tua esperienza per capire come configurare la separazione del traffico di rete su due interfacce di rete?

Come ho capito finora, i percorsi statici vengono utilizzati per il traffico di rete che non è progettato per utilizzare un gateway predefinito. Il gateway predefinito viene utilizzato per tutto il traffico che non è destinato alla rete locale e per il quale non è stato specificato alcun percorso preferito in una tabella di routing.

Lo scenario è il seguente.

  • Ogni computer nella rete ha due schede di rete.
  • L'interfaccia di produzione per ciascuno è eth0(GW = 10.10.10.1).
  • L'interfaccia di gestione per ciascuno è eth1(GW = 192.168.100.1).
  • Il traffico di produzione e gestione dovrebbe essere totalmente separato.

Di seguito ho pubblicato le cose che ho provato con Debian Wheezy. E il mio problema è che, sebbene io abbia host configurati in modo tale da comunicare su entrambe le interfacce, i singoli host sembrano "sentire" il traffico sull'interfaccia sbagliata. Per esempio:

Host 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)

Da host 140, eseguo questo comando: tcpdump -i eth0. In una sessione separata sull'host 140, eseguo 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

Perché vedo l'output sopra riportato eth0? Penso che dovrei vedere il traffico solo per il 10.10.10.140. Vedo anche questo eth1, come previsto:

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

Se eseguo il ping dall'Host 50 (stessi ifconfigrisultati - solo un ultimo quad diverso), allora eth0è silenzioso e vedo l'eco ICMP acceso eth1, come previsto.

Vorrei capire come configurare ciascuna interfaccia per gestire solo il traffico di cui è responsabile in due principali varietà Linux. Penso di essere quasi arrivato, ma mi manca qualcosa che proprio non riesco a trovare.

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

So che una soluzione per Debian dovrebbe essere buona sia per Wheezy che per Jessie, e che una soluzione per un EL dovrebbe essere la stessa per tutte le versioni di EL 6.x. Vorrei evitare di usare uno script RC per eseguire i comandi, optando invece per l'utilizzo dei file di configurazione.

In Debian i file di configurazione rilevanti che conosco sono:

  • /etc/network/interfaces

In EL 6.x, i file di configurazione rilevanti che conosco sono:

  • /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

Il mio /etc/network/interfacesfile "Jessie" di 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

Penso che netstat -anrpotrebbe illustrare il problema:

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

Risposte:


7

Mi piacerebbe saperne di più su questo argomento per affinare la configurazione in modo che sia la migliore possibile, ma ecco quello che ho finora. Anche senza abilitare il filtro ARP su tutte le interfacce di rete ( net.ipv4.conf.all.arp_filter = 0), come indicato da @spuk, il traffico sembra essere completamente separato in questa configurazione.

Il file, /etc/iproute2/rt_tablesè almeno lo stesso in EL 6.xe DEB 7/8. Questo è il file che crea una tabella di routing denominata per le route statiche.

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

Sopra, il numero della route statica denominata, 1, è essenzialmente arbitrario; oppure, ogni route statica ottiene il proprio numero univoco compreso tra 1 e 252.

Il file, /etc/network/interfacesin DEB 7/8, almeno:

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

Il risultato di ip route showsu 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

Il /etc/sysconfig/networkfile EL 6.x :

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1

Sopra, GATEWAY è la route predefinita. Di seguito, se BOOTPROTOCOL fosse impostato su DHCP, il percorso predefinito sarebbe stato acquisito da DHCP.

IL /etc/sysconfig/network-scripts/ifcfg-eth0file EL 6.x , senza "HWADDR" e "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

IL /etc/sysconfig/network-scripts/ifcfg-eth1file EL 6.x , senza "HWADDR" e "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

Il /etc/sysconfig/network-scripts/route-eth1file EL 6.x :

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

Il /etc/sysconfig/network-scripts/rule-eth1file EL 6.x :

from 192.168.100.0/24 lookup mgmt

Il risultato di ip route showsu 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

Non ho letto tutto il tuo post (mi dispiace, non posso davvero passare il tempo in questo momento), ma credo che potrebbe essere correlato al modo in cui Linux implementa il modello host IP :

... L'implementazione di IPv4 in Linux viene impostata automaticamente sul modello host debole. ...

Dalla stessa pagina:

... Se lo stack IP è implementato con un modello host debole, accetta qualsiasi pacchetto destinato a livello locale indipendentemente dall'interfaccia di rete su cui è stato ricevuto il pacchetto. ...

Cioè, in Linux, per impostazione predefinita, gli indirizzi IP "appartengono all'host", non strettamente "all'interfaccia". È possibile modificare questo comportamento tramite il arp_filter, rp_filter, arp_announce, arp_ignoresysctl (ottenuto da LVS: L'ARP problema , visto qui ). Inoltre, vedi ip-sysctl.txt .


Questo articolo ha funzionato bene per me: sivel.net/2006/12/linux-multi-homing
Richard Gomes
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.