【发布时间】:2015-09-07 02:06:34
【问题描述】:
我计划向客户提供一种“家庭服务器”类型的设备,该设备可以与他们的(Android 或 iPhone)智能手机进行通信。问题在于,根据他们的互联网服务提供商,客户没有外部可访问的 IPv4 地址(DS-lite 隧道),因此智能手机不能只使用 IPv4 DNS 记录来查找服务器。
我能想到的替代方案:
使服务器使用 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 ------>|
【问题讨论】:
-
我并不完全清楚您要解决哪个问题。查找具有 IPv6 地址的设备的 IPv6 地址是 DNS 的设计目的。为用户创建自己的动态 DNS 服务并不难,特别是如果要寻址的设备正在运行您的代码。让可能只有 IPv4 的客户端连接到只有 IPv6 的服务器可能会很棘手。要回答后者,您需要提供更多关于您的需求的信息。请随时在聊天中给我发消息,因为可能需要多次往返才能澄清。
-
该图中的
Relay是什么?这是一个现有的服务还是你想要实现的东西? -
如果你只需要HTTP支持,那么
Relay可以只使用一个IPv4地址来实现。我知道,因为我已经实现了such a service。我的具体实现需要Home server拥有IPv6,并且必须使用DNS 解析主机名。在这种情况下,Relay只有在Client位于纯 IPv4 网络上时才会涉及。如果Client也有IPv6,它将直接与Home server通信,而不涉及Relay。 -
如果您想自己实现
Relay,那么一种方法是让每个Home server打开到Relay的持久TCP 连接。它需要做的第一件事是通知Relay它正在使用什么名称。然后Relay可以在传入的HTTP 请求上使用Host标头将每个请求定向到正确的Home server。您也许可以使用 ssh 反向端口转发来进行Home server和Relay之间的通信。这减少了您需要实现的代码量。您可以依靠现有代码来处理最安全敏感的部分。 -
@kasperd 非常感谢您的宝贵见解和 Netiter!我肯定在传播这个词:) 也感谢其他人
标签: networking ipv6 ipv4 dyndns