随着组织的互联网基础设施不断扩展,其对配置、设置和决策的需求也随之增加——从选择一个可靠的名称服务器,到确定合适的 DNS 记录类型以及设置合适的 TTL(生存时间)值。其中一项关键决策就是是否要创建通配符 DNS 记录,这是一项大多数主机服务商、注册商和 DNS 提供商都支持的功能。

在本文中,我们将介绍什么是通配符 DNS 记录、它的作用以及可能存在的风险。

什么是通配符 DNS 记录?

通配符 DNS 记录是一种特殊的 DNS 记录,允许域名管理员将不存在或随机的子域名指向特定的 IP 地址或其他 DNS 资源数据。举个例子,如果某人尝试访问一个未在域名 DNS 设置中定义的子域名,系统仍会返回响应,而不是报错——用户将被引导至通配符 A 记录中定义的 IP 地址。

简而言之,通配符 DNS 记录是一个“兜底”机制,用于自动处理无效的子域名请求。定义通配符域名很简单,但也有一些规则需要注意:

  • 只有一个星号(*)会被视为通配符操作符,DNS 通配符记录不支持其他字符或表达式。例如,*.example.com 是正确的通配符记录,而 *1.example.com 则不是。

  • 星号必须出现在域名的最左侧标签中。例如,*.example.com 是正确的,而 example.*com 则不是。

  • 每条记录只能有一个星号,不能在多层级中使用通配符。例如,*.*.example.com 大多数 DNS 提供商会认为无效。同时,*.example.com 无法匹配 a.b.example.com,通配符只作用于一个层级。

  • 已存在的 DNS 记录优先于通配符记录。例如,如果为 blog.example.com 设置了具体的 DNS 记录,即使存在 *.example.com 通配符记录,系统也会优先使用指定的记录。

如何创建通配符 DNS 记录?

不同 DNS 提供商的具体操作步骤可能略有不同,但大致流程如下:

  1. 登录账户并进入 DNS 管理控制台;

  2. 添加一条新的 DNS 记录并选择记录类型;

  3. 输入通配符子域名(如 *.example.com)及其指向的目标地址,可能是 IP 地址、URL 或另一个子域;

  4. 新的 DNS 记录生效时间可能从几分钟到 48 小时不等。

需要注意的是,并非所有类型的 DNS 记录都支持通配符。A、AAAA 和 TXT 记录支持得较广;而 CNAME、ALIAS、URL 重定向、HTTP 重定向和 MX 虽技术上支持,但不常见;NS、SOA 和 PTR 记录则完全不支持通配符。

通配符 DNS 的常见应用场景

现在你知道如何创建通配符 DNS 记录了,那么是否有必要使用呢?以下是一些合法且常见的使用场景:

多租户应用

多租户软件中,一个应用实例服务多个客户,每个客户有独立子域名,如 customer1.sampleapp.comcustomer2.sampleapp.com 等。

通过使用 *.sampleapp.com 通配符 DNS,应用可统一处理所有子域名,而无需为每一个单独配置 DNS。

博客平台

像 WordPress.com 这样的博客平台允许用户创建自定义子域名,如 mydailyblog.wordpress.com。这类平台通常使用如 *.wordpress.com 的通配符 DNS,使任意子域名自动解析到共享 IP 地址。

DNS 查询时,通配符记录会返回相同 IP,服务器通过 HTTP Host 头(如 mydailyblog.wordpress.com)识别要展示的博客内容,从而实现动态渲染每位用户的个性化博客。

新顶级域(TLD)的临时用途

互联网名称与数字地址分配机构(ICANN)要求新推出的 gTLD 在上线初期的最少 90 天内返回特殊 DNS 响应,用以管理名称冲突(Name Collision: ICANN Approves Name Collision Occurrence Management Framework | Special IP Address (127.0.53.53) Alerts System Administrators of Potential Issue),类似通配符机制但不直接使用通配符记录。

通常情况下,ICANN 禁止注册局为不存在或未注册的域名设置通配符 DNS,而是要求返回 NXDOMAIN(域名不存在)。但上述框架是一个例外,用于防止名称冲突——即内部网络中使用的域名与公共互联网上的名称发生冲突。

为避免此类冲突,可设置一个类似通配符的 A 记录,指向 127.0.53.53(保留地址),一旦触发,在日志中警示管理员。

使用通配符 DNS 的风险

通配符 DNS 可以提升用户体验,让用户访问未定义子域名时不会报错,但使用时也需谨慎。总原则是:没有正当用途就不要用通配符 DNS。 原因包括:

DNS 错误风险

在使用通配符 DNS 的网络环境中可能出现意外流量路由。例如,若某设备名为 computer.example.com,系统可能自动将 example.com 设置为搜索域。此时访问 www.google.com 失败时,系统可能会尝试 www.google.com.example.com,若启用了通配符记录,系统将错误地解析至内部资源,造成功能异常、流量误导及难以诊断的错误。

子域接管

如果 *.company1.com 通配符记录将所有子域都指向某云服务资源,而该资源被删除但记录未移除,攻击者可注册相同资源地址,接管如 login.company1.com 等子域,进而托管恶意内容。

钓鱼攻击

通配符记录使拼写错误的子域(如 logln.company1.com)依然能解析为真实主页或默认页。攻击者可以用这类看似合法的链接误导用户点击,通过后续提示跳转至真正的钓鱼页面,收集用户信息。

通配符 DNS 与通配符 SSL 的区别

通配符 DNS 控制子域名的解析,而通配符 SSL 则用于加密多个子域的 HTTPS 连接(如 *.example.com)。虽然便捷,但如果某子域被攻破,攻击者可利用通配符证书托管恶意内容,仍显示 HTTPS 小锁,容易误导用户和绕过安全防护。

如何查找通配符 DNS 记录?

安全专家经常需要识别通配符 DNS 的使用情况,用于攻击面评估。WhoisXML API 提供多种 DNS 产品,可基于被动 DNS 和实时 DNS 数据判断记录是否为通配符。

使用 DNS Chronicle API | WhoisXML API获取通配符信息

该 API 可查询域名的历史 A 和 AAAA 记录,并返回是否为通配符记录。例如:

curl --location 'https://dns-history.whoisxmlapi.com/api/v1' \

        --header 'Content-Type: application/json' \

        --data '{

        "apiKey": "<your_API_key>",

        "searchType": "forward",

        "recordType": "a",

        "domainName": "0-2nask-us.turbotaxweb.profile.basecamp.app"

        }' >> dns_chronicle_sample.json

结果中字段 wildcard: true 表示该记录属于通配符。如果为 false,则不是;若为 null,说明尚未检查。

使用 Reverse DNS API 获取更多信息

此工具可进一步确认某条记录是否属于通配符,可查询 SOA、TXT 或 CNAME 记录。

curl --location 'https://reverse-dns.whoisxmlapi.com/api/v1' \

        --header 'Content-Type: application/json' \

        --data '{

        "apiKey": "<your_API_key>",

        "limit": 1000,

        "includeAdditionalChecks": 1,

        "recordType": "soa",

        "terms": [ { "field": "domain", "term": "example.com" } ] }'

总结

通配符 DNS 记录是一种兜底机制,使对未定义子域的请求仍能指向有效的资源。在多租户应用、博客平台以及新 gTLD 初期阶段具有实用价值。但大多数系统管理员会避免使用通配符 DNS,因为它可能引起路由错误,并可能被滥用用于钓鱼或子域接管。

如需确认某域是否使用了通配符 DNS,可使用DNS Chronicle API 或 Reverse DNS API 进行查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/78843.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/78843.shtml
英文地址,请注明出处:http://en.pswp.cn/web/78843.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速上手知识图谱开源库pykeen教程指南(一)

文章目录 1 前情提要1.1 AmpliGraph 和 PyKEEN 对比介绍1.2 TransE、ConvE、RotatE几款模型的差异 2 直接上案例2.1 数据载入&#xff1a;TriplesFactory2.2 模型训练2.2.1 训练信息2.2.2 TransE模型可以降维实体、关系的关系 2.3 模型保存与加载、评估2.3.1 保存与模型加载2.3…

飞搭系列 | 获取弹窗数据,轻松实现回填

前言 飞搭低代码平台&#xff08;FeiDa&#xff0c;以下简称“飞搭”&#xff09;&#xff0c;为企业提供在线化、灵活的业务应用构建工具&#xff0c;支持高低代码融合&#xff0c;助力企业低门槛、高效率和低成本地快速应对市场变化&#xff0c;加速复杂业务场景落地。 概要…

Linux如何安装AppImage程序

Linux如何安装AppImage程序 文章目录 Linux如何安装AppImage程序 在 Linux 中&#xff0c;.AppImage 是一种便携式的应用程序格式&#xff0c;无需安装即可运行。 1.赋予该文件可执行权限 可以使用下列命令&#xff0c;赋予可执行权限 # 举个例子 chmod x /path/to/MyApp.App…

云硬盘的原理

云硬盘是云计算环境中的一种存储服务&#xff0c;其原理主要涉及数据存储、数据冗余与容错、性能优化以及数据安全等方面&#xff0c;以下是具体介绍&#xff1a; 数据存储 逻辑卷管理&#xff1a;云硬盘通常会将物理存储设备划分为多个逻辑卷&#xff0c;每个逻辑卷可以独立地…

使用 pgrep 杀掉所有指定进程

使用 pgrep 杀掉所有指定进程 pgrep 是一个查找进程 ID 的工具&#xff0c;结合 pkill 或 kill 命令可以方便地终止指定进程。以下是几种方法&#xff1a; 方法1&#xff1a;使用 pkill&#xff08;最简单&#xff09; pkill 进程名例如杀掉所有名为 “firefox” 的进程&…

堆排序(算法题)

#include <bits/stdc.h> using namespace std;const int N 100010; // 堆数组的最大容量 int h[N], s; // h[]存储堆元素&#xff0c;s表示当前堆的大小// 下沉操作&#xff1a;调整以i为根的子树&#xff0c;维护小顶堆性质 void down(int i) {int t i; /…

极狐GitLab 如何将项目共享给群组?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 共享项目和群组 (BASIC ALL) 在极狐GitLab 16.10 中&#xff0c;更改为在成员页面的成员选项卡上显示被邀请群组成员&#xf…

用 CodyBuddy 帮我写自动化运维脚本

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴”。 #CodeBuddy首席试玩官 背景 我个人是非常喜欢 Jenkins 自动化部署工具的&#xff0c;之前都是手写 Jenki…

基于windows安装MySQL8.0.40

基于windows安装MySQL8.0.40 基于windows 安装 MySQL8.0.40&#xff0c;解压文件到D:\mysql-8.0.40-winx64 在D:\mysql-8.0.40-winx64目录下创建my.ini文件&#xff0c;并更新一下内容 [client] #客户端设置&#xff0c;即客户端默认的连接参数 # 设置mysql客户端连接服务…

Python小酷库系列:5个常用的dict属性化访问扩展库

5个常用的dict属性化访问扩展库 嵌套结构高级功能性能综合建议 在前面我们详细讲解了 Box和 Munch这两个dict属性化访问的扩展库&#xff0c;总体而言它们主要用于提升配置文件数据、JSON对象数据的可读性&#xff0c;减少了代码中双引号。在这一领域中还有dotmap、addict 和…

OC语言学习——面向对象(下)

一、OC的包装类 OC提供了NSValue、NSNumber来封装C语言基本类型&#xff08;short、int、float等&#xff09;。 在 Objective-C 中&#xff0c;**包装类&#xff08;Wrapper Classes&#xff09;**是用来把基本数据类型&#xff08;如 int、float、char 等&#xff09;“包装…

密码学系列 - SR25519与ED25519

SR25519 SR25519 是一种高级的数字签名算法&#xff0c;它基于 Schnorr 签名方案&#xff0c;使用的是 Curve25519 椭圆曲线。这种签名算法在密码学社区中广受欢迎&#xff0c;特别是在区块链和加密货币领域。以下是关于 SR25519 的详细介绍。 SR25519 简介 SR25519 是一种 …

Vue3源码学习7-PatchFlags使用位算符

文章目录 前言✅ 一、基础知识&#xff1a;什么是二进制&#xff1f;✅ 二、位运算的基本操作✅ 三、左移运算 <<✅ 四、实际用途&#xff1a;如何用于状态标记&#xff08;PatchFlags&#xff09;✅ 五、组合多个状态标记✅ 六、小结口诀&#xff08;记忆&#xff09;✅…

在 Vue 2 中使用 qrcode 库生成二维码

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

电子电器架构 --- 网关释放buffer的必要性

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

Java中Stream、File、方法递归

文章目录 十五、Stream流、File、方法递归1、Stream1.1 什么是Stream1.2 获取Stream流1.3 Stream流常见的中间方法1.3 Stream流常见的终结方法1.4 收集Stream流 2、File、IO流&#xff08;一&#xff09;2.1 存储数据的方案2.2 File&#xff1a;代表文本2.3 常用方法一&#xf…

挑战用豆包教我学Java01天

今天是豆包教我学Java的第一天&#xff0c;废话不多说直接开始。 1.每日题目&#xff1a; 基础语法与数据类型 题目&#xff1a;编写一个 Java 程序&#xff0c;从控制台读取两个整数&#xff0c;然后计算它们的和、差、积、商&#xff0c;并输出结果。题目&#xff1a;编写…

文章记单词 | 第67篇(六级)

一&#xff0c;单词释义 cylinder&#xff1a;英 [ˈsɪlɪndə(r)] 美 [ˈsɪlɪndər] &#xff0c;名词&#xff0c;意为 “圆筒&#xff1b;圆柱体&#xff1b;汽缸&#xff1b;&#xff08;有特定用途的&#xff09;圆筒形物品”。fool&#xff1a;英 [fuːl] 美 [fuːl]…

Make:独立创造者手册——从0到1的商业自由之路

目录 如何获得创业想法 • 解决你自己的问题 • 从微观细分市场起步 • 从问题出发&#xff0c;而非解决方案 • 记录与验证想法 如何构建产品 • 快速构建最小化产品 • 对抗完美主义 • 自行开发 vs. 外包 • 学习基础编程的必要性 案例与洞见 • Levelsio的70个项目与5%成…

spark基本介绍

一、Spark概述 Spark是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。 Hadoop是一个分布式系统结构的基础架构。 二、Spark与Hadoop相比较的优势&#xff1a; 1. 处理速度&#xff1a;Hadoop&#xff1a;数据处理速度相对较慢 Spark&#xff1a;速度比Hadoop快很…