Skip to content

Small tools for syncing DNS Records with hosts file.

License

Notifications You must be signed in to change notification settings

Neboer/DNS2HostsSyncer

Repository files navigation

DNS2HostsSyncer

用于将DNS记录同步到hosts文件的小型工具,可以将一个PowerDNS服务器中的解析记录同步到本地hosts文件中,可以快速方便的定期执行,不需要设置系统级DNS,加快域名解析速度。

项目概述

DNS到Hosts文件同步工具(d2hs)是一个设计用于从PowerDNS上游服务器同步DNS记录到本地hosts文件的工具。该工具通过PowerDNS Admin API获取指定区域的DNS记录,并据此更新hosts文件。同时具备监控hosts文件变更的功能,确保与上游服务器保持同步。

构建与安装

本项目使用CMake构建系统,需要以下依赖:

详细构建指南请参阅BUILD文档。 在Windows、Debian系统中安装可以直接在Release中下载对应系统的安装包。 MacOS系统中的安装方法如下:

brew tap cikaros/tap
brew install d2hs
brew services start d2hs

注意MacOS的安装包由Cikaros专门维护,理论上本仓库目前并不包含在MacOS中相关的构建配置。

ArchLinux可以安装dns2hostssyncer-git这个AUR包。

配置说明

操作系统 默认配置文件路径
Linux /etc/d2hs/d2hs.json
macOS /etc/d2hs/d2hs.json
Windows %APPDATA%\neboer\DNS2HostsSyncer

配置文件采用JSON格式,包含以下配置项:

hosts_file_path

  • 类型: 字符串
  • 描述: 指定需要更新的hosts文件路径
  • 示例: "/etc/hosts"

rrpools

  • 类型: 对象数组
  • 描述: 资源记录池配置,定义连接PowerDNS API的参数集合
  • 示例:
    "rrpools": [
        {
            "api_endpoint_url": "http://api.example.com:8081",
            "api_key": "secret_api_key",
            "server_name": "localhost",
            "zone_name": "test.server."
        }
    ]

资源记录池配置项

每个资源记录池对象包含以下字段:

  • api_endpoint_url

    • 类型: 字符串
    • 描述: PowerDNS API端点URL
    • 示例: "http://api.example.com:8081"
  • api_key

    • 类型: 字符串
    • 描述: PowerDNS API鉴权密钥
    • 示例: "secret_api_key"
  • server_name

    • 类型: 字符串
    • 描述: PowerDNS服务器名称
    • 示例: "localhost"
  • zone_name

    • 类型: 字符串
    • 描述: 需要同步的DNS区域名称
    • 示例: "test.server."

使用指南

基础使用格式:

用法: d2hs [--help] [--version] [--dry-run] [--hosts-file-path HOSTS_FILE_PATH] [--config-file-location CONFIG_FILE_LOCATION]

可选参数:
  -h, --help                  显示帮助信息并退出
  -v, --version               显示版本信息并退出
  -d, --dry-run               试运行模式
  -f, --hosts-file-path       指定hosts文件路径 [默认系统hosts]
  -c, --config-file-location  指定配置文件路径 [参考配置说明]

hosts文件路径

如果不传入hosts文件路径,则在不同的操作系统中,d2hs会在不同的路径下寻找默认的hosts文件。

操作系统 默认hosts文件路径
Windows C:\Windows\System32\drivers\etc\hosts
macOS /private/etc/hosts
Linux/Unix /etc/hosts

功能特性

  • 记录同步: 从指定DNS区域获取记录并更新hosts文件
  • 试运行模式: 支持预演变更而不实际修改文件

Hosts文件管理规范

程序按以下方式管理hosts文件:

# 静态主机名解析表
# 详见hosts(5)手册
# 10.0.0.1 some.records

#d2hs_delimiter
192.168.1.1 one.internal.network
192.168.1.2 two.internal.network
192.168.1.3 three.internal.network
192.168.1.4 four.internal.network
2001::1 ipv6.support
#d2hs_delimiter
::1 another.host
10.0.0.2 other.records

程序仅处理两个#d2hs_delimiter标记之间的内容。通过对比API返回记录与标记间内容进行同步,若标记不存在则会自动创建。记录顺序不影响对比结果(程序会进行排序比较)。

注意事项

  • 确保API密钥具有访问目标DNS区域的权限
  • 需要具备hosts文件的写权限(建议使用sudo运行)
  • API基础URL请勿包含结尾斜杠/
  • 使用本工具可帮助维护与DNS记录实时同步的hosts文件,提升资源管理效率

通过DNS2HostsSyncer,您可以轻松维护与指定DNS区域保持同步的hosts文件,实现高效的本地DNS资源管理。