• 使用dockerbind搭建DNS服务器


    • 使用docker-bind搭建私有的DNS服务器,在整个内网集群中使用域名来管理服务器已经进行服务配置
    • 以下说明是基于Ubuntu20.04的,如果要构建在树莓派上运行的docker镜像,参考文章

    配置与安装

    本机DNS配置

    sudo nano /etc/systemd/resolved.conf
    
    # 更改为以下内容
    # 假设docker-bind所在服务器IP地址为192.168.3.37
    [Resolve]
    DNS=192.168.3.37
    #FallbackDNS=
    #Domains=
    #LLMNR=no
    #MulticastDNS=no
    #DNSSEC=no
    #DNSOverTLS=no
    #Cache=no
    DNSStubListener=no
    #ReadEtcHosts=yes
    
    sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
    • 参考 怎样释放systemd-resoved使用的53端口
    • 配置后,此时/etc/resolv.conf的内容为

      # This file is managed by man:systemd-resolved(8). Do not edit.
      #
      # This is a dynamic resolv.conf file for connecting local clients directly to
      # all known uplink DNS servers. This file lists all configured search domains.
      #
      # Third party programs must not access this file directly, but only through the
      # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
      # replace this symlink by a static file or a different symlink.
      #
      # See man:systemd-resolved.service(8) for details about the supported modes of
      # operation for /etc/resolv.conf.
      
      nameserver 192.168.3.37
      nameserver 192.168.3.1
      • 第一个是我们指定的bind构建的dns服务器
      • 第二个是本地的子网的网管的dns服务器
      • 注意先后顺序不能更改,如果内容并非如此的话,可以删除/etc/resolv.conf并重新执行sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
      • 如果并没有/run/systemd/resolve/resolv.conf文件,说明执行了systemctl disable systemd-resolvedservice systemd-resolved stop,因此执行systemctl enable systemd-resolvedservice systemd-resolved start并重启即可

    docker-bind安装

    选定集群中用作搭建DNS服务器的服务器执行下列命令

    # 在关闭本机解析服务之前拉取镜像
    docker pull sameersbn/bind:9.16.1-20200524
    # 使用docker容器部署bind服务
    docker run \ 
    --name bind \ 
    -d \
    --restart=always \
    --publish 53:53/tcp \
    --publish 53:53/udp \ 
    --publish 10000:10000/tcp \ 
    --volume docker-bind:/data \
    sameersbn/bind:9.16.1-20200524

    docker-bind配置

    • 假设服务器IP地址为192.168.3.37,本地根域名为dev
    • 访问Webmin管理界面,地址为:https://192.168.3.37:10000/,默认用户名:root,密码:password,相关设置如下:
    1. Servers → BIND DNS Server → Global Server Options → Access Control Lists,添加:

      1. allow-query any
    2. Servers → BIND DNS Server → Global Server Options → Forwarding and Transfers → Global forwarding and zone transfer options,添加转发dns服务器IP地址:

      1. 8.8.8.8
      2. 8.8.4.4
      3. 暂时只添加了Google的DNS。添加其他的一些国内的DNS(如AliDNS),反而会有问题(ntp 服务器访问失败等等)
    3. Servers → BIND DNS Server → Existing DNS Zones → Create Master Zone

      1. Zone type: Forward (Names to Addresses)
      2. Domain name / Network: dev
      3. Master server: a.dev
      4. Email address: admin@dev
    4. Servers → BIND DNS Server → Existing DNS Zones → Create Master Zone

      1. Zone type: Reverse (Addresses to Names)
      2. Domain name / Network: 192.168.3
      3. Master server: a.dev
      4. Email address: admin@dev
    5. Servers → BIND DNS Server → Existing DNS Zones → dev

      1. Address中添加DNS记录

        1. Name: a,Address: 192.168.3.37,点击Create,会自动添加并更新逆向地址记录
        2. 按需添加其他DNS记录

          1. 可能需要重启容器才会是新添加的DNS记录生效
      2. Servers → BIND DNS Server → Existing DNS Zones → dev→ Name Server确认存在域名服务器地址

        1. Zone Name: dev.
        2. Name Server: a.dev.

    测试

    更新本机nameservers设置,设定为服务器IP地址,并执行以下命令检查DNS服务器工作是否正常

    nslookup www.baidu.com
    nslookup a.dev
    nslookup b.dev
    • 如果出现;; Got recursion not available from 192.168.3.37, trying next server的问题,执行下述操作(更方便的做法是按照文件的内容 在dashboard中进行修改:Servers → BIND DNS Server → Global Server Options → Edit Config File)

       
      docker cp  bind:/etc/bind/named.conf.options ./
      docker cp  bind:/etc/bind/named.conf ./
      
      # 分别对两文件进行修改
      # named.conf
      
      acl trusted {
          192.168.0.0/16;
          10.153.154.0/24;
          localhost;
          localnets;
          };
      // This is the primary configuration file for the BIND DNS server named.
      //
      // Please read /usr/share/doc/bind9/README.Debian.gz for information on the
      // structure of BIND configuration files in Debian, *BEFORE* you customize
      // this configuration file.
      //
      // If you are just adding zones, please do that in /etc/bind/named.conf.local
      
      include "/etc/bind/named.conf.options";
      include "/etc/bind/named.conf.local";
      include "/etc/bind/named.conf.default-zones";
      
      # named.conf.options
      options {
              directory "/var/cache/bind";
      
              // If there is a firewall between you and nameservers you want
              // to talk to, you may need to fix the firewall to allow multiple
              // ports to talk.  See http://www.kb.cert.org/vuls/id/800113
      
              // If your ISP provided one or more IP addresses for stable
              // nameservers, you probably want to use them as forwarders.
              // Uncomment the following block, and insert the addresses replacing
              // the all-0's placeholder.
      
              // forwarders {
              //      0.0.0.0;
              // };
      
              //========================================================================
              // If BIND logs error messages about the root key being expired,
              // you will need to update your keys.  See https://www.isc.org/bind-keys
              //========================================================================
              dnssec-validation auto;
      
              listen-on-v6 { any; };
              forwarders {
                      8.8.8.8;
                      8.8.4.4;
                      };
              allow-query { any; };
              allow-recursion { trusted; };
              allow-query-cache { trusted; };
      };
      
      # 写回到容器中
      docker cp  ./named.conf.options bind:/etc/bind/named.conf.options
      docker cp  ./named.conf bind:/etc/bind/named.conf
      # 重启容器
      docker restart bind

    参考

    1. sameersbn / docker-bind
    2. Setup Bind DNS Using Webmin on Debian 10
    3. 在CentOS 8上使用Webmin配置BIND DNS服务器
    4. DNS Forwarder and Transfer using Bind and Webmin
    5. BIND DNS Server
    6. DNS之BIND使用小结(Forward转发)
  • 相关阅读:
    简单的使用rabbitmq的例子
    装饰者模式
    Zinterstore 命令
    策略模式
    简单工厂模式
    getFields()与getDeclaredFields()区别
    解决Jetty下EL版本冲突的问题
    网站ssl配置
    webservice 项目 配置wsdl
    js前端clone的要诀
  • 原文地址:https://www.cnblogs.com/mouseleo/p/15534525.html
Copyright © 2020-2023  润新知