首页
视频
资源
登录
原
Network DNS
2777
人阅读
2022/5/18 10:51
总访问:
2593942
评论:
0
收藏:
0
手机
分类:
容器编排
![Kubernetes](https://img.tnblog.net/arcimg/hb/274ef6f115de4c9b8e40ded5deb2f4c2.jpg "Kubernetes") >#Network DNS [TOC] 简介 ------------ tn2>DNS的全称是Domain Name System,DNS负责主机名称之间和互联网络地址之间的映射,在我们上网或者发送电子邮件的时候,一般都会使用主机名而部署IP地址,因为前者更容易记忆,但是对于计算机,使用数字(IP地址)则更为方便。DNS能够帮助我们将主机名转换成计算机更容易识别的IP地址。从而完成主机之间通信。DNS是一个层级的分布式的数据库,以C/S架构工作,它将互联网名称(域名)和IP地址的对应关系记录下来,可以为客户端提供名称解析的功能。它允许对整个数据库各个部分进行本地控制,借助备份和缓存机制,DNS将有足够的强壮性。DNS 数据库一层级的树状结构组织,最顶级的服务器被称为【根】(root),以表示,它是所有子树的根。root将自己划分为多个子域(subdomain),这些子域包括 com,net,org,gov,net 等等,这些子域被称为顶级域(Top Level Domain,TDL)。再进一步,各顶级域名再将自己划分成多个子域,子域还可以再划分子域,最后树的叶子节点就是某个域的主机。 ![](https://img.tnblog.net/arcimg/hb/21544dcaf2404be68373b117820f941b.png) tn2>每个域的名称服务器仅负责本域内的主机的名称解析,如果需要解析子域的主机,就需要再向其子域的名称服务器查询。这样一来,无论主机在哪个域内,都可以从根开始一级一级的找到负责解析此主机名称的域,然后完成域名解析。 DNS 解析步骤 ------------ tn2>客户端向某个DNS服务器发出请求,解析 www.kernel.org 的地址。 ![](https://img.tnblog.net/arcimg/hb/723cccba252041ecba6bcb5422f8f295.png) >- 服务器先向根名称服务器发出查询请求,根名称服务器的地址是内置在服务器端的,根名称服务器仅返回其下负责的.org域的名称服务器的地址 - DNS 服务器向 .org 域的名称服务器发出查询请求,得到 kernel.org 域的名称服务器的地址 - DNS 服务器向 kernel.org 域的名称服务器发出查询请求,该服务器发现请求的主机 www 就是本域下的主机名,于是返回 www.kernel.org 主机地址 - DNS 服务器将得到的结果返回给客户端。 DNS 缓存 ------------ tn2>在网络通信中,域名的使用频率非常高,一个域名在某段时间内可能被反复的使用,如果每次使用都向 DNS 服务器查询,DNS服务器也向其他服务器发出查询请求的话,将会消耗大量的网络带宽,并且速度也会非常慢。因此,一般在DNS客户端的服务器端都会有缓存,负责某个域的DNS服务器可以定义客户端缓存的时间。DNS TTL 间接控制缓存,从而避免用户体验。 ![](https://img.tnblog.net/arcimg/hb/c0b9a24031af44528ff0129cf2eef17d.png) tn2>在网络通信中,更长的缓存对于权威DNS服务器上的DDos攻击更健壮,DNS服务提供商上的DDoS攻击已损害了几个著名的网站。研究表明,DNS缓存可以大大降低DDoS对DNS的影响,前提是缓存的持续时间比攻击时间长。 Bind与实践 ------------ tn2>bind是linux系统下的一个DNS服务程序.bind-utils是bind软件提供的一组DNS工具包, 里面有一些DNS相关的工具.主要有:dig,host,nslookup,nsupdate.使用这些工具可以 进行域名解析和DNS调试工作. >### 安装 tn2>环境:Centos,我们可以通过如下命令进行安装。 ```bash yum -y install bind yum -y install bind-utils ``` tn2>关于相关的文件如下: `/etc/named.conf`————主要配置文件 `/etc/named.rfc1912.zones`————zone解析库 `/var/named`————zone解析库对应文件。<br/> 主配置文件`/etc/named.conf`包括: 监听端口(`listen-on port`)和ip地址 服务作用范围(本机还是指定网段还是全网)(`allow-query`) 递归还是迭代查询(`recursion`) 根区域解析文件(`zone`),其他区域文件可以看到有个`include "/etc/named.rfc1912.zones";`,这下面保存了localhost的区域文件,如果新添加的,卸载这个zones文件里,里面指向了zone文件地址。然后每一个zone文件,是在/var/named下面。 ![](https://img.tnblog.net/arcimg/hb/030bdf50061e4e11b31292e02a6d3ef9.png) ```bash #cat /etc/named.conf options { listen-on port 53 { 127.0.0.1; };//ipv4监听端口和ip地址,默认只有本地的 listen-on-v6 port 53 { ::1; };//ipv6的监听端口和ip地址 directory "/var/named";//指定DNS区域文件的路径 dump-file "/var/named/data/cache_dump.db";//DNS数据存放数据库的路径 statistics-file "/var/named/data/named_stats.txt";//指定服务器统计信息的文件路径 memstatistics-file "/var/named/data/named_mem_stats.txt";//记录内存使用的情况 allow-query { localhost; };//指定可以发送DNS请求的客户机地址段,也可以用any接受所有。 recursion yes; // 递归还是迭代查询 dnssec-enable yes; // dns安全扩展,可以改为no关闭 dnssec-validation yes; //可以改为no关闭 /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key";//ISC DLV KEY路径 managed-keys-directory "/var/named/dynamic";//管理密钥路径 pid-file "/run/named/named.pid";//服务器进程id记录文件 session-keyfile "/run/named/session.key";//会话密钥路径 }; //bind服务的日志参数 logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; //根区域的配置信息 zone "." IN { // 定义zone文件,这里是定义的根域的文件位置 type hint; //区域类型 file "named.ca"; //区域文件名,需要手动创建。范例文件为named.localhost }; include "/etc/named.rfc1912.zones"; // 把named.rfc1912.zones文件包含进来 include "/etc/named.root.key"; // 把/etc/named.root.key文件包含进来 ``` tn2>`type`字段指定区域的类型,对于区域的管理至关重要,一共分为5种: | 类型 | 描述 | | ------------ | ------------ | | master | 主DNS服务器,拥有区域数据文件,并对此区域提供管理数据。 | | slave | 辅助DNS服务器,拥有主DNS服务器的区域数据文件的副本,服务器DNS服务器会从主DNS服务器同步所有区域数据。 | | stub | stub区域与slave区域类似,但只复制主DNS服务器上的NS记录,而不像slave会复制所有区域数据。 | | forward | 转发配置域。 | | hint | 根域服务器的初始化使用的参数 | tn2>接着我们来看解析库里面的内容: ```bash cat /etc/named.rfc1912.zones ``` ![](https://img.tnblog.net/arcimg/hb/dd5262b06e624835a8be9c9d6102e9c3.png) ```bash # 截取了其中一个 zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; ``` tn2>意义如下: `localhost` : 在实际的生产服务器上,这里填写的是你的完整域,也就是你从云计算服务商购买申请的域名是什么就填写什么。 `type master;` : 前面我们见过type hint ,表明是根dns。这里的master,表明是主dns,还有一个值是slave,表明是从dns。当然还有转发,后面会接受。 `file "named.localhost";` : 解析的记录文件。这个named.localhost可以自己定义,定义完成后需要在 `/var/named/` 目录下有一个名称相同的文件与之匹配。 `allow-update { none; };` : 是否允许客户端动态更新,none表明不允许。<br/> 接下来我们来看看`/var/named/`目录下有哪些文件。 ![](https://img.tnblog.net/arcimg/hb/751ab483983c43e58c72d03b1fd6d92e.png) tn2>我们可以看到这些就是解析的文件,在文件里面的内容中我们可以看到。我们在NAPTR记录中将`scfcfpool05`映射成了`_sip._udp.scscf01`,在SRV记录条目中将`_sip._udp.scscf01`映射成了A记录条目中的`scscf01`,在A记录中就有我们对应的IP(10.107.171.33)了。 ![](https://img.tnblog.net/arcimg/hb/82fdbd9742024075bef6d68390127878.png) tn2>我们可以通过`nslookup`来进行解析。 ```bash # NAPTR 记录查询 nslookup -type=NAPTR scfcfpool05.ims.mnc001.mcc460.3gppnetwork.org # SRV 记录查询 nslookup -type=SRV scfcfpool05.ims.mnc001.mcc460.3gppnetwork.org # NAPTR 记录查询 nslookup -type=A scfcfpool05.ims.mnc001.mcc460.3gppnetwork.org ``` >### 实践 tn2>首先我们将本机设置为DNS服务器,首先我们修改`/etc/named.conf`文件,然后重启我们的`named`服务。 并且解析我们的`scfcfpool05.ims.mnc001.mcc460.3gppnetwork.org`来看一下解析的服务器地址,当然这是解析不了的因为我们还没有添加到解析库中。 ```bash # 需要删除ipv6 listen-on port 53 { 10.0.0.46; };//改成我们的主机 allow-query { any; }; ``` ```bash systemctl restart named systemctl status named ``` ![](https://img.tnblog.net/arcimg/hb/49b79e770f244b068477873559deff94.png) tn2>紧接着我们在`/etc/named.rfc1912.zones`中添加我们的解析项(区域),并且添加我们的文件`vi /var/named/ims.mnc001.mcc460.3gppnetwork.org`,里面的内容就从其他文件里面抄一下改改。 ```bash zone "ims.mnc001.mcc460.3gppnetwork.org" IN { type master; file "ims.mnc001.mcc460.3gppnetwork.org"; }; ``` tn2>添加相关NAPTR、SVR和A记录。我们只需要知道 ```bash $TTL 3H @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS @ A 127.0.0.1 AAAA ::1 ;NAPTR Query: scfcfpool05 NAPTR 50 50 "s" "SIP+D2U" "" _sip._udp.scscf01 scfcfpool05 NAPTR 50 50 "s" "SIP+D2U" "" _sip._udp.scscf02 scfcfpool05 NAPTR 50 50 "s" "SIP+D2U" "" _sip._tcp.scscf01 scfcfpool05 NAPTR 50 50 "s" "SIP+D2U" "" _sip._tcp.scscf02 ;SRV Query: _sip._udp.scscf01 SRV 0 0 5070 scscf01 _sip._tcp.scscf01 SRV 0 0 5070 scscf01 _sip._udp.scscf02 SRV 0 0 5070 scscf02 _sip._tcp.scscf02 SRV 0 0 5070 scscf02 ;A Query: scscf01 A 10.0.0.46 scscf02 A 10.0.0.46 scscf02 A 10.0.0.46 scscf02 A 10.0.0.46 scscf02 A 10.0.0.46 ``` tn2>将该文件添加到我们的`named`组下 ```bash chown named ims.mnc001.mcc460.3gppnetwork.org ``` tn2>然后我们修改我们DNS的解析。 ```bash vim /etc/resolv.conf nameserver 10.0.0.46 ``` tn2>最后重启我们的服务并进行测试。 ```bash systemctl restart named nslookup -type=NAPTR scfcfpool05.ims.mnc001.mcc460.3gppnetwork.org nslookup -type=SRV _sip._udp.scscf01.ims.mnc001.mcc460.3gppnetwork.org. nslookup -type=A scscf01.ims.mnc001.mcc460.3gppnetwork.org. ``` tn2>通过层层的解析,最后我们通过A记录解析出我们的IP。 ![](https://img.tnblog.net/arcimg/hb/35bb79accc484ae78f378c7dd24d3fb7.png) ![](https://img.tnblog.net/arcimg/hb/a0d3dfd331624e4c84ad48e7d8cc4f87.png) ![](https://img.tnblog.net/arcimg/hb/40745549a59e4cb49130a7da1504b64f.png) DNS Proxy/Relay ------------ tn2>在使用了DNS代理/中继(DNS Proxy/Relay)功能的组网中,DNS Client将DNS 请求报文直接发送给DNS Proxy/Relay。DNS Proxy/Relay将收到的DNS请求报文转发至DNS Server,并在收到DNS Server的应答报文后将其返回给DNS Client,从而实现域名解析。由此,当DNS Server的地址发生变化时,只需改变DNS Proxy/Relay上的配置,无需逐一改变局域网内每个DNS Client的配置,从而简化了网络管理。 >### DNS Proxy与DNS Relay的功能实现差异 tn2>—— DNS Relay和DNS Proxy功能相同,二者的实现差异在于转发DNS请求报文前是否会先查询本地域名解析表(包 括静态域名解析表以及本地域名缓存表)。 —— DNS Proxy接收到DNS Client的DNS请求报文后会先查找本地域名解析表,如果未查询到对应的解析表项,才将 DNS请求报文转发给DNS Server。 —— DNS Relay接收到DNS Client的DNS请求报文后不会查询本地域名解析表,而是直接将其转发给DNS Server进行 解析。一方面节省了DNS Relay上的DNS缓存开销,另一方面,保证了DNS Client获取解析结果的实时性(如果 DNS Server上域名与IP地址发生变化而DNS Proxy的缓存表未及时更新,会导致DNS Client获取的解析结果错 误)。<br/> 设备使能DNS Proxy功能后,可用于转发内部的DNS客户端和外部DNS服务器之间的DNS请求和应答报文,当DNS 服务器地址发生变化时,只需要在DNS Proxy进行配置,不需要在DNS客户端上进行逐一配置,便于网络的集中管 理。 DNS Relay和DNS Proxy功能相同,区别在于DNS Proxy接收到DNS客户端的DNS查询报文后会查找本地缓存,而 DNS Relay不会查询本地缓存,而是直接转发给DNS服务器进行解析,从而节省了DNS Relay上的DNS缓存开销。 ![](https://img.tnblog.net/arcimg/hb/13e1fcdf7c8d4a71b238871a268ee2e3.png) >### DNS Proxy的工作过程 tn2>1.DNS Client将DNS请求报文发送给DNS Proxy,即请求报文的目的地址为DNS Proxy的IP地址。 2.DNS Proxy收到请求报文后,先查找本地静态域名解析表,再根据查询结果判断是否继续查找本地域名缓存表。 ——如果查询到对应的解析表项,则DNS Proxy直接通过DNS应答报文将域名解析结果返回给DNS Client。 ——如果查询不到对应的解析表项,则DNS Proxy将报文转发给DNS Server,通过DNS Server进行域名解析。 3.DNS Proxy收到DNS Server的应答报文后,记录域名解析的结果,并将报文转发给DNS Client。<br/> 只有当DNS Proxy上存在DNS Server地址,且存在到达DNS Server的路由时,DNS Proxy才会向DNS Server发送域名解析请求。否则,DNS Proxy不会向DNS Server发送域名解析请求,也不应答DNS Client的请求 >### 简单示例 ![](https://img.tnblog.net/arcimg/hb/0b957b79ccfa4504a85a655d934d3780.png) tn2>配置Server1为DNS服务器,并在AR1中开启DNS Proxy,命令如下: ```bash dns resolve dns server 10.1.1.2 dns proxy enable interface GigabitEthernet0/0/0 ip address 192.168.1.1 255.255.255.0 interface GigabitEthernet0/0/1 ip address 10.1.1.1 255.255.0.0 ip route-static 0.0.0.0 0.0.0.0 10.1.1.2 ```
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
168篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
18篇
threejs
2篇
人物
1篇
嵌入式
2篇
python
13篇
HuggingFace
8篇
pytorch
9篇
opencv
6篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术