当前位置:首页 > 技术 > 正文内容

自定义域名解析神器 dnsmasq

代码老兵 技术 24

什么是 dnsmasq?

dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]

dnsmasq 能做什么?

功能说明应用场景
DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量
本地 DNS解析本地网络设备的主机名,无需编辑 /etc/hosts通过主机名访问本地设备(如 printer.local
DHCP 服务自动分配 IP 地址给网络客户端,支持 IPv4 和 IPv6网络 IP 地址管理
TFTP/PXE 服务支持网络启动无盘工作站或嵌入式设备启动
广告/恶意软件过滤在 DNS 级别阻止不需要的域名全网络级别的广告拦截
DNSSEC 安全验证验证 DNS 响应的真实性DNS 安全解析
IPv6 路由广告IPv6 自动配置IPv6 网络支持

关键优势:

  • 轻量级、资源消耗少

  • 易于配置(单个配置文件)

  • 跨平台支持(Linux、macOS、BSD、Android)

  • 完美适合开发环境和小型网络


Mac 下的安装和配置

第 1 步:安装 dnsmasq

使用 Homebrew(推荐):


brew install dnsmasq


第 2 步:配置 dnsmasq

配置文件路径:

  • Intel Mac: /usr/local/etc/dnsmasq.conf

  • Apple Silicon (M1/M2/M3): /opt/homebrew/etc/dnsmasq.conf

为了对泛域名进行本地解析,添加以下配置:


# 将 .test 域名的所有子域解析到本地
echo "address=/.test/127.0.0.1" >> $(brew --prefix)/etc/dnsmasq.conf
# 如果需要 .lan 域名
echo "address=/.lan/127.0.0.1" >> $(brew --prefix)/etc/dnsmasq.conf
# DNS 端口(通常无需修改,默认为 53)
echo "port=53" >> $(brew --prefix)/etc/dnsmasq.conf


推荐域名后缀:使用 .test.lan.example 等非公共 TLD

  •  不要用 .dev(被 Google 保留)

  •  不要用 .local(被 Bonjour/mDNS 使用)

第 3 步:配置系统 DNS 解析器

为你的自定义 TLD(如 .test)配置系统解析器:


# 创建解析器目录
sudo mkdir -pv /etc/resolver
# 为 .test 域名创建解析器配置
echo "nameserver 127.0.0.1" | sudo tee /etc/resolver/test > /dev/null
# 如果需要 .lan 域名
echo "nameserver 127.0.0.1" | sudo tee /etc/resolver/lan > /dev/null


第 4 步:启动 dnsmasq

自动启动并在后台运行(推荐):


sudo brew services start dnsmasq


检查服务状态:


sudo brew services list | grep dnsmasq


手动运行(调试):


sudo dnsmasq --no-daemon


第 5 步:更新 macOS DNS 设置

  1. 打开 系统设置 → 网络 → 高级 → DNS

  2. 点击 + 添加 DNS 服务器:127.0.0.1

  3. 确保其他 DNS 服务器(如 ISP DNS)也在列表中作为备用

第 6 步:刷新 DNS 缓存


# 清空系统 DNS 缓存
sudo dscacheutil -flushcache
# 重启 mDNS 响应器
sudo killall -HUP mDNSResponder


第 7 步:测试配置


# 测试 ping
ping mysite.test
# 你应该看到来自 127.0.0.1 的回复

# 使用 dig 进行详细查询
dig mysite.test
dig api.myapp.test
dig foo.bar.test
# 使用 nslookup
nslookup test.test 127.0.0.1



本地开发泛域名解析

泛域名解析的优势

  • 无需为每个新的子域手动编辑 /etc/hosts 文件

  • 支持无限的子域名:api.project.testweb.project.testadmin.project.test 等都自动解析到 127.0.0.1

  • 完美适合微服务开发、多租户应用开发等场景

配置示例

需求:让所有 *.myapp.test 和 *.api.test 域名都解析到本地

编辑配置文件:


sudo nano $(brew --prefix)/etc/dnsmasq.conf


添加以下配置行:


# 泛域名解析配置
address=/.test/127.0.0.1
address=/.myapp.test/127.0.0.1
address=/.api.test/127.0.0.1

# 如果你想特定的域名指向不同的 IP(高级用法)
# address=/admin.myapp.test/192.168.1.100


刷新配置:


# 重启 dnsmasq 使配置生效sudo brew services restart dnsmasq


测试泛域名解析:


# 这些应该都返回 127.0.0.1
dig frontend.myapp.test
dig api.myapp.test
dig anything.myapp.test
dig test.api.test



相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。