使用 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