Usando 2 adaptadores ethernet en una red local, la respuesta de ping no se muestra

0

Tengo una computadora portátil con Ubuntu 15.10. Aquí hay un adaptador de red integrado al que agregué otro a través de USB. Ahora tengo dos interfaces de red que se muestran cuando escribo ifconfig. Luego los configuré a ambos con una IP estática: eno0 -> 192.168.0.21 (nic incorporado) eno1 -> 192.168.0.22 (USB-nic)

Ambos adaptadores están directamente en una PC de destino diferente con un cable Ethernet: 192.168.0.21 -> 192.168.0.1 (PC de destino 1) 192.168.0.22 -> 192.168.0.2 (PC de destino 2)

A continuación, tengo un script de Python para enviar paquetes UDP desde la computadora portátil a la PC de destino:

import socket
import time
#create socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind("192.168.0.21", 2000)
sock.sendto("test", ("192.168.0.1", 2000))

Esto funciona si solo hay un adaptador conectado. Cuando ambos adaptadores están conectados, esto solo funcionará para la interfaz que se conectó primero. Luego intenté enviar un ping a través de la interfaz que no funciona. Digamos que la interfaz eno0 está funcionando y puede enviar con éxito paquetes UDP a través del script Python, entonces esto no funcionará:

ping -I eno1 192.168.0.2

Muestra que los paquetes salen de la PC, y a través de Wireshark puedo verlos saliendo del nic, incluso puedo ver la PC de destino enviando una respuesta, pero en el término no aparece y al abortar con ctrl + c veo que 5 paquetes han sido enviados y todos se perdieron. Hacer ping a través de eno0 funciona perfectamente bien para la PC de destino.

¿Cómo puedo solucionar esto?

Brilsmurfffje
fuente
1
Usar múltiples interfaces de red simultáneamente en Linux no es tan sencillo como eso. Requiere configurar una tabla de enrutamiento separada para cada una de las interfaces askubuntu.com/a/151966/20381 Mientras esté en eso, eche un vistazo también al proyecto de kernel multirruta
Flint

Respuestas:

0

Creo que funciona como se supone que debe hacerlo. Creo que tienes problemas con la tabla de enrutamiento.

Cuando conecta el primer adaptador, el enrutamiento predeterminado se configura a través de este adaptador. Cuando conecta otro, el enrutamiento predeterminado ya está configurado para el primer adaptador. El segundo adaptador no funciona porque no hay enrutamiento que lo use. Trate de escribir /sbin/routedel /sbin/route -n. Verá cómo se enrutan los paquetes.

Agregaría rutas para sus dos conexiones, porque si entiendo correctamente, solo desea enviar sus paquetes UDP a través de estas conexiones. ¿Qué pasa con otro tráfico? Pruébalo de esta manera:

/sbin/route add -net 192.168.0.1 netmask 255.255.255.255 dev eno0
/sbin/route add -net 192.168.0.2 netmask 255.255.255.255 dev eno1

De esa manera, especifica que el tráfico para 192.168.0.1 debe ir a través de eno0 y el tráfico para 192.168.0.2 a través de eno2. Si solo necesita estos para las conexiones, debería funcionar. Sin embargo, si tiene otra conexión y quiere que funcionen también. Debería asegurarse de que otras rutas también sean correctas.

Recomendaría usar diferentes rangos de direcciones para dos conexiones. De esa manera no necesita cambiar las tablas de enrutamiento manualmente:

eno0: 192.168.0.21, PC1: 192.168.0.1
eno1: 192.168.1.22, PC2: 192.168.1.2
netmask: 255.255.255.0 for all connections
default gateway is not important in this case, because pairs are on the same network range
nadie
fuente
Esto funcionó para mí, muchas gracias por su ayuda!
Brilsmurfffje