【问题标题】:Making a home server reachable (IPv4, IPv6, DS-Lite)使家庭服务器可访问(IPv4、IPv6、DS-Lite)
【发布时间】: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


【解决方案1】:

从互联网连接到家中的服务器很困难。 IPv6 尚未在任何地方都可用,而使用 IPv4,您并不总是有可用的公共地址(具有多个 NAT 层或 DS-Lite)。

目前唯一可靠的解决方案是拥有一个可公开访问的服务器作为集合点,并让 home box 维护该服务器的永久收藏。移动设备(也可能在 NAT 之后)然后可以通过服务器到达 home box 或设置 STUN/TURN 样式的连接。

【讨论】:

  • 我猜你是对的。如果家庭服务器保持连接,那么在路由器/防火墙中戳一个洞也可以解决。肯定有一个现有的服务可以做到这一点吗?
  • 在 NAT 上打孔最好使用 STUN 和 TURN
  • 谢谢,这是一个很好的起点。然而,TURN 似乎并不是一个真正的选择,因为它只支持中继和对等方之间的 UDP。
【解决方案2】:

感谢其他回复,我有了找到一些现有解决方案的起点:ngrok 和 localtunnel 通过将专用子域映射到每个主服务器并基于 HTTP(S) GET 调度请求来解决问题要求。

后者是一个开源项目,server,还有一个javascript client在Github上。

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多