2013-07-02 4 views
3

Я бы хотел использовать Google App Engine для запуска http-трафика на устройствах, которые будут находиться за брандмауэрами/маршрутизаторами/NAT. Эти устройства будут получать команды от GAE. Я мог бы опросить устройства GAE для поиска новых сообщений, но это использует большой трафик. В качестве альтернативы, я мог бы попытаться открыть связь постоянно, но это очень дорого и плохо.Использование Google App Engine для запуска сообщений на устройство за брандмауэром

Устройства не будут иметь статических IP-адресов. Тем не менее, они будут периодически общаться с Google App Engine, и устройство может затем прослушать порт, который они только что открыли для любых входящих сообщений. Если я понимаю TCP Hole Punching, поскольку устройства уже отправили трафик на GAE, у них будет назначенный порт, который переводится в порт, который прослушивает устройство, и, соответственно, GAE имеет отверстие, доступное в брандмауэре.

Однако, для того чтобы GAE отправил трафик на устройство, ему необходимо знать порт назначения устройства на его общедоступном IP-адресе. Здесь лежит проблема, поскольку GAE не предоставляет источник/удаленный порт для входящего трафика. Не зная порта, которое только что использовало устройство, я не могу отправить устройству ничего, кроме сообщений ответа HTTP. Я не могу инициировать сообщения http/tcp на этом устройстве.

Итак, знает ли кто-нибудь о способе получения входящего источника/удаленного порта для GAE или знает альтернативный способ запуска трафика на устройства, расположенные за брандмауэрами?

TL; DR: Как вы получаете удаленный порт для сообщений HTTP, отправленных в приложения на GAE?

ответ

1

Поскольку secure data connector устарел, ваш лучший вариант - развернуть службу, которая будет проксировать входящие запросы. У вас есть несколько параметров, таких как настройка брандмауэра и перенастройка портов или обратный прокси-сервер Apache.

Если ваши внутренние адреса меняются, то это также место для решения этой проблемы. Например, вы можете позволить DHCP-серверу инициировать изменение конфигурации в вашем обратном прокси-сервере apache.

+0

Спасибо, это то, что я понял. И я не считал, что внутренние адреса меняются, что делает перфорирование отверстий не очень эффективным. Итак ... Я думаю прокси-сервер apache (double?) Для обоих GAE и устройств на EC2, который запрашивает запросы на брандмауэр и из брандмауэра. Указанный прокси-сервис добавит удаленный порт addr + в заголовок или как часть строки запроса, чтобы GAE мог запомнить, куда в конечном итоге отправить прокси-трафик. Имеет ли это смысл? – danwiding

1

Для будущих поисковиков, чтобы следить за ответом koma, здесь приведена конфигурация для обратного прокси-сервера nginx и прямого прокси-сервера, который должен делать трюк. Устройства отправляют весь свой трафик на порт 80, который обращается обратно к App Engine. Oppositely 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; 
     } 
    } 

} 
+0

Интересно, я взгляну на это, когда вернусь домой. –

+0

Как хедз-ап. В конце концов я отказался от подхода к пробиванию отверстий, когда у вас возникли трудности с сетевыми брандмауэрами. Использование постоянного соединения, такого как WebSockets, работает намного легче. – danwiding

+0

Вы имеете в виду, что вы используете клиенты websockets, все подключающиеся к веб-серверу? нет подключения к узлу (клиент к клиенту)? –

 Смежные вопросы

  • Нет связанных вопросов^_^