说明
此插件使用 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
另请参见
参阅 手册。