Tengo una tablet Nexus y un USB-OTG + USB/ethernet conectado. He probado que el hardware funciona desactivando WIFI y configurando eth0 con
netcfg eth0 dhcp
ping, traceroute todo funciona como se esperaba.
Si en cambio dejo WIFI habilitado, pero luego hago un simple
ifconfig eth0 172.16.100.1 netmask 255.255.0.0 dev eth0
y conecte la red Ethernet por cable a una máquina configurada en 172.16.100.2 No puedo hacer ping.
# ifconfig wlan0
wlan0: ip 10.1.10.238 mask 255.255.0.0 flags [up broadcast running multicast]
# ifconfig eth0
eth0: ip 172.16.100.1 mask 255.255.0.0 flags [up broadcast running multicast]
# netcfg
<snip>
p2p0 UP 0.0.0.0/0 0x00001003 da:50:e6:2d:b2:14
eth0 UP 172.16.100.1/16 0x00001043 50:1a:c5:fd:83:dc
lo UP 127.0.0.1/8 0x00000049 00:00:00:00:00:00
wlan0 UP 10.1.10.238/16 0x00001043 d8:50:e6:2d:b2:14
# cat /proc/net/route
Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
wlan0 0000010A 00000000 0001 0 0 0 0000FFFF 0 0 0
eth0 000010AC 00000000 0001 0 0 0 0000FFFF 0 0 0
traceroute parece mostrar que los paquetes aún se están enrutando a través de 10.1.0.1 (wlan0)
# traceroute 172.16.100.2
traceroute to 172.16.100.2 (172.16.100.2), 30 hops max, 38 byte packets
1 10.1.0.1 (10.1.0.1) 1.648 ms 1.220 ms 1.526 ms
^C
La replicación manual de la ruta -net 172.16.0.0 no hace ninguna diferencia.
¿Qué me he perdido para configurar el enrutamiento correctamente?
¿Está interactuando la interfaz p2p0 de alguna manera inesperada?
En sistemas con dos interfaces (como este dispositivo Android con wlan0 y eth0), el enrutamiento no se configura automáticamente para usar dos puertas de enlace. Esta es la razón por la que 'traceroute' muestra que el tráfico que le gustaría salir en 'eth0' en realidad está saliendo en 'wlan0'.
Otra forma de confirmar esto es:
# ip route get 172.16.100.2
172.16.100.2 via 10.1.0.1 dev wlan0 <snip>
La solución es configurar múltiples rutas predeterminadas agregando una nueva tabla de enrutamiento para el tráfico en 'eth0' y luego agregando las reglas apropiadas al conjunto de reglas de enrutamiento. Consulte este artículo para ver un ejemplo. (Aunque el artículo describe un sistema Linux, los dos comandos que debe usar, a saber, 'ip route' y 'ip rule', están disponibles en Android).