3 votes

Utilisation de Google App Engine pour envoyer des messages à un appareil derrière un pare-feu

J'aimerais utiliser Google App Engine pour initier un trafic http vers des appareils qui seront derrière des pare-feu/routeurs/NAT. Ces appareils recevront des commandes de GAE. Je pourrais faire en sorte que les appareils interrogent GAE à la recherche de nouveaux messages, mais cela utilise beaucoup de trafic. Sinon, je pourrais essayer de maintenir une connexion ouverte en permanence, mais cela est très coûteux et mauvais.

Les appareils n'auront pas d'adresse IP statique. Cependant, ils communiqueront périodiquement avec Google App Engine et le périphérique pourra alors écouter le port qu'il vient d'ouvrir pour toute communication entrante. Si je comprends bien Perforation TCP Puisque les appareils ont déjà envoyé du trafic à GAE, ils auront un port assigné qui correspond au port que l'appareil écoute et, par conséquent, GAE a un trou disponible dans le pare-feu.

Cependant Pour que GAE puisse envoyer du trafic vers le dispositif, il doit connaître le port attribué au dispositif sur son IP public. C'est là que réside le problème, car GAE ne met pas à disposition le port source/à distance pour le trafic entrant. Sans connaître le port que le périphérique vient d'utiliser, je ne peux pas envoyer au périphérique autre chose que des messages de réponse http. Je ne peux pas réellement lancer des messages http/tcp vers ce périphérique.

Alors, quelqu'un connaît-il un moyen d'obtenir le port source/éloigné entrant pour GAE ou connaît-il un autre moyen d'initier le trafic vers des dispositifs derrière des pare-feu ?

TL;DR : Comment diable obtenir le port distant pour les messages http envoyés aux applications sur GAE ?

1voto

koma Points 6257

Depuis le connecteur de données sécurisé est déprécié, votre meilleure option est de déployer un service qui va proxyer les demandes entrantes. Vous avez un certain nombre d'options comme la configuration de votre pare-feu et la mise en place d'une redirection de port ou d'un proxy inverse Apache.

Si vos adresses internes changent, c'est également là qu'il faut s'en occuper. Par exemple, vous pouvez laisser le serveur DHCP déclencher un changement de configuration dans votre reverse proxy apache.

1voto

danwiding Points 107

Pour les futurs chercheurs, pour faire suite à la réponse de Koma, voici la configuration d'une combinaison nginx reverse proxy et forward proxy qui devrait faire l'affaire. Les appareils lui envoient tout leur trafic sur le port 80 qui est renvoyé par reverse proxy vers App Engine. A l'inverse, App Engine envoie des requêtes aux dispositifs pare-feu en utilisant le forward proxy sur le port 8080 afin que tout le trafic GAE semble provenir de la même IP. L'adresse IP distante et le port distant sont ajoutés en tant qu'en-têtes des requêtes proxy.

worker_processes  2;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    gzip  on;

    server {
        listen       8080;

        location / {
            resolver 8.8.8.8;
            proxy_pass http://$http_host$uri$is_args$args;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    server {
       listen      80;

       location / {
            proxy_pass  http://something.appspot.com;
            proxy_redirect off;
            proxy_buffering off;
            proxy_set_header        Host            something.appspot.com;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Real-Port     $remote_port;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X