我们将在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 服务器,可以为局域网提供域名解析服务,特别是内部开发域名的解析。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐