在 Mac 上搭建 DNS 服务器

我们将在Mac上使用dnsmasq搭建轻量级DNS服务器,实现内网域名解析。

步骤概览:

  1. 安装dnsmasq
  2. 配置dnsmasq
  3. 启动dnsmasq服务
  4. 设置Mac为本机DNS服务器(可选,用于测试)
  5. 配置其他设备使用此DNS服务器

详细步骤:

在 Mac 上搭建 DNS 服务器的完整指南

选择 DNS 服务器软件

在 macOS 上推荐使用 dnsmasq ,它轻量且配置简单:

复制代码
# 安装 dnsmasq`
`brew install dnsmasq`
`

完整配置流程

1. 创建配置文件

复制代码
# 创建主配置文件`
`sudo` `nano /usr/local/etc/dnsmasq.conf`
`

添加以下内容:

复制代码
# 基本配置`
`port=53`
`listen-address=127.0.0.1,192.168.1.100  # 添加你的Mac局域网IP`
`bind-interfaces`
`no-hosts  # 不使用系统hosts文件`
`domain-needed`
`bogus-priv`

`# 自定义域名解析`
`address=/test.abchina.com.cn/10.100.81.111`
`address=/umapmgs.test.abchina.com.cn/10.100.81.111`

`# 上游DNS`
`server=8.8.8.8`
`server=1.1.1.1`

`# 日志记录`
`log-queries`
`log-facility=/var/log/dnsmasq.log`
`

2. 创建日志文件并设置权限

复制代码
sudo` `touch /var/log/dnsmasq.log`
`sudo` `chown` `$(whoami) /var/log/dnsmasq.log`
`

3. 启动 DNS 服务

复制代码
# 启动服务并设置开机自启`
`sudo brew services start dnsmasq`

`# 检查服务状态`
`brew services list |` `grep dnsmasq`
`

4. 配置 macOS 防火墙

复制代码
# 允许 DNS 流量`
`sudo /usr/libexec/ApplicationFirewall/socketfilterfw \`
`  --add /usr/local/sbin/dnsmasq \`
`  --unblockapp /usr/local/sbin/dnsmasq`
`

5. 测试 DNS 服务器

复制代码
# 使用 dig 测试`
`dig umapmgs.test.abchina.com.cn @127.0.0.1`

`# 使用 nslookup 测试`
`nslookup umapmgs.test.abchina.com.cn 127.0.0.1`
`

到第五步就已经可以了,代表搭建成功

6. 配置其他设备使用此 DNS

  • Mac 本机 :
复制代码
networksetup -setdnsservers Wi-Fi 127.0.0.1`
`
  • iPhone :

    • 进入 Wi-Fi 设置
    • 点击当前网络旁的 ⓘ 图标
    • 配置 DNS → 手动
    • 添加你的 Mac 局域网 IP (如 192.168.1.100)
  • 路由器 (推荐):

    • 登录路由器管理界面
    • 找到 DHCP/DNS 设置
    • 设置首选 DNS 为你的 Mac IP

高级配置选项

添加通配符域名解析

在配置文件中添加:

复制代码
# 所有 *.dev 子域名都指向 192.168.1.100`
`address=/dev/192.168.1.100`
`

设置 DNS 缓存大小

复制代码
# 设置缓存大小(默认150条)`
`cache-size=1000`
`

配置 DHCP 服务(可选)

复制代码
# 启用 DHCP`
`dhcp-range=192.168.1.50,192.168.1.150,12h`
`dhcp-option=option:router,192.168.1.1`
`

管理命令

复制代码
# 重启服务`
`sudo brew services restart dnsmasq`

`# 停止服务`
`sudo brew services stop dnsmasq`

`# 查看日志`
`tail -f /var/log/dnsmasq.log`

`# 测试配置文件`
`dnsmasq --test`
`

常见问题解决

|-----------|----------------------------|
| 问题 | 解决方案 |
| 端口 53 被占用 | sudo lsof -i :53 查找占用进程并停止 |
| 无法解析外部域名 | 检查上游 DNS 配置,确保能访问 8.8.8.8 |
| 客户端无法连接 | 检查防火墙设置和 listen-address 配置 |
| 解析延迟高 | 增加 cache-size 或更换上游 DNS |
| 服务无法启动 | 运行 dnsmasq --test 检查配置错误 |

创建自动化管理脚本

复制代码
#!/bin/bash`
`# dnsmasq-manager.sh`
`case` `$1` `in`
`  start)`
    `sudo brew services start dnsmasq`
    `;;`
`  stop)`
    `sudo brew services stop dnsmasq`
    `;;`
`  restart)`
    `sudo brew services restart dnsmasq`
    `;;`
`  status)`
`    brew services list |` `grep dnsmasq`
    `;;`
`  log)`
    `sudo` `tail -f /var/log/dnsmasq.log`
    `;;`
  `add)`
    `echo` `"address=/$2/$3"` `|` `sudo` `tee -a /usr/local/etc/dnsmasq.conf`
    `sudo brew services restart dnsmasq`
    `;;`
`  *)`
    `echo` `"Usage: $0 {start|stop|restart|status|log|add domain ip}"`
    `exit` `1`
`esac`
`

使用示例:

复制代码
# 添加新域名解析`
`./dnsmasq-manager.sh add test.example.com 192.168.1.200`

`# 查看日志`
`./dnsmasq-manager.sh log`
`

安全增强建议

  1. 限制访问范围 :
复制代码
# 只允许本地和局域网访问`
`listen-address=127.0.0.1,192.168.1.0/24`
`
  1. 启用 DNSSEC :
复制代码
dnssec`
`dnssec-check-unsigned`
`
  1. 防止 DNS 劫持 :
复制代码
# 过滤广告域名`
`address=/adserver.example/0.0.0.0`
`
  1. 定期更新 :
复制代码
brew update && brew upgrade dnsmasq`
`

通过此配置,你已成功在 Mac 上搭建了功能完整的 DNS 服务器,可以为局域网提供域名解析服务,特别是内部开发域名的解析。

相关推荐
IT研究所14 分钟前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微
AIgorithmGEEK20 分钟前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil20828 分钟前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)32 分钟前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter62538 分钟前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器
zhengqweasd1 小时前
机房托管服务器怎么选硬盘,机械盘和 SSD 托管场景差异
运维·服务器·github
xh didida2 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++
心易行者3 小时前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache
科技研学社3 小时前
精度决胜品质:羽绒服缝制工艺标准与自动化精度对标解析
运维·自动化