使用 CoreDNS
做为局域网 DNS 服务器git
使用 docker 安装,或直接下载执行文件,下载页面github
docker pull coredns docker start -p 53:53 -v /Corefile:/Corefile -v /zones:/zones -d --name coredns coredns
coredns
会去默认读取同目录下的 Corefile
配置文件,你也能够使用 -conf
参数指定配置文件路径。样例以下:docker
.:53 { # 使用auto 插件配置rainsay.me域名 auto rainsay.me { # 说明 rainsay.me 的 zone 文件位置,自动回读取 zones/ 目录下的全部文件 directory ./zones # 上传到上级DNS服务器 transfer to 192.168.31.1 # 每5m重载zones中的文件内容 reload 5m } hosts { # hosts 插件能够如使用 /etc/hosts 文件同样配置服务名称 # 若是不写大括号及其中的内容,直接hosts指令,默认使用 /etc/hosts 中的服务名称 # inline 形式 127.0.0.1 www.rainsay.me fallthrough } # 对于没有配置的域名,转发到114 forward . 114.114.114.114 cache 120 reload 6s log errors }
zone 文件格式shell
$TTL 3600 ; 记录超时时间 $ORIGIN rainsay.me. ; 指定 origin,下面的@符号能够做为他的别名,注意后面的. ; SOA 格式 [domain_name] IN SOA [域主服务器或主DNS服务器名] [管理员email] (时间信息) @ IN SOA ns1.rainsay.me. admin.rainsay.me. ( 2019071601 ; Serial 4H ; Refresh 1H ; Retry 7D ; Expire 4H ) ; Negative Cache TTL ; 配置 DNS 记录,指向 ns1.rainsay.me @ IN NS ns1 ; 配置 ns1.rainsay.me 的 A 记录, 指向coredns所在的机器 ns1 IN A 192.168.31.116 ; 配置 rainsay.me 的 A 记录,指向网站或其余用途的机器 @ IN A 192.168.31.51 ; 配置泛域名,没有准确的三级子域名的域名所有指向此IPV4地址 *.rainsay.me. IN A 192.168.31.51
这里使用了两个插件 hosts
和 auto
ubuntu
host
插件能够简单的指明单条记录,但因为不能支持泛域名,咱们这里使用auto
插件auto
或 file
插件须要配置 zone [RFC 1035-style ] 文件,能够明确的指明一个域的全部信息使用 dig 命令服务器
dig @localhost rainsay.me # 输出 ; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> @localhost rainsay.me ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37013 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: 13b0ce8798a9af30 (echoed) ;; QUESTION SECTION: ;rainsay.me. IN A ;; ANSWER SECTION: rainsay.me. 5 IN A 192.168.31.51 ;; AUTHORITY SECTION: rainsay.me. 5 IN NS ns1.rainsay.me. ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Mar 28 10:46:24 CST 2020 ;; MSG SIZE rcvd: 115 #================================================ dig @localhost ns1.rainsay.me # 输出 yu@yu-thinkpad:~$ dig @localhost ns1.rainsay.me ; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> @localhost ns1.rainsay.me ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31124 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: 4c486f2075653625 (echoed) ;; QUESTION SECTION: ;ns1.rainsay.me. IN A ;; ANSWER SECTION: ns1.rainsay.me. 5 IN A 192.168.31.116 ;; AUTHORITY SECTION: rainsay.me. 5 IN NS ns1.rainsay.me. ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Mar 28 10:49:09 CST 2020 ;; MSG SIZE rcvd: 123