3

Google App Engine を使用して、ファイアウォール/ルーター/NAT の背後にあるデバイスへの http トラフィックを開始したいと考えています。これらのデバイスは、GAE からコマンドを受信します。新しいメッセージを探すためにデバイスに GAE をポーリングさせることもできますが、これは大量のトラフィックを使用します。または、接続を永続的に開いたままにすることもできますが、それは非常に高価で悪いことです。

デバイスには静的 IP アドレスはありません。ただし、Google App Engine と定期的に通信するため、デバイスは着信通信用に開いたばかりのポートをリッスンできます。デバイスがすでにトラフィックを GAE に送信しているため、 TCP ホール パンチングを理解していれば、デバイスがリッスンしているポートに変換されるポートが割り当てられ、対応して GAE はファイアウォールで利用可能なホールを持っています。

ただし、GAE がデバイスにトラフィックを送信するには、パブリック IP でデバイスに割り当てられたポートを認識する必要があります。ここに問題があります。GAE は着信トラフィック用のソース/リモート ポートを利用できないからです。デバイスが使用したばかりのポートがわからないため、http 応答メッセージ以外はデバイスに送信できません。そのデバイスへの http/tcp メッセージを実際に開始することはできません。

では、GAE の着信ソース/リモート ポートを取得する方法を知っている人、またはファイアウォールの背後にあるデバイスへのトラフィックを開始する別の方法を知っている人はいますか?

TL;DR: GAE 上のアプリに送信される HTTP メッセージのリモート ポートを取得するにはどうすればよいですか?

4

2 に答える 2

1

将来の検索者のために、ここで koma の応答をフォローアップするために、リバース プロキシとフォワード プロキシを組み合わせた nginx の構成を示します。デバイスはすべてのトラフィックをポート 80 で送信し、App Engine にリバース プロキシされます。反対に、App Engine はポート 8080 のフォワード プロキシを使用して、ファイアウォールで保護されたデバイスにリクエストを送信し、すべての GAE トラフィックが同じ IP から来ているように見せます。リモート ip とリモート ポートは、プロキシされた要求のヘッダーとして追加されます。

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;
        }
    }

}
于 2013-07-03T23:28:40.003 に答える
1

安全なデータ コネクタは非推奨であるため、着信要求をプロキシするサービスをデプロイするのが最善の方法です。ファイアウォールの構成や、ポート転送や apache リバース プロキシのセットアップなど、さまざまなオプションがあります。

内部アドレスが変更された場合、それはこれに対処する場所でもあります。たとえば、Apache リバース プロキシの構成変更を DHCP サーバーにトリガーさせることができます。

于 2013-07-02T19:50:15.033 に答える