• 【linux】自定义nameserver


    1. 问题场景

    有这么一种场景,两台server,server A,server B。

    Server A和Server B是在同一个内网中,但是Server A通过domain访问Server B。

    不希望Server A访问Server B时走公网, 一种可行的方案是,将此domain不解析为Server B的公网,而是解析为内网。那么该这么做呢?

    2. 修改/etc/hosts

    修改/etc/hosts是一种思路,但是在实际操作中发现,在使用ping等工具时,系统是先查询/etc/hosts,如果有结果就不再访问DNS

    但是在实际路由过程中,系统是只查询DNS。 hosts中的配置要生效,必须要加载到对应的DNS服务中
    通过实现发现, centos7中是没有本地DNS服务的,所以它的hosts无法在DNS中生效;但是centos 8中是增加了dnsmasq服务,它相当于一层DNS缓存服务,它可以将hosts中的配置加载到DNS中
    在Ubuntu 16以后,系统默认安装了systemd-resolved,它同样可以将hosts中的配置加到DNS中

    通过host,nslookup和dig查询,不通系统得到的结果可能不太一样。

    下面我们分别在centos和ubuntu上修改/etc/hosts,添加一个记录来表示Server B

    192.168.0.168   
    
    • 1

    然后测试一下不通系统上的差别

    2.1 在centos 7上修改/etc/hosts

    下图是dig的结果样例

    在这里插入图片描述

    可以看到DNS查询并没有受/etc/hosts影响

    2.2 在ubuntu 20上修改/etc/hosts

    下图是dig的结果样例
    在这里插入图片描述

    3. 自定义nameserver

    可以使用unbound来构建自定义的nameserver,在Centos或者Ubuntu下可以直接安装unbound服务;

    centos安装

    yum install unbound
    
    • 1

    ubuntu安装

    apt install unbound
    
    • 1

    默认的配置文件在/etc/unbound/unbound.conf

    安装完unbound后,可以通过命令unbound直接启动服务或者可以通过系统服务启动。

    下面是通过命令行启动

    unbound -v -d
    
    • 1

    unbound的日志在默认的配置中是写入到syslog中的,如果需要重定向到其他文件,可以修改unbound.cfg中如下的配置。

    示例中将日志重新向到/tmp/unbound.log中
    在这里插入图片描述
    如果需要启动时打印到标准输出流,则可以按注释中操作,将logfile的配置留为空。

    unbound的默认启动是在后台,所以在命令启动时,日志会刷一部分就结束了;如果想要一直在前台输出日志,则在启动命令中加入 -d参数。

    3.1常见的启动错误

    如下是按照上述步骤,将unbound日志输出到标准输出流中,这样可以看到启动时的异常,
    在这里插入图片描述
    这里的提示错误是”remote-control“相关的。

    在配置文件中将remote-control关闭,即可解决该问题。
    在这里插入图片描述
    正常启动的日志样例,这里的日志级别为-v
    在这里插入图片描述

    自定义域名的建议配置方式
    在/etc/unbound/local.d文件夹下,配置需要代理的域名即可,不要写到主配置文件中

    3.2 调试unbound

    使用dig或者nslookup可以测试测试unbound服务。
    如果没有安装dig,可以通过如下命令安装
    centos

    yum install bind-utils
    
    • 1

    ubuntu

    apt install bind-utils
    
    • 1

    dig使用命令如下:

    dig @ <测试域名>
    
    • 1

    @符号表示往哪一个DNS服务发送,如果不加@则需要修改/etc/resolve.conf文件

    配置允许访问该服务的IP地址,全放开则配置0.0.0.0/0 allow,否则请根据实际情况配置。
    在这里插入图片描述

    至此一个自定义的nameserver就搭建好了。在Server A上,可以修改/etc/resolv.conf来修改dns的地址。


    常见问题

    53端口占用问题

    在Ubuntu 系统中,53端口是被系统服务**/lib/systemd/systemd-resolved** 占用了。
    实际上它就是一个DNS的服务,只不过是解析本地的域名,包含了/etc/hosts中的配置,所以ubuntu与centos在本地域名的解析上存在在第二节中展示的不同。

    在Centos8中,同样53端口被系统服务dnsmasq占用了。它同systemd-resolved服务一样,为本地域名做代理。(注意,在centos7中无此服务)

    上诉两套系统中其实都有本地域名解析的解决方案了,所以如果仅仅是本地的域名解析问题,可以完全使用上面的两个服务而不需要再自己搭建unbound服务了。

    centos8 dnsmasq服务没有及时更新hosts中的配置

    与ubuntu中的systemd-resolved实时更新不同,centos8中的dnsmasq需要重启一下,才可以加载hosts中的改动。

    重启它可以使用如下命令

    killall -HUP dnsmasq
    
    • 1

    重启后再试一下即可。

    当然,需要体行的一点是,如果要使用systemd-resolved或者dnsmasq都要在本机的/etc/resolv.conf中加入本地服务IP,
    如何查看?

    执行如下命令

    netstat -nulp | grep ":53 "
    
    • 1

    结果示例如下,
    在这里插入图片描述

    然后加入到/etc/resolv.conf中
    在这里插入图片描述

  • 相关阅读:
    分享大数据培训班班型
    JDBC简介和快速入门
    Spring事务和事务的传播机制(JavaEE进阶系列7)
    spss显著性不高怎么调整数据?
    大数据-hadoop
    从几个开源项目浅谈IOS视频流输出方案
    【Hello Algorithm】滑动窗口内最大值最小值
    互联网医院|互联网医院建设三级等保不可缺
    java计算机毕业设计Web网上购书后台管理系统源码+mysql数据库+系统+lw文档+部署
    vxe是一款功能强大的table,有vue2/3版本
  • 原文地址:https://blog.csdn.net/mimiduck/article/details/127844687