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.