Tráfico de red separado en dos interfaces de red

11

¿Podría prestar su experiencia para comprender cómo configurar la separación del tráfico de red en dos interfaces de red?

Según tengo entendido hasta ahora, las rutas estáticas se usan para el tráfico de red que no está diseñado para usar una puerta de enlace predeterminada. La puerta de enlace predeterminada se usa para todo el tráfico que no está destinado a la red local y para el que no se ha especificado una ruta preferida en una tabla de enrutamiento.

El escenario es el siguiente.

  • Cada computadora en la red tiene dos tarjetas de red.
  • La interfaz de producción para cada uno es eth0(GW = 10.10.10.1).
  • La interfaz de gestión para cada uno es eth1(GW = 192.168.100.1).
  • El tráfico de producción y gestión debe estar totalmente separado.

He publicado, a continuación, qué cosas he probado con Debian Wheezy. Y mi problema es que, aunque tengo hosts configurados de tal manera que se comunican en ambas interfaces, los hosts individuales parecen "escuchar" el tráfico en la interfaz incorrecta. Por ejemplo:

Anfitrión 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)

Desde el host 140, que ejecuta este comando: tcpdump -i eth0. En una sesión separada en el host 140, ejecuto 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

¿Por qué veo el resultado anterior activado eth0? Creo que solo debería ver el tráfico para 10.10.10.140. También veo esto eth1, como se esperaba:

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

Si hago ping desde el Host 50 (los mismos ifconfigresultados, solo un último quad diferente), entonces eth0estoy en silencio y veo el eco ICMP activado eth1, como se esperaba.

Me gustaría entender cómo configurar cada interfaz para manejar solo el tráfico del que es responsable en dos variedades principales de Linux. Creo que ya casi estoy allí, pero me falta algo que parece que no puedo encontrar.

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

Sé que una solución para Debian debería ser buena tanto para Wheezy como para Jessie, y que una solución para un EL debería ser la misma para todas las versiones de EL 6.x. Me gustaría evitar usar un script RC para ejecutar comandos, optando por usar los archivos de configuración.

En Debian, los archivos de configuración relevantes que conozco son:

  • /etc/network/interfaces

En EL 6.x, los archivos de configuración relevantes que conozco son:

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

Mi /etc/network/interfacesarchivo "Jessie" de 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

Creo que netstat -anrpodría ilustrar el 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
Christopher
fuente
checkiptabels -L -t nat
PersianGulf

Respuestas:

7

Me encantaría saber más sobre este tema para refinar la configuración para que sea lo mejor posible, pero esto es lo que tengo hasta ahora. Incluso sin habilitar el filtrado ARP en todas las interfaces de red ( net.ipv4.conf.all.arp_filter = 0), como lo menciona @spuk, el tráfico parece estar completamente separado en esta configuración.

El archivo, /etc/iproute2/rt_tableses el mismo en EL 6.xy DEB 7/8, al menos. Este es el archivo que crea una tabla de enrutamiento con nombre para rutas estáticas.

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

Arriba, el número de la ruta estática nombrada, 1, es esencialmente arbitrario; o, cada ruta estática obtiene su propio número único entre 1 y 252.

El archivo, /etc/network/interfacesen DEB 7/8, al menos:

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

El resultado de ip route showen 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

El /etc/sysconfig/networkarchivo EL 6.x :

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1

Arriba, GATEWAY es la ruta predeterminada. A continuación, si BOOTPROTOCOL estaba configurado en DHCP, la ruta predeterminada se adquiriría de DHCP.

EL /etc/sysconfig/network-scripts/ifcfg-eth0archivo EL 6.x , sin "HWADDR" y "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

EL /etc/sysconfig/network-scripts/ifcfg-eth1archivo EL 6.x , sin "HWADDR" y "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

El /etc/sysconfig/network-scripts/route-eth1archivo EL 6.x :

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

El /etc/sysconfig/network-scripts/rule-eth1archivo EL 6.x :

from 192.168.100.0/24 lookup mgmt

El resultado de ip route showen 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
Christopher
fuente
4

No he leído completamente toda su publicación (lo siento, realmente no puedo pasar el tiempo en este momento), pero creo que puede estar relacionado con la forma en que Linux implementa el modelo de host IP :

... La implementación de IPv4 en Linux se predetermina al modelo de host débil. ...

De esa misma página:

... Si la pila de IP se implementa con un modelo de host débil, acepta cualquier paquete destinado localmente, independientemente de la interfaz de red en la que se recibió el paquete. ...

Es decir, en Linux, por defecto, las direcciones IP "pertenecen al host", no estrictamente "a la interfaz". Puede cambiar ese comportamiento a través de la arp_filter, rp_filter, arp_announce, arp_ignoresysctls (ya ha recibido LVS: El problema de ARP , visto aquí ). Además, vea ip-sysctl.txt .

spuk
fuente
Este artículo funcionó bien para mí: sivel.net/2006/12/linux-multi-homing
Richard Gomes