使用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配置。
2145 0
|
Prometheus 网络协议 应用服务中间件
部署基于etcd的coredns集群
部署基于etcd的coredns集群
542 0
|
安全 数据安全/隐私保护
Elasticsearch 7.* 常见错误以及解决方案
Elasticsearch 7.* 常见错误以及解决方案
965 0
|
jenkins 持续交付 API
使用Python操作Jenkins的过程详解
Python作为一种简洁、灵活且功能丰富的编程语言,可以与各种API轻松集成,Jenkins的API也不例外。借助于Python中的python-jenkins模块,我们可以轻松地编写脚本来连接到Jenkins服务器,并执行各种操作,如创建、删除、构建Jobs等。这种自动化的方式不仅提高了效率,还使得CI/CD流程更加灵活和可控。
|
存储 Prometheus Cloud Native
[prometheus]基于influxdb2实现远端存储
[prometheus]基于influxdb2实现远端存储
860 2
|
Prometheus Kubernetes 网络协议
k8s学习笔记之CoreDNS
k8s学习笔记之CoreDNS
1247 3
|
Ubuntu 安全 Linux
Linux(34)Rockchip RK3568 Ubuntu22.04和Debian 10上配置远程桌面工具
Linux(34)Rockchip RK3568 Ubuntu22.04和Debian 10上配置远程桌面工具
2513 0
|
Kubernetes Linux Docker
kubelet 压力驱逐 - The node had condition:[DiskPressure]
kubelet 压力驱逐 - The node had condition:[DiskPressure]
2187 0
|
安全 Java 测试技术
ToB项目身份认证AD集成(二):快速搞定window server 2003部署AD域服务并支持ssl
本文详细介绍了如何搭建本地AD域控测试环境,包括安装AD域服务、测试LDAP接口及配置LDAPS的过程。通过运行自签名证书生成脚本和手动部署证书,实现安全的SSL连接,适用于ToB项目的身份认证集成。文中还提供了相关系列文章链接,便于读者深入了解AD和LDAP的基础知识。
1544 0

热门文章

最新文章