Je travaille sur une implémentation MirrorLink pour le Google Pixel (Android 8.1.0). Je dois implémenter un serveur DHCP ; cependant, les applications Android ne peuvent pas écouter sur les ports réservés.
L'application Android écoute les diffusions DHCP DISCOVERY sur le port UDP 6700. Mon intention est de rediriger le trafic DHCP vers le port 6700 afin que mon application puisse gérer la demande DHCP.
Je ne parviens pas à trouver une combinaison de règles iptables qui permettent au trafic DHCP d'atteindre mon application. Si j'envoie directement une découverte DHCP sur le port 6700, je reçois le trafic.
# 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
J'ai essayé diverses combinaisons des règles suivantes :
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
Je soupçonne soit une grave mécompréhension de la configuration iptables (probable), des considérations spéciales pour le trafic DHCP, ou des conflits spécifiques à Android/au périphérique.
Je serais reconnaissant pour toute aide pour que cela fonctionne. C'est le dernier obstacle à surmonter pour réaliser l'implémentation MirrorLink.
J'ai un accès root au périphérique au cas où cela ne serait pas clair.
Pour une clarté absolue - le périphérique MirrorLink envoie une requête DHCP DISCOVERY (port UDP 67) vers le périphérique Android via une connexion ethernet USB (CDC-NCM). Le Google Pixel et probablement la plupart des appareils AOSP exposent cette interface en tant que ncm0. Les applications Android ne peuvent pas écouter sur les ports réservés bien connus de l'IANA, d'où la nécessité de rediriger les ports internes vers la plage 1024 - 49151. Le périphérique Android est responsable de faire fonctionner un serveur DHCP et de renvoyer une offre DHCP au périphérique MirrorLink.