使用CoreDNS自建dns

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
.cn 域名,1个 12个月
全局流量管理 GTM,标准版 1个月
简介: 使用CoreDNS自建dns

前言

公司有些内网服务需要使用域名访问,安装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
相关文章
|
4月前
|
域名解析 网络协议 Ubuntu
【域名解析DNS专栏】搭建私有DNS服务器:从BIND到CoreDNS的选择
【5月更文挑战第26天】本文对比了两种流行的DNS服务器软件BIND和CoreDNS。BIND以其稳定性及丰富功能著称,广泛兼容各类平台,适合复杂环境;CoreDNS则以其高性能、模块化设计和易用性脱颖而出。根据需求、资源和技术水平,用户可选择适合自己的DNS服务器。安装示例包括BIND在Ubuntu上的apt安装及基本配置,以及CoreDNS的snap安装和YAML配置。
300 0
|
域名解析 存储 Kubernetes
抓包就明白CoreDNS域名解析
抓包就明白CoreDNS域名解析
|
Kubernetes 网络协议 Perl
使用 CoreDNS sidecar 来优化 Kubernetes Pod dns 性能
介绍一种给业务 Pod 添加 dns cache sidecar 来增强 dns 性能的方法。
4397 0
|
Kubernetes 网络协议 容器
k8s集群配置使用coredns代替kube-dns
简介 CoreDNS是一个Go语言实现的链式插件DNS服务端,是CNCF成员,是一个高性能、易扩展的DNS服务端。可以很方便的部署在k8s集群中,用来代替kube-dns。 使用kubeadm初始化时指定 安装方法与《centos7使用kubeadm安装k8s集群》基本一致 只需要简单修改kubeadm-master.
4934 0
|
Kubernetes 网络协议 容器
使用CoreDNS实现Kubernetes基于DNS的服务发现
1.Kubernetes基于DNS的服务发现 在Kubernetes集群推荐使用Service Name作为服务的访问地址,因此需要一个Kubernetes集群范围的DNS服务实现从Service Name到Cluster Ip的解析,这就是Kubernetes基于DNS的服务发现功能。
3203 0
|
15天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
52 6
|
4天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
|
22天前
|
测试技术 Python
python自动化测试中装饰器@ddt与@data源码深入解析
综上所述,使用 `@ddt`和 `@data`可以大大简化写作测试用例的过程,让我们能专注于测试逻辑的本身,而无需编写重复的测试方法。通过讲解了 `@ddt`和 `@data`源码的关键部分,我们可以更深入地理解其背后的工作原理。
19 1
|
1月前
|
开发者 Python
深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!
深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!
62 1

热门文章

最新文章

推荐镜像

更多