背景介绍:总公司与北京分公司均由总公司进行统一管理。总公司的主从DNS担任解析总公司服务器与北京分公司的服务器解析任务。总公司DNS委派其他两个公司管理自己域下的服务器解析任务。要求任何一个节点都能解析到公司全部域名的结果。这里仅仅是搭建DNS服务器,以解析的结果为验证。所以暂不考虑网络方面的事情,只要确保DNS能相互解析就算配置成功。

一、步骤梳理

  • 设定主从服务器的配置
  • 设定主服务器字节区域解析数据库
  • bj.jd.com子域分配给自己管理
  • yd.jd.comsh.jd.com分别委派给各自的服务器
  • 子域服务器设定各自的区域解析数据库
  • 子域服务器设定将jd.com域转发至主从服务器中

二、bind配置文件结构

本地解析文件
/etc/hosts
主配置文件
/etc/named.conf
/etc/named.rfc1912.zones
/etc/rndc.key
解析库文件
/var/named
\----slaves #文件夹,当为slave,则在master同步的数据放在此文件
\----named.ca #互联网根的信息
\----name #自定义的数据文件放在此目录下

三、搭建过程

1.主DNS服务器

安装bind并配置DNS的主配置文件

//安装bind
yum install bind
//
//配置bind的主配置文件
vim /etc/named.conf
listen-on port 53 { 10.0.0.57; }; //设置监听的IP
allow-query { any; }; //设置允许所有人访问DNS服务
forwarders { 114.114.114.114; }; //设定转发,本机没有的记录全部转发至其他DNS
dnssec-enable no; //关闭DNS安全认证
dnssec-validation no; //关闭DNS安全确认
include "/etc/named.rfc1912.zones"; //引入外部区域配置文件

在区域配置文件/etc/named.rfc1912.zones创建新的解析区域

//修改区域配置文件
vim /etc/named.rfc1912.zones
zone "jd.com" IN { //创建jd.com域
type master; //在jd域为主DNS
file "jd.com.zone"; //区域数据库的配置文件名称,默认路径在/var/named/.....
}; zone "bj.jd.com" IN { //创建子域bj.jd.com
type master; //在子域中为主DNS
file "bj.jd.com.zone"; //区域数据库的配置文件名称,默认路径在/var/named/.....
};

创建解析数据库文件,数据库默认全部在/var/named目录下,创建的区域数据库文件名一定要与上面配置的区域数据库名称一致。NS类型的记录为设置管理此域的服务器,因为配置了主从两个服务器所以要将两个服务器都创建NS记录。但是仅仅创建NS记录是不够的,因为客户端访问的时候不能知道到底谁是NS服务器,所以还需要给管理此域的服务器建立一条A记录,解析出管理此域的服务器。

vim /var/named/jd.com.zone
$TTL 1D
@ IN SOA dns1 root.jd.com. (
16 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1 //NS指定管理此域的服务器
NS dns2 //NS指定管理此域的服务器
sh NS dns.sh //将sh子域委派给sh.jd.com进行管理
yd NS dns.yd //将yd子域委派给sh.yd.com进行管理
dns1 A 10.0.0.57 //为管理此域的服务器与子域服务器创建A记录
dns2 A 10.0.0.56
dns.sh A 10.0.0.66
dns.yd A 10.0.0.67
www A 10.10.0.10 //为主服务器直接管理的解析记录创建A记录
oa A 10.10.0.11
sql A 10.10.0.12

因在/etc/named.rfc1912.zones文件中创建了两个区域,所以一共要对应两个区域解析数据库。上面创建的数据库时给jd.com创建的数据文件。现在需要创建的是bj.jd.com的数据库文件,也就是Master服务器自己管理的子域。因为总公司与北京分公司都在北京,所以主DNS直接自己管理自己的子域。

$TTL 1D
@ IN SOA dns1 root.bj.jd.com. (
5 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
NS dns2
dns1 A 10.0.0.57
dns2 A 10.0.0.56
ftp A 10.20.0.12
oa A 10.20.0.13

2.从服务器

修改从服务器的主配置文件

vim /etc/named.conf
options {
listen-on port 53 { 10.0.0.56; };
allow-query { any; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
};
include "/etc/named.rfc1912.zones";

创建区域文件,因为从服务器只是同步主服务器的数据,所以不需要解析的数据库文件,只需要设定好谁是主服务器即可。

zone "jd.com" IN {                       //设定需要同步的区域,主从是相对于区域而言的所以要设定区域。
type slave; //设定服务器类型为slave从
masters { 10.0.0.57 ;}; //设定主服务器的IP地址
file "slaves/jd.com.zone"; //主服务配置文件都会在/var/named/slaves目录下,设定同步回来的数据库文件名
}; zone "bj.jd.com" IN { //含义与上面类似,这里设置同步自己管理的子域
type slave;
masters { 10.0.0.57 ;};
file "slaves/bj.jd.com.zone";
};

3.印度

后面印度分公司与上海分公司的配置除了设定一下需要转发的区域,其他的跟之前的主服务器配置都是大同小异。所以下面的仅仅对不通配置进行标注。

options {
listen-on port 53 { 10.0.0.67; };
// listen-on-v6 port 53 { ::1; };
allow-query { any; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
};
include "/etc/named.rfc1912.zones";

设定转发区域。由于子公司仅仅管理自己的yd.jd.com域,那公司内部需要访问总公司的域名,就需要将其转发至上游的总公司。

zone "yd.jd.com" IN {
type master;
file "yd.jd.com.zone";
}; zone "jd.com" IN { //设定转发,客户端访问jd.com域时全部转发至指定的服务器
type forward;
forward first;
forwarders {10.0.0.57;}; //设定转发至10.0.0.57服务器。
};

创建印度分公司的区域解析文件

$TTL 1D
@ IN SOA dns root.yd.jd.com. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns
dns A 10.0.0.67
oa A 10.40.0.13
ftp A 10.40.0.12

4.上海

修改主配置文件

options {
listen-on port 53 { 10.0.0.66; };
listen-on-v6 port 53 { ::1; };
allow-query { any; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
};
include "/etc/named.rfc1912.zones";

创建区域记录,设定转发

zone "sh.jd.com" IN {
type master;
file "sh.jd.com.zone";
}; zone "jd.com" IN { //设定转发,客户端访问jd.com域时全部转发至指定的服务器
type forward;
forward first;
forwarders {10.0.0.57;}; //设定转发至10.0.0.57服务器。
};

创建上海分公司自己管理的区域解析文件。

$TTL 1D
@ IN SOA dns root.sh.jd.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns
dns A 10.0.0.66
ftp A 10.30.0.12
oa A 10.30.0.1

四、结果测试

将windwos的DNS设置为10.0.0.66,然后尝试解析10.0.0.67管理的域。成功得到解析结果。

五、测试工具

dig [-t type] name [@SERVER] [query options]
dig只用于测试dns系统,不会查询hosts文件进行解析
#常用组合
dig www.taobao.com @10.0.0.10 #指定以10.0.0.10为DNS进行解析
dig +trace taobao.com #跟踪解析的过程

六、注意事项

  • 权限:BIND安装时会创建一个用户,BIND运行也是用此用户的身份运行的。所以在解析的时候要确保创建的namde用户拥有对数据可的读权限。
  • 端口:在bind的主配置文件named.conf确保监听的端口已经设置、确保可以对所有人提供DNS服务。
  • 主从更新机制:当Master的版本号变大时,Slave才会同步Master上的数据。
  • SELinux:SELinux安全的可能让自己也无法访问服务,索性直接关闭
  • Iptables:当任何配置都没有错误的时候注意防火墙是否配置正确
  • 创建委派:创建委派一定要将主主配置文件dnssec-enablednssec-validation设置为no
  • 其他疑问:鸟哥的文章或许能解开你的疑惑鸟哥官网

七、安全相关

在全局配置文件中/etc/named.conf可以配置与安全相关的选项

  • allow-query {}: 允许查询的主机;白名单
  • allow-transfer {}:允许区域传送的主机;白名单
  • allow-recursion {}: 允许递归的主机,建议全局使用
  • allow-update {}: 允许更新区域数据库中的内容

七、实验中遇到的坑

  • 启动服务时提示:Failed to start Berkeley Internet Name Domain (DNS).

    解决办法:多半是因为配置文件写错,根据systemclt status named 查看报警的具体配置
  • rndc reload同步配置rndc: neither /etc/rndc.conf nor /etc/rndc.key was found

    解决办法:这个是由于key的问题,可以忽略不管付传送门
  • 添加域后重启服务提示 loading from master file sh.jd.com.zone; failed: file not found

    解决办法:检查主配置文件与数据库文件的名字是否相符
  • 创建委派后提示:zone jd.com/IN: sh.jd.com/NS 'sh.jd.com' (out of zone) has no addresses records (A or AAAA)配置文件检查无误,返回但是解析无返回结果

    解决办法:在父域中创建委派,然后通过named-checkzone命令检查区域配置文件,一直提示A记录不存在。检查父域到子域能否ping通,检查子域防火墙是否关闭

企业内部DNS跨国配置案例的更多相关文章

  1. DNS服务器安装配置案例详解

    案例配置要求:假设有一个域名:tianyik.com主机为:192.168.31.36    mail 192.168.31.37    www  192.168.31.38    pop --> ...

  2. Kubernetes DNS服务配置案例

    首先创建DNS服务的RC配置文件skydns-rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: kube-dns-v ...

  3. 搭建企业内部DNS服务器,docker 部署内部 dnsmasq

    获取镜像 docker pull jpillora/dnsmasq 配置域名 # http://oss.segetech.com/intra/srv/dnsmasq.conf #log all dns ...

  4. 单位内部DNS架设及域名解析服务

    越来越多的企业将企业内部局域网通过光缆.交换机等高速互连设备连接起来,形成较大规模的中型网络,网络上的主机和用户也随之日渐增多.作为 Internet的缩影,企业内部网上的各类服务器(如WWW服务器. ...

  5. 企业内部在centos7.2系统中必杀技NTP时间服务器及内网服务器时间同步(windows和linux客户端同步)

    网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议.NTP的用途是把计算机的时间同步到某些时间标准.目前采用的时间标准是世界协调时UTC(Unive ...

  6. CISCO ASA 5505 经典配置案例

    nterface Vlan2 nameif outside  ----------------------------------------对端口命名外端口  security-level 0 -- ...

  7. (转)搭建企业内部yum仓库(centos6+centos7+epel源)

    搭建企业内部yum仓库(centos6+centos7+epel源) 原文:https://www.cnblogs.com/nulige/p/6081192.html https://www.linu ...

  8. DNS域名配置

    1.什么是DNS 2.DNS层次介绍及基础内容 3.DNS的工作原理及过程 域名服务器配置实战:    4.主域名服务器配置     5.辅域名服务器配置     6.缓存域名服务器配置 1.什么是D ...

  9. 使用BIND搭建内部DNS服务

    ​​‌‌​​​‌‌​‌​​‌‌‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​‌ ...

随机推荐

  1. python并发编程之多进程(实现)

    一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...

  2. 华硕笔记本电脑Win10改Win7设置U盘启动

    华硕笔记本电脑Win10改Win7设置U盘启动 尝试开机按ESC选择前面没有UEFI项的USB启动: 1,在BIOS设置里advanced菜单,把 Lgeacy USB support选择为enabl ...

  3. 理解javascript模块化(转)

    模块化是一个通用的编程最佳实践.程序的模块化使我们可以更方便地使用别人的代码,想要什么功能,就加载什么模块,从而提高代码的利用效率,增加开发速度. 模块就像积木,有了它,我们可以搭出各种各种功能样式的 ...

  4. [HTTP] PHP 实现 HTTP Server 原理

    单进程服务器简陋版: <?php /** * Single http server. * * Access http://127.0.0.1:8081 * * @license Apache-2 ...

  5. c# 类属性和方法

    属性 public 类字段 就相当于c#里面暴露给外面的属性 类似nodejs的 module.exports 但是属性又不同于普通的字段,属性只是外部包装字段 没有自己的任何含量 类似退换后的方法. ...

  6. 机器学习00:如何通过Python入门机器学习

    我们都知道机器学习是一门综合性极强的研究课题,对数学知识要求很高.因此,对于非学术研究专业的程序员,如果希望能入门机器学习,最好的方向还是从实践触发. 我了解到Python的生态对入门机器学习很有帮助 ...

  7. BZOJ 4129: Haruna’s Breakfast [树上莫队 分块]

    传送门 题意: 单点修改,求一条链的mex 分块维护权值,$O(1)$修改$O(S)$求mex...... 带修改树上莫队 #include <iostream> #include < ...

  8. BZOJ 3105: [cqoi2013]新Nim游戏 [高斯消元XOR 线性基]

    以后我也要用传送门! 题意:一些数,选择一个权值最大的异或和不为0的集合 终于有点明白线性基是什么了...等会再整理 求一个权值最大的线性无关子集 线性无关子集满足拟阵的性质,贪心选择权值最大的,用高 ...

  9. CF 235C. Cyclical Quest [后缀自动机]

    题意:给一个主串和多个询问串,求询问串的所有样子不同的周期同构出现次数和 没有周期同构很简单就是询问串出现次数,|Right| 有了周期同构,就是所有循环,把询问串复制一遍贴到后面啊!思想和POJ15 ...

  10. 树莓派小车(三)Python控制小车

    正文之前 由于最近忙于复习赶考,所以暂时没有拿起树莓派小车,直到昨天,终于空出时间来把代码整理一下来和大家分享. 正文 在树莓派小车系列之二中,讲到了树莓派的引脚定义方式有两种: PHYSICAL N ...