mysql

源代码 主页

启用方法
mysql:github.com/cloud66-oss/coredns_mysql

mysql - CoreDNS MySQL 后端

说明

此插件使用 MySQL 作为后端来存储 DNS 记录。然后这些记录可供 CoreDNS 使用。该后端使用一个简单的单表数据结构,其他系统可以共享此数据结构,以向 DNS 服务器中添加和删除记录。由于插件中没有存储状态,因此可以通过旋转由同一数据库支持的多个 CoreDNS 实例来扩展服务。

语法

mysql {
    dsn DSN
    [table_prefix TABLE_PREFIX]
    [max_lifetime MAX_LIFETIME]
    [max_open_connections MAX_OPEN_CONNECTIONS]
    [max_idle_connections MAX_IDLE_CONNECTIONS]
    [ttl DEFAULT_TTL]
    [zone_update_interval ZONE_UPDATE_INTERVAL]
}
  • dsn MySQL 的 DSN,遵循 https://github.com/go-sql-driver/mysql 的示例。您可以在 DSN 中使用 $ENV_NAME 格式,它将替换为环境变量值。
  • table_prefix MySQL 表的前缀。默认为 coredns_
  • max_lifetime SQL 连接的持续时间(采用 Golang 格式)。默认为 1 分钟。
  • max_open_connections 与数据库服务器的最大打开连接数。默认为 10。
  • max_idle_connections 数据库连接池中的最大空闲连接数。默认为 10。
  • ttl 没有指定 TTL 的记录的默认 TTL,单位为秒。默认为 360(秒)
  • zone_update_interval 从数据库加载所有区域之间的最长时间间隔。默认为 10 分钟。

支持的记录类型

A、AAAA、CNAME、SOA、TXT、NS、MX、CAA 和 SRV。此后端不支持 AXFR 请求。目前也不支持泛域名记录。

设置(作为外部插件)

将此内容作为外部插件添加到 plugin.cfg 文件中

mysql:github.com/cloud66-oss/coredns_mysql

然后运行

$ go generate
$ go build

根据提示将任何必需模块添加到 CoreDNS 代码中。

数据库设置

此插件尚未创建或迁移数据库架构供其使用。要创建数据库和表,请使用以下表结构(注意表名前缀)

CREATE TABLE `coredns_records` (
    `id` INT NOT NULL AUTO_INCREMENT,
	`zone` VARCHAR(255) NOT NULL,
	`name` VARCHAR(255) NOT NULL,
	`ttl` INT DEFAULT NULL,
	`content` TEXT,
	`record_type` VARCHAR(255) NOT NULL,
	PRIMARY KEY (`id`)
) ENGINE = INNODB AUTO_INCREMENT = 6 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

记录设置

此插件提供的每个记录都应属于其允许由 CoreDNS 提供服务的区域。下面是一些示例

-- Insert batch #1
INSERT INTO coredns_records (zone, name, ttl, content, record_type) VALUES
('example.org.', 'foo', 30, '{"ip": "1.1.1.1"}', 'A'),
('example.org.', 'foo', '60', '{"ip": "1.1.1.0"}', 'A'),
('example.org.', 'foo', 30, '{"text": "hello"}', 'TXT'),
('example.org.', 'foo', 30, '{"host" : "foo.example.org.","priority" : 10}', 'MX');

可以使用 dig 进行如下查询

$ dig A MX foo.example.org 

另请参见

参阅 手册