您现在的位置是:首页 > 技术文章 > 详情<<文章列表阅读 局域网域名解析服务配置——BIND域名解析 DNS BIND 域名解析 named wjyuian 2019-09-09 498 0 已经很久没更新博客了,最近在忙公司“上云”的项目,也就是将应用从自有IDC机房迁移到阿里云上。于是乎,服务器相关配置的任务都落到我头上了: + 服务器hostname设置 + 搭建内网域名解析服务 + 服务器nameserver配置 ### BIND > BIND(Berkeley Internet Name Domain)是现今互联网上最常使用的DNS软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服务器的九成。BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。 #### 安装BIND服务 在事先准备好的DNS服务器A(IP地址是172.16.1.1)上,通过命令来安装BIND服务: ```bash yum install bind.x86_64 -y ``` 安装成功之后,可以通过命令查看关于BIND服务的文件目录: ```bash [root@dns-server etc]# rpm -ql bind /etc/logrotate.d/named /etc/named /etc/named.conf /etc/named.iscdlv.key /etc/named.rfc1912.zones /etc/named.root.key /etc/rndc.conf /etc/rndc.key /usr/sbin/named /usr/sbin/named-checkconf /usr/sbin/named-checkzone /usr/sbin/named-compilezone /usr/sbin/named-journalprint /var/named /var/named/data /var/named/dynamic /var/named/named.ca /var/named/named.empty /var/named/named.localhost /var/named/named.loopback /var/named/slaves [root@dns-server etc]# ``` + /etc/named.conf:bind的主配置文件 + /etc/named.rfc1912.zones:定义域名空间解析明细的文件 + /usr/sbin/named-checkconf:检测/etc/named.conf文件语法 + /usr/sbin/named-checkzone:检测zone和对应zone文件的语法 #### named.conf配置 ```bash [root@dns-server etc]# more named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // See the BIND Administrator\'s Reference Manual (ARM) for details about the // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html options { # 服务在ipv4提供服务,默认端口是53,允许的访问地址是本地;可以修改为`any`,表示不限 listen-on port 53 { 127.0.0.1; }; # ipv6监听 listen-on-v6 port 53 { ::1; }; # 工作目录 directory "/var/named"; # 当执行rndc dumpdb时服务器dump文件的路径. dump-file "/var/named/data/cache_dump.db"; # 执行rndc stats将服务器的统计信息写入文件,默认为named.stats statistics-file "/var/named/data/named_stats.txt"; # 默认为named.memestats,当退出的服务的时候将服务器的统计信息写到文件中. memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; # 指定哪个服务器可以进行普通DNS查询,如果在zone中指定,将覆盖全局参数,默认允许来自全部主机的查询,配置 any就是允许所有服务器进行DNS查询 allow-query { any; }; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; # 是否开启递归查询 # Domain Name System Security Extensions,DNS安全扩展,是有IETF提供的一系列安全认证机制 dnssec-enable no; # 是否支持DNSSEC开关,默认为yes dnssec-validation no; # 是否进行DNSSEC确认开关,默认为no /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; # type只有3种参数:hint/master/slave.只有"."对应的type为hint,其它zone的类型只能为master或slave,即DNS主机和DNS从机。 # 指定了解析文件的位置,解析文件中记录着域名与IP的对应关系。它的位置在/var/named/chroot/var/named/data下。 file "named.ca"; }; include "/etc/named.rfc1912.zones"; # 解析文件列表的位置 include "/etc/named.root.key"; ``` 所以,一般情况下,只要将`listen-on port 53 {127.0.0.1;};` 中默认的`127.0.0.1`为`any`;`allow-query { localhost; };`改为`allow-query { any; };`即可。 #### 配置域名解析 假设我要配置的域名解析,主域名是`oomabc.com`,二级域名是`img.oomabc.com`,映射到172.16.1.2。 首先在`/etc/named.rfc1912.zones`文件的最后,添加一个zone配置: ```bash // oomabc zone "oomabc.com" IN { type master; file "oomabc.com.zone"; # 对应具体解析配置文件,默认路径是在/var/named/下面 }; ``` 然后在`/var/named/`目录下创建对应的zone文件`oomabc.com.zone`。 ```bash [root@dns-server ~]# vim /var/named/oomabc.com.zone ``` 文件内容: ```bash $TTL 600 $ORIGIN oomabc.com. # 注意最后面的点号 @ IN SOA ns1.oomabc.com. admin.oomabc.com. ( # 注意最后面的点号 20190906 1H 5M 1W 10M ) IN NS ns1 ns1 IN A 172.16.1.1 IN MX 10 mail1 mail1 IN A 172.16.1.1 img IN A 172.16.1.2 ``` #### 检查域名配置文件 ```bash [root@dns-server etc]# named-checkconf [root@dns-server etc]# named-checkzone "hunteron.com" /var/named/hunteron.com.zone /var/named/hunteron.com.zone:3: SOA record not at top of zone (hunteron.com.hunteron.com) zone hunteron.com/IN: loading from master file /var/named/hunteron.com.zone failed: not at top of zone zone hunteron.com/IN: not loaded due to errors. $ORIGIN hunteron.com. [root@dns-server etc]# named-checkzone "hunteron.com" /var/named/hunteron.com.zone zone hunteron.com/IN: loaded serial 20190906 OK ``` 重启named服务:`systemctl restart named.service`。 #### 配置nameserver 通过另一台客户端机,进行域名解析测试。修改`/etc/resolvconf`配置文件,在文件最后一行新增`nameserver 172.16.1.1`。 然后重启network:`service network restart`。 这时候在控制台ping我们配置的域名`img.oomabc.com`就能获得`172.16.1.2`的IP地址: ```bash [root@test ~]# ping img.oomabc.com PING img.oomabc.com (172.16.1.2) 56(84) bytes of data. 64 bytes from 172.16.1.2 (172.16.1.2): icmp_seq=1 ttl=64 time=0.167 ms 64 bytes from 172.16.1.2 (172.16.1.2): icmp_seq=2 ttl=64 time=0.137 ms 64 bytes from 172.16.1.2 (172.16.1.2): icmp_seq=3 ttl=64 time=0.137 ms ^C --- img.oomabc.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.137/0.147/0.167/0.014 ms [root@test ~]# ``` #### 阿里云ECS服务器修改nameserver 我们使用的是阿里云ECS服务器,通过修改`/etc/resolvconf`增加nameserver服务器,只能临时生效,实例重启或者network重启之后会被覆盖。 所以需要修改另一个文件:`/etc/sysconfig/network-scripts/ifcfg-eth0`,在文件最后增加一行: ```bash DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes DNS1=172.16.1.1 ``` 也可以通过命令:`echo "DNS1=172.16.1.1" >> /etc/sysconfig/network-scripts/ifcfg-eth0` 然后重启network:`service network restart`即可。 如果需要配置nameserver的服务器很多,可以通过批量脚本来进行配置并重启network。 相关文章 SpringBoot2从零开始(二)——多数据源配置 Nginx的nginx.conf配置部分解释 Maven项目一键打包、上传、重启服务器 从零开发参数同步框架(三)—— 服务端编码 从零开发参数同步框架(六)—— 简版配置中心 Java网络编程之Netty学习(三)—— RPC的服务注册、发现、降级 Docker学习——创建一个JDK+Tomcat的Solr服务镜像 开发一个简单的集成编译、打包、服务检测、依赖发布的模块 搜索引擎入门——聊聊schema.xml配置 栏目导航 关于我 不止技术 工程化应用(23) 技术学习/探索(32) 自娱自乐(2) 还有生活 随便写写(1) 娱乐/放松(1) 点击排行 SpringBoot2从零开始(二)——多数据源配置 搜索引擎进阶——IK扩展之动态加载与同义词 从零开发参数同步框架(二)—— 前期准备之工具类 Nginx的nginx.conf配置部分解释 springMVC中controller参数拦截问题处理 Maven项目一键打包、上传、重启服务器 微信小程序深入踩坑总结 微信小程序的搜索高亮、自定义导航条等踩坑记录 标签云 Java(19) 搜索引擎(13) Solr(7) 参数同步(6) SpringBoot(4) ES(3) ElasticSearch(3) JVM(3) Netty(3) Spring(3) mongoDB(3) 设计模式(3) Curator(2) Docker(2) Dubbo(2) 大家推荐 魔神重返战场!厄祭战争的巴巴托斯:第四形态 搜索引擎入门——Solr查询参数详解以及如何使用Java完成对接 来聊一聊这个被淘汰的图片验证码 搜索引擎入门——聊聊schema.xml配置 搜索引擎入门——启动第一个Solr应用 君子性非异也,善假于物也——功能强大的Postman 择其善而从之——我为什么开始学习ElasticSearch 实现一个关于队列的伪需求是一种怎样的体验