前言

公司有些内网服务需要使用域名访问,安装bind比较麻烦,故使用coredns实现域名服务。

IP 说明
192.168.0.41 安装dns,作为dns服务器
192.168.0.20 测试服务器

安装

有docker和预编译二进制文件等更多方式,这里采用预编译二进制文件进行安装。

下载地址:https://github.com/coredns/coredns/releases

运行

  1. 编写配置文件 Corefile
.:53 {
# 绑定本机IP
bind 192.168.0.41
# 因为需要用域名的服务比较少,这里就直接使用hosts方式。
# 如果需要配置大量域名,建议使用文件方式
hosts {
192.168.0.41 web.local.com
ttl 60
reload 1m
fallthrough
}
# 最后所有的都转发到系统配置的上游dns服务器去解析
forward . /etc/resolv.conf
# 缓存时间ttl
cache 120
# 自动加载配置文件的间隔时间
reload 6s
# 输出日志
log
# 输出错误
errors
}
  1. 运行。这里写了脚本来启动

目录结构如下:

├── bin
│   ├── coredns
│   └── start.sh
├── conf
│   └── Corefile
└── logs
└── start.log

启动脚本示例(注意,因为默认监听53端口,所以需要使用root用户启动)

#!/bin/bash
# description: 启动CoreDNS set -u scriptDir=$(cd $(dirname $0) && pwd)
baseDir=$(cd ${scriptDir}/.. && pwd)
pidFile=${baseDir}/logs/app.pid function prepare(){
# 检查当前用户是否为root
if [[ $(whoami) != "root" ]]; then
echo "please use root privilege"
exit 1
fi # 检查是否存在配置文件, 无则报错退出
if [[ ! -f ${baseDir}/conf/Corefile ]]; then
echo "${baseDir}/conf/Corefile not found"
exit 1
fi # 检测是否存在日志目录, 无则创建
if [[ ! -d ${baseDir}/logs ]]; then
mkdir -p ${baseDir}/logs
fi # 检查进程是否已存在, 存在则退出
ps -ef | grep -v grep | grep ${scriptDir}/coredns > /dev/null
if [[ $? -eq 0 ]]; then
echo "coredns is running"
exit 1
fi
} function startApp(){
nohup ${scriptDir}/coredns --conf ${baseDir}/conf/Corefile \
-pidfile ${pidFile} > ${baseDir}/logs/start.log 2>&1 &
} function check(){
# 检查是否正常启动
for i in $(seq 2); do
echo "checking coredns whether is running or not ..."
sleep 1
done
ps -ef | grep -v grep | grep ${scriptDir}/coredns > /dev/null
if [[ $? -eq 0 ]]; then
echo "coredns is running"
fi
} function main(){
prepare
startApp
check
} main
  1. 启动
./start.sh

测试

  1. 修改测试服务器的/etc/resolv.conf,示例:
nameserver 192.168.0.41
  1. ping测试
ping -c4 web.local.com
ping -c4 www.baidu.com
  1. 如果上一步都正常响应的话,则说明成功。

参考

补充

停止脚本

#!/bin/bash
# description: 停止CoreDNS set -u scriptDir=$(cd $(dirname $0) && pwd)
baseDir=$(cd ${scriptDir}/.. && pwd)
pidFile=${baseDir}/logs/app.pid function prepare(){
# 检查当前用户是否为root
if [[ $(whoami) != "root" ]]; then
echo "please use root privilege"
exit 1
fi # 检查进程是否已存在, 存在则退出
ps -ef | grep -v grep | grep ${scriptDir}/coredns > /dev/null
if [[ $? -ne 0 ]]; then
echo "coredns is not running"
exit 1
fi
} function stopApp(){
if [[ -f ${pidFile} ]]; then
kill $(cat ${pidFile})
rm -f ${pidFile}
else
local pid=$(ps -ef | grep -v grep | grep ${scriptDir}/coredns | awk '{print $2}')
kill ${pid}
fi
} function check(){
# 检查是否已停止
for i in $(seq 2); do
echo "checking coredns whether is running or not ..."
sleep 1
done
ps -ef | grep -v grep | grep ${scriptDir}/coredns > /dev/null
if [[ $? -ne 0 ]]; then
echo "coredns is stopped"
fi
} function main(){
prepare
stopApp
check
} main

使用CoreDNS自建dns的更多相关文章

  1. 转: centos7.5 下 coredns+etcd搭建DNS服务器

    coredns简介 CoreDNS是一个DNS服务器,和Caddy Server具有相同的模型:它链接插件.CoreDNS是云本土计算基金会启动阶段项目. CoreDNS是SkyDNS的继任者. Sk ...

  2. centos7.5下coredns+etcd搭建DNS服务器

    coredns简介 安装etcd 安装coredns 设置域名解析 A记录 AAAA记录 CNAME记录 SRV记录 TXT记录 coredns简介 CoreDNS是一个DNS服务器,和Caddy S ...

  3. 使用 CoreDNS 来应对 DNS 污染

    原文链接:https://fuckcloudnative.io/posts/install-coredns-on-macos/ CoreDNS 是 Golang 编写的一个插件式 DNS 服务器,是 ...

  4. [archlinux][daily] 自建DNS服务器 / 建立本地DNS cache / 使用dnsmasq加速上网

    新公司,上网超慢,DNS竟然是远程地址,终于找到机会学习一下dnsmasq了. update@20170516: 上网慢是因为分给我的IP有限流策略,其实远端DNS并不会造成感受上的上网慢. 参考:h ...

  5. 内建DNS服务器--BIND

    参考 BIND 官网:http://www.isc.org/downloads/bind/ 1.系统环境说明 [root@clsn6 ~]# cat /etc/redhat-release CentO ...

  6. 2-7-搭建DNS服务器实现域名解析

    学习服务的方法: 了解服务的作用:名称,功能,特点 安装服务 配置文件的位置,端口 服务开启和关闭的脚本 修改配置文件(实战举例) 排错(从上到下,从内到外) -------------------- ...

  7. Linux网络学习笔记(二):域名解析(DNS)——以 CoreDNS 为例

    个人笔记,观点不一定正确. 适合对 Kubernetes 有一定了解的同学. 前言 最近一直在学习 Kubernetes,但是手头没有个自有域名,要测试 ingress 就比较麻烦,每次都是手动改 h ...

  8. 美国半个互联网瘫痪对开发者使用DNS的启发

    版权声明:本文由腾讯云DNSPod团队原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/174 来源:腾云阁 https:// ...

  9. Domain Name System (DNS)

    1.DNS和WINS的作用 DNS:(Domain Name Server,域名服务)用于实现域名和IP地址的相互转换. WINS:(Windows Internet Name Service) 用来 ...

  10. k8s集群之上游dns--dnsmasq,统一管理kubernetes的dns解析

    1.概述 首先部署好kubernetes集群并采用Coredns进行解析,这样集群内部的服务都能通过内部域名进行访问.但是集群内部的coredns与物理机的dns解析不完全统一,coredns不能解析 ...

随机推荐

  1. ai问答:使用vite如何配置多入口页面

    Vite 是一个 web 开发构建工具,它可以用于开发单页应用和多页应用.要在 Vite 中配置多入口,可以: 在 vite.config.js 中定义多个 entry 入口: export defa ...

  2. 【python爬虫】对站长网址中免费简历模板进行爬取

    本篇仅在于交流学习 解析页面 可以采用xpath进行页面连接提取 进入页面 通过进入的页面可以得到下载地址 步骤: 提取表页面模板链接-->进入连接-->提取页面内下载地址连接--> ...

  3. 2023-03-13:给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j], 这样的坡的宽度为 j - i。 找出 A 中的坡的最大宽度,如果不存在,返回 0

    2023-03-13:给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j], 这样的坡的宽度为 j - i. 找出 A 中的坡的最大宽度,如果不存在 ...

  4. 2023-01-07:hyper/docker-registry-web是registry的web界面工具之一。请问部署在k3s中,yaml如何写?

    2023-01-07:hyper/docker-registry-web是registry的web界面工具之一.请问部署在k3s中,yaml如何写? 答案2023-01-07: yaml如下: api ...

  5. 2022-12-27:etcd是无界面的,不好看,joinsunsoft/etcdv3-browser是etcd的web可视化工具之一。请问在k3s中部署,yaml如何写?

    2022-12-27:etcd是无界面的,不好看,joinsunsoft/etcdv3-browser是etcd的web可视化工具之一.请问在k3s中部署,yaml如何写? 答案2022-12-27: ...

  6. 2021-03-18:给定一个字符串str,只由‘X’和‘.’两种字符构成。‘X’表示墙,不能放灯,也不需要点亮,‘.’表示居民点,可以放灯,需要点亮。如果灯放在i位置,可以让i-1,i和i+1三个位置被点亮。返回如果点亮str中所有需要点亮的位置,至少需要几盏灯。

    2021-03-18:给定一个字符串str,只由'X'和'.'两种字符构成.'X'表示墙,不能放灯,也不需要点亮,'.'表示居民点,可以放灯,需要点亮.如果灯放在i位置,可以让i-1,i和i+1三个位 ...

  7. 2021-08-11:按要求补齐数组。给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用

    2021-08-11:按要求补齐数组.给定一个已排序的正整数数组 nums,和一个正整数 n .从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 ...

  8. phpstudy-sqlilabs-less-4

    题目:GET - Error based - Double Quotes - String              基于错误的GET双引号字符型注入 可能的注入点(不全) ' " ) ') ...

  9. 【HDU】1559 最大子矩阵 (二维前缀和,动态规划)

    动态规划之二维前缀和 题目 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大. 输入 输入数据的第一行为一个正整数T,表示有T组测试数据.每一组测试数据的第一行为四个正 ...

  10. 一篇文章告诉你什么是Java内存模型

    在上篇 并发编程Bug起源:可见性.有序性和原子性问题,介绍了操作系统为了提示运行速度,做了各种优化,同时也带来数据的并发问题, 定义 在单线程系统中,代码按照顺序从上往下顺序执行,执行不会出现问题. ...