Android, dns, firewall, et ipv6

farid_h

<defunct>
Contributeur
Une question aux specialistes d'Android:

́Une des connexions IPv4/IPv6 que j'utilise sporadiquement est selectivement firewalled au niveau du router pour certains appareils: les clients recoivent une adresse IPv4 par DHCP et une adresse IPv6 par Router Advertisement et SLAAC, mais ne peuvent etablire que des connexions externes vers des IPv4 (regle administrative de firewall dans le router).

Le probleme que ca cause est que si un serveur est accessible aussi bien via IPv4 et IPv6 (c.a.d. si le DNS contient des AAAA records), et qu'on essaye d'y acceder via un de ces appareils filtres, il y a une latence enorme: il faut attendre que l'essai de connexion vers IPv6 echoue par timeout avant que l'application essaye IPv4, ce qui fonctionne immediatement.

Le probleme est que la plupart des OS preferent essayer IPv6 avant IPv4 quand ils detectent une adresse IPv6 globalement routable, pour accelerer l'adoption de IPv6.

Avec Linux, on peut changer la preference du resolver DNS getaddrinfo() en modifiant /etc/gai.conf pour dire: preferes IPv4 a IPv6. Seulement sous Android, il n'y a pas de /system/etc/gai.conf. Comment faire l'equivalent ici?

P.S.: je sais qu'on peut installer sur le router bind et filtrer les AAAA queries avec une option de bind, mais la, je ne suis pas l'admin. Et Unbound qui tourne sur ce router n'a pas cette option de filtrage. Il faut donc changer cote clients.

P.P.S.: pas besoin de rappeler que le router est mal configure et qu'il ne devrait pas envoyer d'addresse IPv6 globalement routable aux clients qui n'ont pas acces a IPv6 via firewall. J'en suis parfaitement conscient.

P.P.P.S.: je viens d'avoir une idee: si la firewall dans le router repondait a ces clients par un ICMP Host Unreachable au lieu de silencieusement detruire les packets IPv6,ca pourrait raccourcir les timeouts, non?

Any ideas?

@Sanid
 

farid_h

<defunct>
Contributeur
Bon, okay: l'admin a modifie a ma demande la regle du firewall de DROP a REJECT (c.a.d. envois un ICMP Host Unreachable au lieu da simplement jetter les packets a la poubelle), et ca marche. Ce n'est qu'un hack, mais c'est suffisant, meme si pas parfait.
 
Haut