温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。
概念
rDNS(Reverse DNS,可逆 DNS 或反向 DNS)是域名系统(DNS)的查询技术,用于确定与 IP 地址关联的域名,与通常的 “前向” DNS 查找相反。-- 维基百科
FQDN(Fully Qualified Domain Name)即全限定域名,是指通过符号 “.” 连接的同时带有主机名和域名信息的域名,全限定域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式。 -- 百度百科
分析
域名解析是互联网中最基础的设施之一。举个例子,当你访问本站时,并不是直接输入 IP 来访问,而是通过域名 vircloud.net
来访问的,那么浏览器是如何知道域名 vircloud.net
对应的是哪台服务器呢?域名解析这时候就发挥作用了,通过指定 DNS 查询出 vircloud.net
的服务器 IP,然后浏览器再将流量导向该 IP,完成访问流程。若域名解析故障,那么将无法访问所有使用域名的网站。
反向解析大家一般体会不到,目前最主要的用途也是运用于邮件系统,作为服务商判断邮件是否是垃圾邮件的一个标准。举个例子,Sina 给我发了一封邮件,收件地址是 Gmail,当 Gmail 收到 邮件时,会通过反向解析去查询邮件发件 IP 地址(202.108.3.184)的 PTR 记录,查询结果是:184.3.108.202.in-addr.arpa name = mail3-184.sinamail.sina.com.cn.
,说明邮件确实是从 Sina 发出来的,故收进收件箱,假如有伪造 Sina 的发件地址(这是很简单的事情),Gmail 反向查询到的 PTR 记录一般都是类似:Host 65.20.211.58.in-addr.arpa. not found: 3(NXDOMAIN)
,这时候 Gmail 就会认为这是伪造的邮件,从而收进垃圾箱。
反向解析比较常见的用途还有一个是判断 IP 的来源真实性。比如我们查询网站访问日志时,发现有一个 IP 180.76.15.159 访问量明显大于其他 IP,我们初步判断可能是机器人在扫描,也可能是搜索引擎在爬取,那么怎么确定到底是哪个来源呢?这时候我们就可以通过反向解析来判断,查询到这个 IP 的 rDNS 是 baiduspider-180-76-15-159.crawl.baidu.com.
,根据百度官方说法,使用百度搜索蜘蛛的 rDNS 便是这种形式,故我们可以确定是百度搜索在爬取。
设置 FQDN
FQDN 设置比较简单,不论是 CentOS 还是 Ubuntu 或者 Debian 等等系统,都可以通过命令 hostnamectl
来设置,比如:
hostnamectl set-hostname cdn.vircloud.net
设置 rDNS
GCP
位置
Compute Engine -> VM 实例 -> 选定虚拟机,修改 -> 网络接口 -> 公开 DNS PTR 记录
截图
配置没有难度,参照截图设置即可:
注意
必须在 https://www.google.com/webmasters/verification/verification?authuser=0&domain=域名.
先通过验证,方可设置成功,所以域名必须是真实存在且生效的,。
Azure
Azure 有两种方式,一种是域名托管于 Azure,一种是未托管于 Azure,前一种较为简单,且与第二种类似,故下面以第二种为例讲解。
设置 DNS 名称标签
先在 Azure 虚拟机对应的公共 IP 上设置好 DNS,填上名称:
CNAME 验证
在域名对应的供应商,把要用的域名以 CNAME 方式指向上面设置的 DNS 名称标签:
除 CNAME 外,也可以将域名直接通过 A 记录解析到公共 IP 上。
设置 rDNS
由于 Azure Web 页面没有像 GCP 提供直接的配置页面,所以我们需要通过 az cli 工具来实现。
az cli 安装后,通过下列命令登录:
C:\Users\> az login
Note, we have launched a browser for you to login. For old experience with device code, use "az login --use-device-code"
You have logged in. Now let us find all the subscriptions to which you have access...
[
{
"cloudName": "AzureCloud",
"id": "*-*-*-*-",
"isDefault": true,
"name": "*",
"state": "Enabled",
"tenantId": "*-*-*-*",
"user": {
"name": "*@*.*",
"type": "user"
}
}
]
然后参照下方命令执行即可:
C:\Users\> az network public-ip update --resource-group 资源组的名称 --name 公共IP的名称 --reverse-fqdn 你的域名
注意,resource-group
和 --name
都是填名称
,在 web 上可以直接看到,如果提示 az
命令找不到,需要手动将 C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin
添加到系统环境变量中的 path
。
AWS
2021 年开始,AWS 也可以自己设置 rDNS(PTR)了,直接在 EC2 管理页面上添加即可。
需注意的是,只有弹性 IP 才可以设置,所以开始之前,需要先分配预留弹性 IP,然后再在该 IP 上操作更新反向 DNS:
与 GCP 和 Azure 一样,上述操作前,需要把要设置的域名解析到弹性 IP(A 记录)来证明域名所有权,否则不会更新 rDNS。
另外,如果设置了 rDNS,弹性 IP 将无法直接删除,需要先取消设置才可以,所以如果使用免费套餐,需要注意。
Oracle Cloud
Oracle Cloud 尚不支持自己设置,参照官方文档,填写表格申请。
验证
Linux
# host IP 地址
x.x.x.x.in-addr.arpa domain name pointer cdn.vircloud.net.
Windows
C:\Users\*>nslookup -qt=ptr x.x.x.x
服务器: *.*
Address: *.*.*.*
非权威应答:
x.x.x.x.in-addr.arpa name = cdn.vircloud.net
如果出现上述的响应,说明 rDNS 已经设置成功。
扩展阅读:
1、《三大云平台综合对比体验(如何选择合适的 VPS?)》
2、《三大云平台计费标准 - Azure、AWS、GCP》
3、《三大云平台网速及延迟在线测试平台 - Azure、AWS、GCP》
4、《应该是最全的国内学生机|云主机(VPS)学生优惠汇总》
参考文章:
1、《IP反向解析(PTR/RDNS)》
2、《Announcing: Reverse DNS for Azure Cloud Services》
3、《在Azure上搭建自己的邮件服务器》