2015-06-21 82 views
4

我打算向客户发送“家庭服务器”类型的设备,与他们的(Android或iPhone)智能手机进行通信。问题在于,根据他们的互联网服务提供商,客户没有外部可达的IPv4地址(DS-lite隧道),因此智能手机不能仅使用IPv4 DNS记录来查找服务器。使家庭服务器可达(IPv4,IPv6,DS-Lite)

替代我能想到的:

  • 让服务器使用IPv6 DynDNS的服务,让IPv6的需要优先于IPv4的智能手机上。由于该解决方案应该可以在客户无需注册DynDNS服务的情况下运行,所以我还没有找到任何允许我这样做的服务。

  • 建立我自己的“目录服务器”,这样家庭服务器就会间隔地注册它的序列号 - 与DynDNS类似,但通过HTTPS在应用层上。客户可以简单地将序列号输入到应用程序中以查找服务器。由于认证/加密要求,这个解决方案比我喜欢的更难以实现。

有关如何使主服务器可达的任何其他想法?我真的很想避免运行我自己的“云服务”。某种类型的点对点网络发现,也许?

[更新:]这是什么,我基本上是在寻找:

Home server       Relay   DynDNS  Client 
|          |    |    | 
|-------- open tunnel to port 80 ----->|    |    | 
|<-success, listening on 192.0.2.1:80 -|    |    | 
|          |    |    | 
|----- Register "my.ddns.net" ---------------------->|    | 
|<------------ "my.ddns.net" is now 192.0.2.1 -------|    | 
|          |    |    | 
|          |<- GET http://my.ddns.net -| 
|<------- GET http://my.ddns.net ----|    |    | 
|--- HTTP response ------------------->|    |    | 
|          |----- HTTP response ------>| 
+1

我不完全清楚你想要解决哪个问题。查找具有IPv6地址的设备的IPv6地址是DNS旨在执行的操作。为用户创建您自己的动态DNS服务并不难,尤其是如果要解决的设备正在运行您的代码,那就更是如此。获取可能只有IPv4连接到仅具有IPv6的服务器的客户端可能会非常棘手。为了回答以后,您需要提供更多关于您需求的信息。随时在聊天消息中通知我,因为它可能需要几次往返才能澄清。 – kasperd

+0

谢谢,我更新了我的问题,希望能更好地解释它。这个问题还不清楚,因为我不知道我在寻找什么 - 我只知道我希望客户端能够与家庭服务器交谈,而不管家庭服务器是否位于防火墙/ NAT/DS lite之后隧道。 – knipknap

+1

该图中的“Relay”是什么?这是一个现有的服务还是你想要实现的东西? – kasperd

回答

2

制作在一个家庭从互联网到服务器的连接是困难的。 IPv6在任何地方都不可用,并且IPv4并不总是有可用的公共地址(有多个NAT层或DS-Lite)。

今天唯一可靠的解决方案是拥有一个公共可达的服务器作为集合点,让归属盒永久保存到该服务器。移动设备(也可能位于NAT后面)可以通过服务器到达主机箱或设置STUN/TURN样式的连接。

+0

IPv6(可能与PCP)将使这一切变得如此简单.. –

+0

我想你是对的。如果家庭服务器维持连接,则也可以解决路由器/防火墙的问题。当然,必须有一个现有的服务来做到这一点? – knipknap

+1

在NAT中打孔最好用STUN和TURN –

1

多亏了其他答复,我有出发点找到了一些现有的解决方案:ngroklocaltunnel由专门的子域映射到每个家庭服务器,以及基于HTTP请求分派(S)GET请求解决问题。

后者是一个开源项目,并且server以及javascript client在Github上。