2016-07-08 1 views
2

Maintenant que Apple a changé son environnement d'évaluation en un réseau IPv6 seulement, j'ai rencontré des problèmes avec mon application pendant les tests.Problème d'environnement iOS NAT64 IPv6

L'application nécessite que l'utilisateur saisisse l'adresse IP du serveur/système, le port (4401) et les informations d'identification pour accéder à l'application. En suivant les directives fournies par Apple, j'ai mis en place un environnement NAT64 pour tester la compatibilité de mon application. Running iOS 9.3.2 sur un iphone 5s.

Mon environnement de travail comporte plusieurs réseaux internes. J'ai connecté mon iMac au serveur interne (10.10.50.XX) via Ethernet qui a aussi une adresse IP externe qui est ce que je fournis à Apple. Le réseau 50 ne fonctionne pas derrière un proxy, mais certains sites sont filtrés, mais peuvent accéder en confirmant. J'ai ensuite partagé ma connexion Ethernet via WiFI.

J'ai connecté l'appareil et j'avais accès à Internet avec les mêmes pages filtrées. L'appareil reçoit une adresse de liaison locale 169.254.XX.XX. De quoi ive lire mon appareil se connecte au réseau IPv6 seulement correctement, comme l'iphone ne montre pas l'adresse IPv6 seulement le lien local.

Si je suis correctement connecté au réseau IPv6 partagé, le problème que je rencontre est la connexion à mon serveur sur le réseau 50 à partir de mon application. L'application échoue quand jamais j'essaye de me connecter au réseau 10.10.50.XX ou externe (compréhensible parce que mon imac est sur le réseau interne 50).

Test de l'application en utilisant IPv4 avec un routeur sans fil qui est connecté au réseau 50 fonctionne parfaitement.Je pense que c'est un problème avec l'adresse de lien local ne pouvant pas voir le réseau 50 ou quelque chose.

Voici quelques informations de base sur la façon dont je me connecte au serveur. L'utilisateur entre toutes les informations d'identification ainsi que l'adresse IP et le port du serveur auquel il souhaite se connecter. L'application l'enregistre en tant que texte (utf-8) et utilise boost shared_ptr pour l'envoyer à la classe de connexion cpp qui valide les informations d'identification et fournit un accès à l'utilisateur. Cette classe de connexion cpp gère la connexion, la synchronisation, la journalisation, les requêtes et les réponses du serveur.

Est-il possible d'accéder en quelque sorte au réseau 50, en utilisant l'option de partage Internet NAT64?

+0

Comment votre "classe de connexion cpp gère-t-elle la connexion, la synchronisation, la journalisation, les requêtes et les réponses du serveur"? – user102008

Répondre

1

Si vous transmettez une adresse IP directement à votre réseau lib, alors non. Lorsque votre périphérique est sur le côté IPv6 uniquement du NAT64, l'adresse IPv4 du serveur est inutile.

Vous avez certainement besoin d'un nom DNS pour le serveur que vous essayez d'atteindre. Le NAT64 repose d'abord sur DNS64 pour créer des adresses IPv6 pour votre application lorsque le serveur est uniquement IPv4. Ces adresses synthétisées contiennent les adresses IPv4 pour le serveur, donnant au NAT64 les informations dont il a besoin pour traduire IPv6 en IPv4.

Mise à jour de ceci pour ajouter: comme suggéré par l'utilisateur102008 dans le fil de commentaire attaché à cette réponse, vous pouvez également passer la chaîne littérale IPv4 à getaddrinfo() (voir code listing 10-1 on this page). Quand vous êtes derrière un NAT64, une adresse IPv6 synthétisée devrait être parmi les résultats retournés par cet appel. Le NAT64 traduira de cette adresse en IPv4 pour atteindre l'hôte que vous avez spécifié. Dans ce cas, si le système connaît le préfixe correct à utiliser pour NAT64, un nom d'hôte n'est pas nécessaire.

+0

"Vous avez presque certainement besoin d'un nom DNS pour le serveur que vous essayez d'atteindre." Ce n'est pas vrai. Vous pouvez vous connecter aux littéraux d'adresses IPv4 à partir de réseaux IPv6 uniquement. – user102008

+0

Seulement si votre application/lib connaît le préfixe NAT64 utilisé, et votre app/lib synthétise les adresses IPv6 pour atteindre le NAT64 tout comme DNS64. Ensuite, vous pouvez envoyer des paquets IPv6 au NAT64, et le NAT64 peut traduire en IPv4. Vous ne pouvez certainement pas placer un paquet IPv4 dans un réseau IPv6 uniquement et vous attendre à ce que cela se produise. – Stephen

+0

Ou demandez aux API système de le synthétiser pour vous. Mon point est, un nom d'hôte n'est pas nécessaire. – user102008