2021-09-07Zone Apex 和网络服务器重定向

概述

当您在云基础架构中或由第三方托管您的网站时,它带有供应商特定的 DNS 名称,例如 *.amazonaws.com。您通常希望在您的 DNS 区域中创建别名,例如,别名 www.xyz.com 指向规范名称 <sth.sth>.amazonaws.com。

您的客户可能还希望使用 xyz.com 访问您的站点。

使用 Amazon Route 53,这是可能的,因为 Amazon Route 53 支持别名记录集。别名记录集可让您将区域顶点 DNS 名称映射到某些 AWS 服务的 DNS 名称。

虽然没有 明确禁止,但对于许多 DNS 服务提供商,不可能为区域顶点创建 CNAME 记录,因为它有效地重写了同一域的所有其他 DNS 记录。RFC 1034指出,“如果节点上存在 CNAME RR,则不应存在其他数据;这确保了规范名称及其别名的数据不能不同。”

在这篇博文中,我们将解释为什么我们不能在 zone apex 中创建 CNAME 记录并探索作为替代解决方案的网络服务器重定向。

为什么在 Zone Apex 没有 CNAME

DNS 协议中严格定义了 CNAME 记录的含义和解释。最初的概念是允许将“也称为”名称添加到 DNS 中的区域,然后将其重定向到“官方”(或“规范”)名称。

如果我们在 Zone Apex 定义 CNAME,Zone Apex 的 SOA 和 NS 记录以及区域中的所有其他记录类型将不再起作用。

如果不同时更改世界上所有的 DNS 服务器实现,我们就无法更改特殊 CNAME 记录的使用方式。试图“放松” CNAME 在权威服务器中的使用方式,而不同时更改当前运行的所有 DNS 解析器,将导致名称解析中断。

基础设施图

POC 设置

请参考我的另一篇文章配置 Zone Apex 和 Webserver Redirect | by 云之旅 | 2021 年 9 月 | 中等的

POC 演示

网站托管在 AWS NLB 和 EC2 中

 通过CNAME访问网站

<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">C:\Users\rquan>nslookup www.rquan.work</span><span style="color:#292929">非权威回答:
姓名:nlbsite-94dbb43e06908040.elb.us-east-1.amazonaws.com
地址:34.238.xx
别名:www.rquan.work</span><span style="color:#292929">C:\Users\rquan>curl -vI http://www.rquan.work 
* 重建 URL 到:http: 
//www.rquan.work/ * 尝试 34.238.xx.. 
* TCP_NODELAY 设置
* 连接到 www.rquan .work (34.238.xx) port 80 (#0) 
> HEAD / HTTP/1.1 
> Host: www.rquan.work 
> User-Agent: curl/7.55.1 
> Accept: */* 
> 
< HTTP/1.1 200 OK</span></span></span>

访问没有www前缀的网站

Zone Apex A 类型记录,目标是 AWS 全球加速器静态 IP。

<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">C:\Users\rquan>nslookup</span><span style="color:#292929">> 服务器 8.8.8.8
默认服务器:dns.google
地址:8.8.8.8</span><span style="color:#292929">> <strong>rquan.work</strong>
服务器:dns.google
地址:8.8.8.8</span><span style="color:#292929">非权威回答:
姓名:rquan.work
地址:<strong>52.223.xx 
          35.71.xx</strong></span><span style="color:#292929">> 设置类型=ptr</span><span style="color:#292929">> <strong>52.223.xx</strong>
服务器:dns.google
地址:8.8.8.8</span><span style="color:#292929">非权威答案:
xx223.52.in-addr.arpa name = <strong>a57b87154f84c465c.awsglobalaccelerator.com</strong></span><span style="color:#292929">> <strong>35.71.xx</strong>
服务器:dns.google
地址:8.8.8.8</span><span style="color:#292929">非权威答案:
x.x1.71.35.in-addr.arpa name = <strong>a57b87154f84c465c.awsglobalaccelerator.com</strong></span></span></span>

从浏览器打开http://rquan.work/,解析为全局加速器IP,然后通过全局加速器的ALB端点重定向到http://www.rquan.work/。承载 www.rquan.work 的 ELB 和 EC2 响应网页。

弹性

AWS 全球加速器静态 IP

Global Accelerator 为您提供一组从 AWS 边缘网络任播的两个静态 IP 地址。

网络区域为来自唯一 IP 子网的加速器的静态 IP 地址提供服务。与 AWS 可用区类似,网络区是一个独立的单元,拥有自己的一组物理基础设施。配置加速器时,默认情况下,Global Accelerator 会为其分配两个 IPv4 地址。如果某个网络区域中的一个 IP 地址由于某些客户端网络的 IP 地址阻塞或网络中断而变得不可用,则客户端应用程序可以重试来自另一个隔离网络区域的健康静态 IP 地址。

此处显示客户端使用两个静态 IP 连接到 AWS 全局加速器。

使用 35.71.xx 静态 IP

<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">C:\Users\rquan>curl -IvL http://rquan.work 
* 重建 URL 到:http: <strong>//rquan.work/</strong>
 * 尝试<strong>35.71.xx ...</strong>
 * TCP_NODELAY 设置
* 连接到 rquan.work ( <strong>35.71.xx</strong> ) port 80 (#0) 
> HEAD / HTTP/1.1 
> Host: rquan.work 
> User-Agent: curl/7.55.1 
> Accept: */* 
> 
< HTTP/1.1 301 Moved Permanently 
HTTP/1.1 301 Moved Permanently 
< 服务器:awselb/2.0
服务器:awselb/2.0 
< 日期:2021 年 9 月 6 日星期一 01:54:46 GMT
日期:2021 年 9 月 6 日星期一 01:54:46 GMT 
< 内容类型:文本/html
内容类型:文本/ html 
< 内容长度:134
内容长度:134 
< 连接:保持活动
连接:keep-alive 
< 位置:http 
://www.rquan.work :80/位置:http ://www.rquan.work :80/</span><span style="color:#292929">< 
* 主机 rquan.work 的连接 #0 保持不变
* 向此 URL 发出另一个请求:'http: 
//www.rquan.work:80 /' * 尝试 34.238.xx ... 
* TCP_NODELAY 设置
* 连接到<a data-cke-saved-href="http://www.rquan.work/" href="http://www.rquan.work/" class="dy kc">www.rquan。工作</a>(34.238.xx) 端口 80 (#1) 
> HEAD / HTTP/1.1 
> 主机:www.rquan.work 
> 用户代理:curl/7.55.1 
> 接受:*/* 
> 
< HTTP/1.1 200 OK</span></span></span>

刷新 DNS 缓存,现在客户端选择其他静态 IP。

<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">C:\Users\rquan> <strong>ipconfig /flushdns</strong></span><span style="color:#292929">Windows IP 配置</span><span style="color:#292929">成功刷新 DNS 解析器缓存。</span><span style="color:#292929">C:\Users\rquan>curl -IvL http://rquan.work 
* 重建 URL 到:http: <strong>//rquan.work/</strong>
 * 尝试<strong>52.223.xx ...</strong>
 * TCP_NODELAY 设置
* 连接到 rquan.work ( <strong>52.223.xx</strong> ) port 80 (#0) 
> HEAD / HTTP/1.1 
> Host: rquan.work 
> User-Agent: curl/7.55.1 
> Accept: */* 
> 
< HTTP/1.1 301 Moved Permanently 
HTTP/1.1 301 Moved Permanently 
< 服务器:awselb/2.0
服务器:awselb/2.0 
< 日期:2021 年 9 月 6 日星期一 01:58:31 GMT
日期:2021 年 9 月 6 日星期一 01:58:31 GMT 
< 内容类型:文本/html
内容类型:文本/ html 
< 内容长度:134
内容长度:134 
< 连接:保持活动
连接:keep-alive 
< 位置:http 
://www.rquan.work :80/位置:http ://www.rquan.work :80/</span><span style="color:#292929">< 
* 主机 rquan.work 的连接 #0 保持不变
* 向此 URL 发出另一个请求:'http: //www.rquan.work:80 /'</span></span></span>

 

端点组区域冗余

每个终端节点组都与一个特定的 AWS 区域相关联。端点组包括区域中的一个或多个端点。使用标准加速器,您可以通过调整称为流量拨号的设置来增加或减少以其他方式定向到端点组的流量百分比。流量拨号让您可以轻松地进行性能测试或蓝/绿部署测试,例如,跨不同 AWS 区域的新版本。

当您希望端点组处理来自最佳区域的所有用户请求时,您可以将流量拨号设置为 100%。

 当您不希望端点组处理任何用户请求时,您可以将流量拨号设置为 0%。

此处显示即使全局加速器端点未占用流量,其他 ALB 仍在工作,并且全局加速器响应用户请求。

<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">$ curl -vvvvLI -H '主机:rquan.work' http://a57b87154f84c465c.awsglobalaccelerator.com</span><span style="color:#292929">* 尝试 35.71.xx.. 
* TCP_NODELAY 设置
* 3 次(传输 0x6548d0)在 149943 毫秒后
过期 * 4 次(传输 0x6548d0)后 200 毫秒内过期
* 连接到 a57b87154f84c465c.global3c584c465c5 端口。 ) 
> HEAD / HTTP/1.1 
> Host: rquan.work 
> User-Agent: curl/7.64.0 
> Accept: */* 
> 
< HTTP/1.1 301 Moved Permanently 
< Server: awselb/2.0 
< Date: Mon, 06 Sep 2021 01:44:37 GMT 
< Content-Type: text/html 
< Content-Length: 134 
< Connection: keep-alive 
< Location: http://www.rquan.work:80/ 
< 
  0 134 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
* 与主机 a57b87154f84c465c.awsglobalaccelerator.com 的连接 #0 保持不变
* 向此 URL 发出另一个请求:'http: //www.rquan.work:80 /'</span><span style="color:#292929">* 200 毫秒后过期 1(传输 0x6548d0)
* 尝试 34.238.xx.. 
* TCP_NODELAY 设置
* 4 后 200 毫秒过期(传输 0x6548d0)
* 连接到 www.rquan.work(34.238.94.94.237)端口(34.238.94.94.5) ) 
> HEAD / HTTP/1.1 
> Host: www.rquan.work 
> User-Agent: curl/7.64.0 
> Accept: */*</span></span></span>

从 Web 客户端重试

当全局加速器静态 IP 之一没有响应时,客户端(curl 或浏览器)会尝试列表中的下一个 IP。

为了模拟失败,我将区域顶点 A 记录配置为假 IP 目标 10.0.191.201。

<span style="background-color:#f2f2f2"><span style="color:rgba(0, 0, 0, 0.8)"><span style="color:#292929">C:\Users\rquan>curl -vvvvL http://rquan.work 
* 重建 URL 为:http: <strong>//rquan.work/</strong>
 * 尝试<strong>10.0.191.201</strong> ... 
* TCP_NODELAY 设置
* 连接到 10.0.191.201 端口 80 失败: 超时
* 尝试<strong>15.197.xx</strong> ... 
* TCP_NODELAY 设置
* 连接到 rquan.work (15.197.xx) 端口 80 (#0) 
> GET / HTTP/1.1 
> Host: rquan.work 
> User-Agent: curl/ 7.55.1 
> 接受:*/* 
> 
< HTTP/1.1 301 永久移动
< 服务器:awselb/2.0 
< 日期:2021 年 9 月 6 日星期一 20:50:32 GMT 
< 内容类型:text/html 
< 内容长度: 134 
<连接:keep-alive 
<位置:http://www.rquan.work:80/
< 
* 忽略响应主体
* 与主机 rquan.work 的连接 #0 保持不变
* 向此 URL 发出另一个请求:'http: 
//www.rquan.work:80 /' * 尝试 3.138.xx.. 
* TCP_NODELAY 设置
* 连接到 www.rquan.work (3.138.xx) port 80 (#1) 
> GET / HTTP/1.1 
> Host: www.rquan.work 
> User-Agent: curl/7.55.1 
> Accept: */* 
> 

< 
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" " <a data-cke-saved-href="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" href="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" class="dy kc">http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd</a> "></span><span style="color:#292929"><html xmlns=" <a data-cke-saved-href="http://www.w3.org/1999/xhtml" href="http://www.w3.org/1999/xhtml" class="dy kc">http://www.w3.org/1999/xhtml</a> " xml:lang="en"> 
        <head> 
                <title>Apache HTTP 服务器的测试页面</title> 
                <meta http-equiv= "Content-Type" content="text/html; charset=UTF-8" /> 
                <style type="text/css"> 
                        /*<![CDATA[*/</span></span></span>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值