使用CoreDNS自建dns

简介: 使用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
相关文章
|
域名解析 网络协议 Ubuntu
【域名解析DNS专栏】搭建私有DNS服务器:从BIND到CoreDNS的选择
【5月更文挑战第26天】本文对比了两种流行的DNS服务器软件BIND和CoreDNS。BIND以其稳定性及丰富功能著称,广泛兼容各类平台,适合复杂环境;CoreDNS则以其高性能、模块化设计和易用性脱颖而出。根据需求、资源和技术水平,用户可选择适合自己的DNS服务器。安装示例包括BIND在Ubuntu上的apt安装及基本配置,以及CoreDNS的snap安装和YAML配置。
1405 0
|
域名解析 存储 Kubernetes
抓包就明白CoreDNS域名解析
抓包就明白CoreDNS域名解析
|
Kubernetes 网络协议 Perl
使用 CoreDNS sidecar 来优化 Kubernetes Pod dns 性能
介绍一种给业务 Pod 添加 dns cache sidecar 来增强 dns 性能的方法。
4533 0
|
Kubernetes 网络协议 容器
k8s集群配置使用coredns代替kube-dns
简介 CoreDNS是一个Go语言实现的链式插件DNS服务端,是CNCF成员,是一个高性能、易扩展的DNS服务端。可以很方便的部署在k8s集群中,用来代替kube-dns。 使用kubeadm初始化时指定 安装方法与《centos7使用kubeadm安装k8s集群》基本一致 只需要简单修改kubeadm-master.
5138 0
|
Kubernetes 网络协议 容器
使用CoreDNS实现Kubernetes基于DNS的服务发现
1.Kubernetes基于DNS的服务发现 在Kubernetes集群推荐使用Service Name作为服务的访问地址,因此需要一个Kubernetes集群范围的DNS服务实现从Service Name到Cluster Ip的解析,这就是Kubernetes基于DNS的服务发现功能。
3388 0
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
340 2
|
8月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
812 29
|
8月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
317 4
|
8月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
8月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。

推荐镜像

更多
  • DNS