17 votos

Ubuntu Linux - varias tarjetas de red, LAN mismo... respuestas ARP siempre una sola NIC

Tenemos de AT&T U-Verse servicio de internet, que tiene una muy estúpido puerta de enlace DSL.

Tenemos 5 IPs (máscara de red 248), pero la puerta de enlace es incapaz de hacer algo distinto de una única IP -> dirección MAC de asignación.

Tenemos un único firewall de la máquina, y redirigimos a los diferentes IP/puerto combos a diferentes lugares dentro de una DMZ.

Nuestra solución hasta ahora es tener una máquina virtual de VMWare en el servidor de seguridad con 4 NICs en ella, para obtener los otros 4 direcciones IP... sin embargo, tenemos un problema.

La puerta de enlace es, básicamente, hacer un ARP ping para ver si la IP es de responder a las expectativas de MAC. Con 4 NICs todos en la misma LAN, linux está respondiendo a las peticiones ARP para TODAS las IPs mediante una sola interfaz. Eso no es lo que la puerta de enlace está esperando, y ensuciando las otras 3 tarjetas de red. La puerta de enlace se niega a enrutar el tráfico entrante de IPs donde la ARP ping resultados no son los esperados MAC.

¿Cómo podemos obtener la ARP respuestas para eth0 IP de salir eth0, eth1 IP de salir eth1, etc?

EDITAR

Christopher Cashell la respuesta no funciona en esta situación. Yo tenía grandes esperanzas de la lectura, pero... no.

EDIT 2

Solucionado! Véase mi respuesta a continuación.

15voto

Ryan B. Lynch Puntos 1536

Su solución elegida funciona, pero hay alternativas que no impliquen el arptables. (Christopher Cashell estaba en el camino correcto, originalmente, pero se fue por aunque sea un poco.)

En pocas palabras, usted necesita para configurar estos parámetros:

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

Estos deben estar disponibles cuando se ejecuta una moderna serie 2.6 del kernel de Linux. Compruebe y asegúrese de que '/proc/sys/net/ipv4/conf/*/arp_announce' y /proc/sys/net/ipv4/conf/*/arp_ignore' existen en el sistema.

El 'arp_filter' parámetro sólo funciona cuando sus varias direcciones IP compartir un segmento de la LAN pero el uso de subred IP diferente. Si comparten la IP de subred, también, debe utilizar 'arp_ignore' y 'arp_announce', como en el anterior.

(Yo creo que usted también puede necesitar para establecer 'arp_filter' a '0', también.)

10voto

David Aldridge Puntos 27624

Bueno, aquí está la solución. En primer lugar, un resumen:

Aquí está mi red básica del plan:

 eth0 10.10.10.2 netmask 255.255.255.248
 eth1 10.10.10.3 netmask 255.255.255.248
 eth2 10.10.10.4 netmask 255.255.255.248
 eth3 10.10.10.5 netmask 255.255.255.248

Todas las interfaces se superponen. Esto es técnicamente incorrecto, y el origen de todos mis males... pero tengo que hacerlo porque de este mudo de puerta de enlace residencial.

En primer lugar, de difusión de las peticiones ARP ir a todos esos. Desde las 4 IPs son válidas las direcciones locales, todos los 4 interfaces van a tratar de responder.

1) instalar arptables. Agregar esta en algún lugar durante el arranque del sistema (/etc/rc.local aquí):

arptables -F INPUT
arptables -A INPUT -i eth0 --destination-ip ! 10.10.10.2 -j DROP
arptables -A INPUT -i eth1 --destination-ip ! 10.10.10.3 -j DROP
arptables -A INPUT -i eth2 --destination-ip ! 10.10.10.4 -j DROP
arptables -A INPUT -i eth3 --destination-ip ! 10.10.10.5 -j DROP

Esto evitará las emisiones de entrar en la interfaz equivocada. Así, la interfaz correcta ahora va a ser la única respuesta.

Que por sí sola no es suficiente. El siguiente bit es una tabla ARP problema. La solicitud de PC probablemente ya tiene una entrada de la tabla ARP, y así que Linux va a utilizar la interfaz asociado con eso. Hasta que la entrada de la tabla ARP caduca, va a estar tratando de enviar respuestas ARP utilizar esa entrada de la interfaz, no al que está asociado con la solicitud de ARP.

El sysctl opción *rp_filter* parece estar rechazando saliente de los paquetes de respuesta ARP si están en la interfaz equivocada. Así que...

2) Desactivar *rp_filter*.

En Debian/Ubuntu, esto significa que comentar los dos *rp_filter* líneas en /etc/sysctl.d/10-red de seguridad.conf.

Esta opción es habilitada por una razón... es decir, para ayudar a prevenir la interfaz de ataques de suplantación de identidad. He leído que se comprueba que el paquete es legal para la interfaz está entrando o saliendo de (por el intercambio de MACs y las IPs y ver si todavía se enrutan a través de la misma interfaz). Así que, normalmente sería una mala idea para apagarlo. En mi caso, todas las interfaces están en la misma red... por lo que la verificación no importa realmente.

Si añado otra interfaz y la necesidad de la protección contra la falsificación, tal vez puede elaborar algunos arptables/iptables entradas a hacer lo mismo.

5voto

Android Eve Puntos 545

Esto tiene que ver con la forma en que Linux maneja IPs y Nic. Básicamente, se trata de una dirección IP como si pertenece a la caja, y no solo a la NIC. El resultado es que usted puede conseguir respuestas ARP de direcciones IP en las interfaces que no se pueden esperar.

La solución es un sysctl opción. Por lo que recuerdo, lo que estamos buscando es:

net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1

Que va a solucionar el problema para usted. Sólo añadir los a /etc/sysctl.conf y ejecutar 'sysctl -p' (o ejecutar cada línea como argumento a 'sysctl -w'.

Esto hará que Linux sólo a responder a las peticiones ARP en la interfaz que una dirección IP se asigna realmente.

1voto

kate Puntos 21

La aceptación de la respuesta en combinación con este: http://www.linuxquestions.org/questions/linux-networking-3/multiple-interfaces-all-traffic-flows-through-just-one-538701/

donde las rutas estáticas se utilizan para comunicarse con sólo deseado IPs sobre ciertas interfaces, crea una potente y sencilla solución a un problema similar al que tenía.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: