使用谷歌应用程序引擎向防火墙后面的设备启动消息



我想使用谷歌应用程序引擎向防火墙/路由器/NAT后面的设备发起http流量。这些设备将接收来自GAE的命令。我可以让设备轮询GAE以寻找新消息,但这需要大量流量。或者,我可以尝试永久打开连接,但这是非常昂贵和糟糕的。

设备将没有静态IP地址。然而,他们将定期与谷歌应用程序引擎通信,然后设备可以监听他们刚刚为任何传入通信打开的端口。如果我理解TCP打孔,因为设备已经向GAE发送了流量,他们将分配一个端口,该端口转换为设备正在侦听的端口,相应地,GAE在防火墙中有一个可用的孔。

但是,为了让GAE向设备发送流量,它需要知道设备在其公共IP上分配的端口。问题就在这里,因为GAE不能为传入流量提供源/远程端口。在不知道设备刚刚使用的端口的情况下,我无法向设备发送除http响应消息之外的任何其他消息。我实际上无法向该设备发起http/tcp消息。

那么,有人知道获得GAE传入源/远程端口的方法吗?或者知道启动防火墙后设备流量的另一种方法吗?

TL;DR:你到底是如何获得发送到GAE应用程序的http消息的远程端口的?

由于不赞成使用安全数据连接器,因此最好的选择是部署一个代理传入请求的服务。您有许多选项,如配置防火墙和设置端口转发或apache反向代理。

如果你的内部地址发生了变化,那么这也是处理这个问题的地方。例如,您可以让DHCP服务器触发您的apache反向代理中的配置更改。

对于未来的搜索者来说,要跟进koma的响应,这里是nginx组合反向代理和正向代理的配置,应该可以做到这一点。这些设备在端口80上向其发送所有流量,端口80被反向代理到应用程序引擎。相反,应用程序引擎使用端口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;
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新