2 votos

Redirección de puertos DHCP en Android

Estoy trabajando en una implementación de MirrorLink para el Google Pixel (Android 8.1.0). Debo implementar un servidor DHCP; sin embargo, las aplicaciones Android no pueden escuchar en puertos reservados.

La aplicación Android está escuchando las emisiones de DHCP DISCOVERY en el puerto UDP 6700. Mi intención es reenviar el tráfico DHCP al puerto 6700 para que mi aplicación pueda manejar la solicitud DHCP.

No puedo encontrar una combinación de reglas iptables que den como resultado que el tráfico DHCP llegue a mi aplicación. Si envío un DHCP DISCOVERY directamente al puerto 6700 recibo el tráfico.

# iptables -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N bw_FORWARD
-N bw_INPUT
-N bw_OUTPUT
-N bw_costly_rmnet_data0
-N bw_costly_shared
-N bw_costly_tun0
-N bw_data_saver
-N bw_happy_box
-N bw_penalty_box
-N fw_FORWARD
-N fw_INPUT
-N fw_OUTPUT
-N fw_dozable
-N fw_powersave
-N fw_standby
-N natctrl_FORWARD
-N natctrl_tether_counters
-N nm_mdmprxy_doze_mode_skip
-N nm_mdmprxy_iface_pkt_fwder
-N oem_fwd
-N oem_out
-N st_OUTPUT
-N st_clear_caught
-N st_clear_detect
-N st_penalty_log
-N st_penalty_reject

# iptables -t nat -S

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N natctrl_nat_POSTROUTING
-N oem_nat_pre

He probado varias combinaciones de las siguientes reglas:

iptables -A INPUT -i ncm0 -p udp --dport 67 -J REDIRECT --to-port 6700
iptables -A FORWARD -i ncm0 -p udp --dport 6700 -j ACCEPT
iptables -A INPUT -i ncm0 -p udp --dport 6700 -j ACCEPT
iptables -A PREROUTING -t nat -i ncm0 -p udp --dport 67 -j REDIRECT --to-port 6700

Sospecho que se trata de un grave malentendido de la configuración de iptables (probablemente), consideraciones especiales para el tráfico DHCP o conflictos específicos de Android/dispositivo.

Agradecería cualquier ayuda para que esto funcione. Es la última barrera para lograr la implementación de MirrorLink.

Tengo acceso Root al dispositivo, por si no estaba ya claro.

Para mayor claridad, el dispositivo MirrorLink envía una solicitud de DHCP DISCOVERY (puerto UDP 67) al dispositivo Android a través de una conexión ethernet USB (CDC-NCM). El Google Pixel y probablemente la mayoría de los dispositivos AOSP exponen esta interfaz como ncm0 . Las aplicaciones Android no pueden escuchar en los puertos reservados bien conocidos por la IANA, de ahí la necesidad de redirigir el puerto interno al rango 1024 - 49151. El dispositivo Android es responsable de operar un servidor DHCP y devolver una oferta DHCP al dispositivo MirrorLink.

0voto

Chris Hutchinson Puntos 121

He resuelto este problema utilizando la redirección DNAT en lugar de la redirección de puertos, debido a algunas limitaciones de REDIRECT que implican el tráfico de difusión.

iptables -I INPUT -p udp --dport 67 -j ACCEPT
iptables -I INPUT -p udp --dport 6700 -j ACCEPT
iptables -I PREROUTING -t nat -i ncm0 -p udp -src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6700

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X