Debian下安装DNS服务器

2023-05-16

如果公司内有多台服务器,或者虚拟主机,可能这些服务都需要一个独立的域名,这时我们就可以自己架设一台DNS服务器,可以创建自己的域名。

首先,我们来分析一下,DNS的几种角色:
1、DNS缓存服务器:Bind9会把查询到的域名信息缓存到服务器上,下次直接从本服务器上读取。这样可以节省带宽和等待时间。
2、DNS主服务器(primary master):Bind9从主服务器的配置文件中读取域名区域信息,并作为该区域的权威解析资料。
3、DNS从服务器(slave master):Bind9作为主服务器的备份,即使主服务器不可用时,也仍然能够进行解析。

在此,我们只创建DNS缓存服务器和DNS主服务器。对于个人和一般的企业,DNS主服务器已经够用。
Bind9的配置文件:
在/etc/bind/目录下,有3个主要配置文件,分别是:
/etc/bind/named.conf  是Bind的主要配置文件,不过它不包含DNS数据,它使用include包含以下两个文件
/etc/bind/named.conf.options
/etc/bind/named.conf.local
其中,在/etc/bind/named.conf.options中有一句默认配置:
directory "/var/cache/bind"; ,该配置告诉Bind,到/var/cache/bind目录下去寻找数据文件。
 
这里,我们选择Debian操作系统,Bind9。

先创建一个DNS缓存服务器
一、安装:
    sudo apt-get install bind9 dnsutils bind9-doc
    bind9提供了DNS服务器功能
    dnsutils则提供了DNS测试和除错工具
    bind9-doc 提供bind9的文档
二、转发配置:
    vi /etc/bind/named.conf.options
    加入ISP提供的DNS服务器地址,如河南的为202.102.224.68和202.102.227.68:
    forwards {
                202.102.224.68;
                202.102.22768;
    };
    注意后面的分号,一定不能少!
    重启 Bind服务:
    /etc/init.d/bind9 restart
三、修改/etc/resolv.comf 文件:
    vi /etc/resolv.conf
        search mytest.com
        nameserver 10.0.0.230
     其中,10.0.0.230为本机IP,这个根据个人情况进行填写。
     测试:
     dig google.com

如图:

我截的图,为最后4行的统计信息:包括查询时间,所使用 的DNS服务器等。

四、搭建主DNS服务器,将配置linux.tech的主DNS服务器。我们需要创建正向和反向解析的Zone区域文件。
1、创建正反向Zone文件(所谓正向解析文件,就是把域名解析为IP):

vi /etc/bind/named.conf.local,添加如入信息:

zone "linux.tech" {
        type master;
        file "/etc/bind/linux.tech.hosts";
        };
#该配置指定Bind作为linux.tech域的主域名服务器,
#jan.tech.hosts文件中包含所有*.linux.tech形式的域名转换数据。
#如果jan.tech.hosts文件没有指定路径,则默认的路径为/var/cache/bind。

zone "0.0.10.in-addr.arpa" {
        type master;
        file "/etc/bind/10.0.0.rev";
        };
#这是反向解析文件。zone的名称必须是倒写的IP地址中的网络号
#这是因为我的网络号为:10.0.0.0,所以Zone名称写为:0.0.10。


logging {
        channel query.log {
                file "/var/log/dns.log";
                severity debug 3;
};
        category queries { query.log; };
};

#上面是日志信息,复制即可。在severity中,debug的级别可以是1-3.
#由于Bind9是由bind用户运行的,所以我们还需要让该用户能够有权限写入日志文件:

sudo touch /var/log/dns.log

sudo chown bind /var/log/dns.log

2、添加正向解析文件

vi /etc/bind/linux.tech.hosts

$ttl 38400
linux.tech.       IN      SOA     ods.linux.tech. admin.linux.tech. (
                        1243951711
                        10800
                        3600
                        604800
                        38400 )
linux.tech.       IN      NS      ods.linux.tech.
linux.tech.       IN      A       10.0.0.5
login.linux.tech. IN      A       10.0.0.5
cosignd.linux.tech. IN      A       10.0.0.5
ods.linux.tech.   IN      A       10.0.0.5
svn.linux.tech.   IN      A       10.0.0.5
trac.linux.tech.  IN      A       10.0.0.5
www     IN      CNAME   ldap.linux.tech.
ftp     IN      CNAME   log.linux.tech.
dns.linux.tech.   IN      A       10.0.0.1
daily.linux.tech. IN      A       10.0.0.5
ldap.linux.tech.   IN      A       10.0.0.3
plone.linux.tech. IN      A       10.0.0.3
redmine.linux.tech.       IN      A       10.0.0.5
wiki.linux.tech.       IN      A       10.0.0.3
test.linux.tech.  IN      A       10.0.0.230
ktrac.linux.tech.  IN      A       10.0.0.4
ksvn.linux.tech.  IN      A       10.0.0.4
mail.linux.tech.  IN      A       10.0.0.3
#第一行的TTL设置,为38400秒,也就是说,文件中所有的记录内容,
#在DNS缓存服务器上的生存周期是38400S,这个可以根据情况自行修改。
#第二行设置了SOA记录,开头的字符@是说明该条记录的来源(来自linux.tech的记录)。
#之后的IN,意思是该记录属于Internet类型。
#ods,为本机的主机名,具体情况依据你自己的机器名称。
#SOA是Start Of Authority的缩写,可以理解为“权威域名信息”的开始,
#每一个Zone文件只能有一个SOA记录,而且必须是第一个记录。
#后面的“admin.linux.tech",
#实际上是一个E-mail地址,只不过这里不能写@符号,需要写成点(.)。
#还要注意的是末尾的点(.)也得保留。
#后面的五组数字,用于和从服务器保持同步,这里不再介绍。

3、添加反向解析文件,所谓反向解析,就是把IP地址解析为域名。

vi /etc/bind/10.0.0.rev

$ttl 38400
0.0.10.in-addr.arpa.    IN      SOA     ods.linux.tech. admin.linux.tech. (
                        1243952355
                        10800
                        3600
                        604800
                        38400 )
0.0.10.in-addr.arpa.    IN      NS      ods.linux.tech.
5.0.0.10.in-addr.arpa.  IN      PTR     linux.tech.
5.0.0.10.in-addr.arpa.  IN      PTR     svn.linux.tech.
5.0.0.10.in-addr.arpa.  IN      PTR     login.linux.tech.
5.0.0.10.in-addr.arpa.  IN      PTR     cosignd.linux.tech.
5.0.0.10.in-addr.arpa.  IN      PTR     trac.linux.tech.
1.0.0.10.in-addr.arpa.  IN      PTR     dns.linux.tech.
5.0.0.10.in-addr.arpa.  IN      PTR     daily.linux.tech.
3.0.0.10.in-addr.arpa.  IN      PTR     ldap.linux.tech.
3.0.0.10.in-addr.arpa.  IN      PTR     plone.linux.tech.
5.0.0.10.in-addr.arpa.  IN      PTR     redmine.linux.tech.
3.0.0.10.in-addr.arpa.  IN      PTR     wiki.linux.tech.
3.0.0.10.in-addr.arpa.  IN      PTR     mail.linux.tech.
230.0.0.10.in-addr.arpa.  IN      PTR     test.linux.tech.
4.0.0.10.in-addr.arpa.  IN      PTR     ktrac.linux.tech.
4.0.0.10.in-addr.arpa.  IN      PTR     ksvn.linux.tech.

#这里的配置和正向解析基本相同,需要再介绍的是IP地址的写法,
#可以像我上面写的一样,把IP倒过来写,也可以直接写地址号。
#如添加一台IP为78的,域名为project.linux.tech的主机,可以这样写:
#78   IN    PTR   project.linux.tech
#每次我们向DNS中添加记录时,一定记住,
#只需修改/etc/bind/linux.tech.hosts和10.0.0.rev这两个文件即可。

#具体添加方式,可以按照我上面的例子。

五、重启Bind, 测试

sudo /etc/init.d/bind9 restart

ping linux.tech

dig 本地加环地址,可以确认Bind是否已经开始运行在53端口。
dig -x 127.0.0.1
;;Query time:1 mesc
;;SERVER:10.0.0.230#53(10.0.0.230)

Bind9自带了一个极好 的工具,named-checkzone,可以测试Zone文件。
如:
named-checkzone linux.tech /etc/bind/db.linux.tech
如果一切正常,应该返回如下 信息:

zone linux.tech/IN: loaded serial 1243951711
OK

测试反向解析文件也一样:
named-checkzone linux.tech /tec/bind/10.0.0.rev


以上内容为本人一字一符号的敲打上去的,如要复制,请注明出处!谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Debian下安装DNS服务器 的相关文章

  • 为什么我不能将 sed 的输出重定向到文件

    我正在尝试运行以下命令 someprogram tee dev tty sed s 2 gt output file 但当我去查看时 该文件始终是空白的 如果我删除 gt output file从命令末尾 我可以看到 sed 的输出 没有任
  • IIS 如何识别请求的是哪个站点?

    如果我在一台服务器上托管多个站点 并且 dns 服务器将不同的域名解析到同一地址 这是服务器的名称 那么 IIS 如何知道最终请求的是哪个站点 因此 客户端输入我的 1 站点地址 gt myrandomsite mydomain com 然
  • AWS Cloudfront 作为具有自定义域的 Heroku 站点的 CDN

    最近 我从 AWS Route 53 brianpatrickhummel com 购买了一个域来托管个人投资组合 该投资组合网站已启动并正在运行 使用 S3 存储桶和 Cloudfront 作为 CDN 在作品集网站上 访问者可以预览我构
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • CakePHP 多站点(如 WPMU + 域映射)...可能吗?

    所以我刚刚开始使用 CakePHP 想知道是否可以执行以下操作 一次安装 Cake 并使用超级管理员登录 然后 管理员有权访问指定的 子站点 并能够在这些子站点上创建 编辑内容和用户 最后 能够将域名 不是子域 而是唯一域 映射到路由 所以
  • AWS Route 53 如何实现基于延迟的路由?

    AWS Route 53 可以提供基于延迟的路由策略 请参阅AWS Route 53 的延迟路由策略 http docs aws amazon com Route53 latest DeveloperGuide routing policy
  • 码头工人。将动态主机 IP 添加到容器上的环境变量

    我有一个非常特殊的场景 包含一些 docker 容器的虚拟机 该容器之一需要知道主机 IP 问题是如果我在容器构建时传递主机 IP 或使用 e在 docker run 命令上 它在容器上保持 静态 始终相同 那一刻 该虚拟机可以位于笔记本电
  • Nodejs 上使用 DNS 进行 Consul 服务发现

    TL DR 大家好 我试图从用 Express 编写的 NodeJS 前端调用 NodeJS 后端微服务 通过Consul https www consul io DNS接口 https www consul io intro gettin
  • 为什么默认情况下不启用 arp 忽略/通告 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个需要经验才能回答的具体问题 为什么 arp ignore arp announce 在 Linux 安装 例如 debian 上默认不启用 有
  • SSL握手时是否检查服务器域名

    在 SSL 握手期间 是否在 SSL 握手期间检查服务器的域名 我的意思是 是否根据服务器运行的域检查了经过认证的服务器中的域名 示例 假设服务器证书具有域 mydomain com 如果服务器在域 someotherdomain com
  • Heroku:无法解析服务器的 DNS

    我买了一个myapp app带有 OVH 的域 我还购买了 Heroku hobby dyno 以便为我的 api 有一个安全的子域 https www server myapp app代替https www myapp heroku ap
  • 我可以在 Ubuntu 上使用 Homebrew 吗?

    我只是尝试使用 Homebrew 和 Linuxbrew 在我的 Ubuntu 服务器上安装软件包 但都失败了 这就是我尝试安装它们的方法 sudo apt get install build essential curl git m4 r
  • CNAME 记录也转发 MX 请求吗?

    我的 DNS 设置为包含 A 和 MX 记录的域 base com 还有其他几个域设置了 CNAME 记录 指向 base com 我是否需要为 CNAME 域设置任何特殊内容 例如额外的 MX 记录 或者 CNAME 记录还会转发任何 M
  • 将虚拟主机分配给 Docker 端口

    我设置了通配符 DNS 以便对自定义域 foo 的所有 Web 请求都映射到 Docker 主机的 IP 地址 如果我有多个运行 Apache 或 Nginx 实例的容器 每个容器都会将 Apache 端口 80 映射到某个外部入站端口 我
  • 如何在node.js解析查询中设置dns服务器?

    我正在尝试设置 Google DNS 服务器8 8 8 8在 Node js 中解析查询 这样做的正确方法是什么 在命令行中通常我们可以执行以下操作 nslookup stackoverflow com 8 8 8 8 Server 8 8
  • 失败的! => {"changed": false, "msg": "apt 缓存更新失败"} 尝试时

    我是新来的Ansible https en wikipedia org wiki Ansible software 并尝试安装一个任务作为示例Vivaldi https en wikipedia org wiki Vivaldi 28web
  • 如何在 Debian 上连接 pybluez RFCOMM 服务器套接字?

    我在 python 中使用 pybluez 框架编写了这些代码片段 from bluetooth import server sock BluetoothSocket RFCOMM server sock bind PORT ANY ser
  • 在 grails 中使用 mockDomain 时如何覆盖方法的逻辑?

    我想像往常一样模拟一个域 mockDomain Class 但我想覆盖域的方法之一 beforeDelete具体来说 仅针对该单元测试使用自定义逻辑 如何才能实现这一目标 您可以使用 Groovy 元类重写域类上的 beforeDelete
  • 如何使用 System.Net.DNS 获取 dns 名称的 mx 记录? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 NET 库中是否有任何内置方法可以返回给定域的所有 MX 记录 我了解您如何获取 CNAMES 但不获
  • 从主机名中提取域名

    是否有一种编程方式可以从给定的主机名查找域名 给出 gt www yahoo co jp 返回 gt yahoo co jp 有效但非常慢的方法是 拆分为 并从左侧删除 1 个组 使用 dnspython 加入并查询 SOA 记录 当返回有

随机推荐