SSL上的DNS循环

时间:2009-12-12 18:36:13

标签: ssl dns

我们正在添加第二个Web服务器以实现冗余和负载共享。所有连接都被强制为SSL,此时无法添加专用设备。

我想使用循环DNS,其中两个服务器使用不同的IP应答同一个域(我们有一个通配符SSL证书,所以没关系)。我可以让DNS以随机/循环顺序返回没问题。

使用SSL时这是一个错误的设置吗?

我们的用户模式是一致的 - 用户将始终如一地使用网络应用程序8-10​​小时。我们希望每个页面视图尽可能快,我担心的是用户可能经常在服务器之间切换,可能会否定任何SSL握手缓存/保持活动。

谢谢!

4 个答案:

答案 0 :(得分:2)

首先,SSL能够恢复较早的会话,因此在服务器之间进行翻转将使每个请求花费几百毫秒(如果多个客户端同时访问该站点,则会更长,因为这是我们正在谈论的CPU时间)

客户端是否真的会翻转取决于 - DNS“负载平衡”是一个繁琐的业务:

  • 如果您的许多用户使用相同的递归名称服务器,他们将获得相同的“第一个IP”,因此没有负载平衡
  • 如果DNS记录的TTL很高(几个小时),缓存名称服务器将存储特定的IP地址排列,直到它们到期为止(只要您的用户不是都使用相同的递归名称服务器,就会很好)
  • 如果您的用户配置了多个递归名称服务器,如果每个名称服务器都有不同的“第一个IP”(错误),则可能会翻转
  • 如果您没有删除“坏”记录和低TTL的机制,那么如果一台服务器出现故障,50%的客户端将获得“坏”服务器并且必须等待超时才能看到您的站点

正如您所看到的,取决于您是否更关注冗余/故障转移或负载平衡,存在各种权衡; DNS并不是真正最好的工具 - 你真的需要服务器使用反向代理或Heartbeat之类的东西来共享IP(假设你是基于Linux的)。

暂且不说:如果两个服务器都在回答同一个域,那么您不需要通配符证书,但如果您打算在多个服务器上使用证书,则CA通常会收取更多费用。

答案 1 :(得分:2)

TLDR:你会没事的。 SSL重新协商不应经常发生,以便最终用户注意到。

Rant从这里开始:

使用DNS进行负载分配是一个经常被误解的主题,导致了很多轶事证据和稻草人争论。我参加过太多这样的会议。

以下是我通常如何解决这些争论:

<哇>“哇,这听起来真的很开放[长时间戏剧性的停顿]但是谷歌使用它真的不会那么糟糕”

$host encrypted.google.com
encrypted.google.com is an alias for www3.l.google.com.
www3.l.google.com has address 74.125.224.195
www3.l.google.com has address 74.125.224.202
www3.l.google.com has address 74.125.224.193
www3.l.google.com has address 74.125.224.197
www3.l.google.com has address 74.125.224.207
www3.l.google.com has address 74.125.224.206
www3.l.google.com has address 74.125.224.203
www3.l.google.com has address 74.125.224.204
www3.l.google.com has address 74.125.224.196
www3.l.google.com has address 74.125.224.199
www3.l.google.com has address 74.125.224.201
www3.l.google.com has address 74.125.224.194
www3.l.google.com has address 74.125.224.192
www3.l.google.com has address 74.125.224.200
www3.l.google.com has address 74.125.224.205
www3.l.google.com has address 74.125.224.198

更新

此设置是多余的吗?

在工程意义上它本身并不是冗余的,因为如果其中一个ips失败,它将继续提供给客户,直到执行DNS区域更改并且所有下游缓存过期。话虽如此,大多数浏览器足够聪明,可以在这些情况下尝试另一个ip - reference

此外,系统可以很容易地设计出,而不是要求更改DNS区域以删除故障节点,而是通过简单的ip接管将故障实例的ip路由到服务设备。

此设置是否有弹性?

是的,通过最小化您的失败域来实现弹性。回到单个ip的示例故障(并且记住这些ips可能代表由数百台服务器甚至整个数据中心支持的负载平衡器)客户点击该IP的可能性是1/16,即~6%(使用上面的谷歌示例)。这本身就比具有单个A地址的系统更具弹性,这将影响100%的用户,或者具有2个A记录的系统,其中用户具有甚至50/50的更改命中失败的资源。

答案 2 :(得分:1)

不要担心。有多个级别的DNS缓存,因此用户不会在每个请求中在2个IP之间切换。对于每个客户,IP将保持相同的数小时。

我们有一个相反的问题。当服务器关闭时,用户仍然有坏IP。我们将TTL设置为1分钟,但很少有浏览器尊重它。由于此问题,在同一网络上进行负载平衡时,VIP是比DNS更好的选择。

答案 3 :(得分:0)

DNS循环法不提供冗余

如果没有实质性的额外帮助,它只提供哑负载共享(nb:加载“平衡”,这意味着基于服务器负载的动态负载分配)。

在两个IP上拥有相同的证书应该没有问题。