在 macOS 上通过命令行配置特定域名和 IP 地址的 DNS 映射,通常涉及修改 /etc/hosts 文件或配置本地 DNS 服务器(如 dnsmasq)。以下是两种常见方法的详细步骤:

方法 1:通过修改 /etc/hosts 文件

/etc/hosts 文件用于将域名直接映射到 IP 地址,适合简单的本地 DNS 解析需求。

  1. 打开终端

  2. 编辑 /etc/hosts 文件: 使用 nanovim 等编辑器以管理员权限打开文件:

    sudo nano /etc/hosts
    

    输入管理员密码以继续。

  3. 添加域名和 IP 映射: 在文件末尾添加一行,格式为 IP地址 域名。例如,将 example.com 映射到 192.168.1.100

    192.168.1.100 example.com
    

    如果需要映射多个域名到同一 IP,可以在同一行添加多个域名,用空格分隔:

    192.168.1.100 example.com www.example.com
    
  4. 保存并退出

    • nano 中,按 Ctrl+O 保存,Ctrl+X 退出。
    • vim 中,按 :wq 保存并退出。
  5. 刷新 DNS 缓存: 修改 /etc/hosts 后,清除 DNS 缓存以确保生效:

    sudo dscacheutil -flushcache
    sudo killall -HUP mDNSResponder
    
  6. 验证配置: 使用 pingnslookup 检查域名是否解析到指定 IP:

    ping example.com
    

    确认返回的 IP 是你设置的 192.168.1.100

注意

  • /etc/hosts 适用于本地静态映射,适合开发或测试环境。
  • 修改 /etc/hosts 仅对当前设备有效,且不支持复杂的 DNS 功能(如通配符解析)。
  • 如果 macOS 自动覆盖 /etc/hosts,请确保以管理员权限操作。

方法 2:使用 dnsmasq 配置 DNS(高级)

如果需要更灵活的 DNS 配置(例如通配符域名或多个域名映射),可以安装并配置 dnsmasq

  1. 安装 dnsmasq: 使用 Homebrew 安装(若未安装 Homebrew,先运行 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"):

    brew install dnsmasq
    
  2. 配置 dnsmasq

    • 创建或编辑配置文件:
      mkdir -p /usr/local/etc/dnsmasq.d
      nano /usr/local/etc/dnsmasq.conf
      
    • 在配置文件中添加域名和 IP 映射。例如,为 example.com 映射到 192.168.1.100
      address=/example.com/192.168.1.100
      
      支持通配符,例如 *.example.com
      address=/example.com/192.168.1.100
      address=/.example.com/192.168.1.100
      
  3. 启动 dnsmasq

    sudo brew services start dnsmasq
    
  4. 配置系统 DNS: 将本地回环地址(127.0.0.1)设置为 DNS 服务器,优先使用 dnsmasq

    sudo networksetup -setdnsservers Wi-Fi 127.0.0.1 8.8.8.8
    

    这里将 Wi-Fi 的 DNS 设置为本地 dnsmasq(127.0.0.1),并以 Google DNS(8.8.8.8)作为备用。

  5. 验证配置: 测试域名解析:

    nslookup example.com
    

    确认返回的 IP 是 192.168.1.100

  6. 确保 dnsmasq 开机启动

    sudo brew services restart dnsmasq
    

注意

  • dnsmasq 适合需要复杂 DNS 配置的场景,如开发环境或本地服务器。
  • 确保 dnsmasq 监听端口(默认 53)未被其他服务占用。
  • 如果遇到权限问题,检查 /usr/local/etc/dnsmasq.conf 的配置。

方法 3:临时测试(使用 scutil

如果只想临时测试域名和 IP 映射,可以使用 scutil 命令:

sudo scutil --dns

然后手动添加解析(需要结合 dnsmasq 或其他工具实现持久化)。

总结

  • 简单需求:使用 /etc/hosts,适合快速映射单个域名。
  • 复杂需求:使用 dnsmasq,支持通配符和大规模配置。
  • 验证:总是通过 pingnslookup 确认解析是否正确。