【问题标题】:How to let Server Notify Client Behind Firewall如何让服务器在防火墙后面通知客户端
【发布时间】:2011-01-02 18:51:45
【问题描述】:

我有一个案例,我在互联网上有一个面向公众的服务,我希望服务器能够在需要时联系位于正常家庭网络中的专门设计的嵌入式设备。

我知道设备可以轮询服务器以获取更新等,但是 1) 服务器执行某些操作与设备轮询更新之间会有延迟,并且 2) 会有很多无用的流量(随着时间的推移)生成。

有人对如何做到这一点有任何建议吗?我最初的想法是让嵌入式设备使用 UPNP 尝试在家庭路由器中生成端口转发规则,然后将该端口注册到服务器。然后,服务器可以向该地址生成一个 HTTP 请求(http 以便将其路由等而不会被防火墙等阻止)。如果设备无法创建转发规则,则会重新使用轮询方法。

这听起来对吗?任何人有任何经验可以分享这种事情吗? (客户端将是嵌入式 linux 上的 c++,服务器 .NET)。

【问题讨论】:

  • 坦率地说,考虑到有多少人/公司不允许或以其他方式阻止 UPNP,甚至可能不值得实施 upnp 解决方案。

标签: .net http client-server upnp portforwarding


【解决方案1】:

很大程度上取决于您认为这将用于多少设备/网络,以及您对其软件/配置拥有何种控制权。

既然您在谈论 UPNP,这意味着会有很多客户端网络 - 除非您可以控制路由器配置/硬件,否则要让 UPNP 解决方案可靠地工作会遇到很多问题。

此外,您提到端口转发,这表明嵌入式设备将没有真实的 IP 地址。

您说您想使用 HTTP 来避免它被阻止,但是大多数防火墙/路由器等并不那么聪明 - 阻止纯粹是在端口号上完成的。如果您在 NAT 路由器后面有多个设备,那么您将不得不使用非标准端口来寻址这些设备,除非您实施控制器来根据 HTTP 内容中继请求。

我能看到的唯一实用的解决方案是让嵌入式设备连接到服务器并等待事件发生。

C.

【讨论】:

  • 干杯。我将为此放弃 UPNP - 仍然在设备上实现功能,但将其保留为“高级选项”,供用户\管理员手动配置路由器上的端口转发等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多