动态子域名,但 IP 不同

动态子域名,但 IP 不同

我和我的团队正在创建一项服务,当用户请求时,它会动态创建一个新的服务器实例,每个新实例都有不同的 IP。问题是我通过 WebSockets 从客户端连接到该新创建的服务器。但我需要它获得 SSL 认证。所以我不能只使用 IP。

因此,我的想法是为每个服务器实例创建一个子域。这里唯一的问题是我需要子域能够非常快速地可用,但我不知道是否可以信任 DNS 传播时间。

有没有什么解决办法?比如说,我自己的路由服务器有一个通配符子域,然后根据它路由流量?我想我不能使用 Apache 或这类解决方案,因为我处理的不仅仅是 HTTP/S 流量。

答案1

您可能事先知道 IP 地址范围?您可以xxxxxx.dyn.example.com. IN A提前为网络创建一些模式。这样您就可以*.dyn.example.com对它们全部使用通配符证书,而不会出现 DNS 缓存引起的任何问题。

答案2

我最终使用了反向代理。在这种情况下特拉菲克正是我所需要的。

我做了一个修改配置文件的简单 API,它有一些很好的功能,比如在配置时请求 SSL 证书

以下是我最终使用的配置,以防有人需要类似的东西。

InsecureSkipVerify = true
defaultEntryPoints = ["https"]

[entryPoints]
    [entryPoints.https]
    address = ":443"
        [entryPoints.https.tls]

[acme]
dnsProvider = "dnsprovider"
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
acmeLogging = true
delayDontCheckDNS = 0
onHostRule = true

[frontends]
  [frontends.frontend0]
  backend = "backend0"
    [frontends.frontend0.routes.main]
    rule = "Host:din0.instance.mydomain.com"
[backends]
  [backends.backend0]
   [backends.backend0.servers.server1]
   url = "wss://165.227.200.126"

答案3

DNS 传播时间为不是真实的东西(大多数情况下)

取决于您对环境的控制程度:

  • 您的服务器实例的 IP 地址通常会从某些保留的 IP 范围中分配。
    只需在您的正向(理想情况下也包括反向)DNS 区域中填充一些相应可预测的样板主机名,用于这些范围内的每个 IP 地址:
    ip-10-9-8-7.instances.example.com. IN A 10.9.8.7
    并在实例模板中包含通配符证书*.instances.example.com.作为服务器证书。

  • 如果您事先确实不知道 IP 地址,也无法预先创建记录,那么您将依赖于主 DNS 服务器开始响应新创建的记录的响应速度,以及权威名称服务器将新创建的记录复制到彼此的速度。这是唯一重要的传播延迟,实际上取决于 DNS 实现,但可以接近即时。(注意:它也可能是手动更改过程,需要几天时间......)
    无论这些极端情况如何,当这在您的情况下还不够快时:您还可以将新分配的 IP 地址与样板主机名配对/etc/hosts......

相关内容