2015-01-28 15:12:42 zapperstab 阅读数 4928
  • 网络工程师DNS域名解析强化训练视频课程

    网络工程师考试考察知识点繁多,形式多样。如何有效把握每种考察形式,拿到相应分数?这是历年考生挠头的事情。本系列课程紧抓考生痛点,对网工考试中重点题型分门别类讲解,反复强化训练,助力考生查缺补漏,拿到相应分数。本次分课程重点讲解了理解题型中DNS解题方法。通过基本概念阐述->实战配置演示->全真模拟题强化训练,三大步骤帮助考生掌握DNS解题方法,拿到相应分数。

    3238 人正在学习 去看看 徐朋
//DNS Query Program on Linux
//Author : Silver Moon (m00n.silv3r@gmail.com)
//Dated : 29/4/2009

//Header Files
#include<stdio.h> //printf
#include<string.h>    //strlen
#include<stdlib.h>    //malloc
#include<sys/socket.h>    //you know what this is for
#include<arpa/inet.h> //inet_addr , inet_ntoa , ntohs etc
#include<netinet/in.h>
#include<unistd.h>    //getpid

//List of DNS Servers registered on the system
char dns_servers[10][100];
int dns_server_count = 0;
//Types of DNS resource records :)

#define T_A 1 //Ipv4 address
#define T_NS 2 //Nameserver
#define T_CNAME 5 // canonical name
#define T_SOA 6 /* start of authority zone */
#define T_PTR 12 /* domain name pointer */
#define T_MX 15 //Mail server

//Function Prototypes
void ngethostbyname(unsigned char*, int);
void ChangetoDnsNameFormat(unsigned char*, unsigned char*);
unsigned char* ReadName(unsigned char*, unsigned char*, int*);
void get_dns_servers();

//DNS header structure
struct DNS_HEADER {
	unsigned short id; // identification number

	unsigned char rd :1; // recursion desired
	unsigned char tc :1; // truncated message
	unsigned char aa :1; // authoritive answer
	unsigned char opcode :4; // purpose of message
	unsigned char qr :1; // query/response flag

	unsigned char rcode :4; // response code
	unsigned char cd :1; // checking disabled
	unsigned char ad :1; // authenticated data
	unsigned char z :1; // its z! reserved
	unsigned char ra :1; // recursion available

	unsigned short q_count; // number of question entries
	unsigned short ans_count; // number of answer entries
	unsigned short auth_count; // number of authority entries
	unsigned short add_count; // number of resource entries
};

//Constant sized fields of query structure
struct QUESTION {
	unsigned short qtype;
	unsigned short qclass;
};

//Constant sized fields of the resource record structure
#pragma pack(push, 1)
struct R_DATA {
	unsigned short type;
	unsigned short _class;
	unsigned int ttl;
	unsigned short data_len;
};
#pragma pack(pop)

//Pointers to resource record contents
struct RES_RECORD {
	unsigned char *name;
	struct R_DATA *resource;
	unsigned char *rdata;
};

//Structure of a Query
typedef struct {
	unsigned char *name;
	struct QUESTION *ques;
} QUERY;

int main(int argc, char *argv[]) {
	unsigned char hostname[100];

	//Get the DNS servers from the resolv.conf file
	get_dns_servers();

	//Get the hostname from the terminal
	printf("Enter Hostname to Lookup : ");
	scanf("%s", hostname);

	//Now get the ip of this hostname , A record
	ngethostbyname(hostname, T_A);

	return 0;
}

/*
 * Perform a DNS query by sending a packet
 * */
void ngethostbyname(unsigned char *host, int query_type) {
	unsigned char buf[65536], *qname, *reader;
	int i, j, stop, s;

	struct sockaddr_in a;

	struct RES_RECORD answers[20], auth[20], addit[20]; //the replies from the DNS server
	struct sockaddr_in dest;

	struct DNS_HEADER *dns = NULL;
	struct QUESTION *qinfo = NULL;

	printf("Resolving %s", host);

	s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //UDP packet for DNS queries

	dest.sin_family = AF_INET;
	dest.sin_port = htons(53);
	dest.sin_addr.s_addr = inet_addr(dns_servers[0]); //dns servers

	//Set the DNS structure to standard queries
	dns = (struct DNS_HEADER *) &buf;

	dns->id = (unsigned short) htons(getpid());
	dns->qr = 0; //This is a query
	dns->opcode = 0; //This is a standard query
	dns->aa = 0; //Not Authoritative
	dns->tc = 0; //This message is not truncated
	dns->rd = 1; //Recursion Desired
	dns->ra = 0; //Recursion not available! hey we dont have it (lol)
	dns->z = 0;
	dns->ad = 0;
	dns->cd = 0;
	dns->rcode = 0;
	dns->q_count = htons(1); //we have only 1 question
	dns->ans_count = 0;
	dns->auth_count = 0;
	dns->add_count = 0;

	//point to the query portion
	qname = (unsigned char*) &buf[sizeof(struct DNS_HEADER)];

	ChangetoDnsNameFormat(qname, host);
	qinfo = (struct QUESTION*) &buf[sizeof(struct DNS_HEADER)
			+ (strlen((const char*) qname) + 1)]; //fill it

	qinfo->qtype = htons(query_type); //type of the query , A , MX , CNAME , NS etc
	qinfo->qclass = htons(1); //its internet (lol)

	printf("\nSending Packet...");
	if (sendto(s, (char*) buf,
			sizeof(struct DNS_HEADER) + (strlen((const char*) qname) + 1)
					+ sizeof(struct QUESTION), 0, (struct sockaddr*) &dest,
			sizeof(dest)) < 0) {
		perror("sendto failed");
	}
	printf("Done");

	//Receive the answer
	i = sizeof dest;
	printf("\nReceiving answer...");
	if (recvfrom(s, (char*) buf, 65536, 0, (struct sockaddr*) &dest,
			(socklen_t*) &i) < 0) {
		perror("recvfrom failed");
	}
	printf("Done");

	dns = (struct DNS_HEADER*) buf;

	//move ahead of the dns header and the query field
	reader = &buf[sizeof(struct DNS_HEADER) + (strlen((const char*) qname) + 1)
			+ sizeof(struct QUESTION)];

	printf("\nThe response contains : ");
	printf("\n %d Questions.", ntohs(dns->q_count));
	printf("\n %d Answers.", ntohs(dns->ans_count));
	printf("\n %d Authoritative Servers.", ntohs(dns->auth_count));
	printf("\n %d Additional records.\n\n", ntohs(dns->add_count));

	//Start reading answers
	stop = 0;

	for (i = 0; i < ntohs(dns->ans_count); i++) {
		answers[i].name = ReadName(reader, buf, &stop);
		reader = reader + stop;

		answers[i].resource = (struct R_DATA*) (reader);
		reader = reader + sizeof(struct R_DATA);

		if (ntohs(answers[i].resource->type) == 1) //if its an ipv4 address
				{
			answers[i].rdata = (unsigned char*) malloc(
					ntohs(answers[i].resource->data_len));

			for (j = 0; j < ntohs(answers[i].resource->data_len); j++) {
				answers[i].rdata[j] = reader[j];
			}

			answers[i].rdata[ntohs(answers[i].resource->data_len)] = '\0';

			reader = reader + ntohs(answers[i].resource->data_len);
		} else {
			answers[i].rdata = ReadName(reader, buf, &stop);
			reader = reader + stop;
		}
	}

	//read authorities
	for (i = 0; i < ntohs(dns->auth_count); i++) {
		auth[i].name = ReadName(reader, buf, &stop);
		reader += stop;

		auth[i].resource = (struct R_DATA*) (reader);
		reader += sizeof(struct R_DATA);

		auth[i].rdata = ReadName(reader, buf, &stop);
		reader += stop;
	}

	//read additional
	for (i = 0; i < ntohs(dns->add_count); i++) {
		addit[i].name = ReadName(reader, buf, &stop);
		reader += stop;

		addit[i].resource = (struct R_DATA*) (reader);
		reader += sizeof(struct R_DATA);

		if (ntohs(addit[i].resource->type) == 1) {
			addit[i].rdata = (unsigned char*) malloc(
					ntohs(addit[i].resource->data_len));
			for (j = 0; j < ntohs(addit[i].resource->data_len); j++)
				addit[i].rdata[j] = reader[j];

			addit[i].rdata[ntohs(addit[i].resource->data_len)] = '\0';
			reader += ntohs(addit[i].resource->data_len);
		} else {
			addit[i].rdata = ReadName(reader, buf, &stop);
			reader += stop;
		}
	}

	//print answers
	printf("\nAnswer Records : %d \n", ntohs(dns->ans_count));
	for (i = 0; i < ntohs(dns->ans_count); i++) {
		printf("Name : %s ", answers[i].name);

		if (ntohs(answers[i].resource->type) == T_A) //IPv4 address
		{
			long *p;
			p = (long*) answers[i].rdata;
			a.sin_addr.s_addr = (*p); //working without ntohl
			printf("has IPv4 address : %s", inet_ntoa(a.sin_addr));
		}

		if (ntohs(answers[i].resource->type) == 5) {
			//Canonical name for an alias
			printf("has alias name : %s", answers[i].rdata);
		}

		printf("\n");
	}

	//print authorities
	printf("\nAuthoritive Records : %d \n", ntohs(dns->auth_count));
	for (i = 0; i < ntohs(dns->auth_count); i++) {

		printf("Name : %s ", auth[i].name);
		if (ntohs(auth[i].resource->type) == 2) {
			printf("has nameserver : %s", auth[i].rdata);
		}
		printf("\n");
	}

	//print additional resource records
	printf("\nAdditional Records : %d \n", ntohs(dns->add_count));
	for (i = 0; i < ntohs(dns->add_count); i++) {
		printf("Name : %s ", addit[i].name);
		if (ntohs(addit[i].resource->type) == 1) {
			long *p;
			p = (long*) addit[i].rdata;
			a.sin_addr.s_addr = (*p);
			printf("has IPv4 address : %s", inet_ntoa(a.sin_addr));
		}
		printf("\n");
	}
	return;
}

/*
 *
 * */
u_char* ReadName(unsigned char* reader, unsigned char* buffer, int* count) {
	unsigned char *name;
	unsigned int p = 0, jumped = 0, offset;
	int i, j;

	*count = 1;
	name = (unsigned char*) malloc(256);

	name[0] = '\0';

	//read the names in 3www6google3com format
	while (*reader != 0) {
		if (*reader >= 192) {
			offset = (*reader) * 256 + *(reader + 1) - 49152; //49152 = 11000000 00000000 ;)
			reader = buffer + offset - 1;
			jumped = 1; //we have jumped to another location so counting wont go up!
		} else {
			name[p++] = *reader;
		}

		reader = reader + 1;

		if (jumped == 0) {
			*count = *count + 1; //if we havent jumped to another location then we can count up
		}
	}

	name[p] = '\0'; //string complete
	if (jumped == 1) {
		*count = *count + 1; //number of steps we actually moved forward in the packet
	}

	//now convert 3www6google3com0 to www.google.com
	for (i = 0; i < (int) strlen((const char*) name); i++) {
		p = name[i];
		for (j = 0; j < (int) p; j++) {
			name[i] = name[i + 1];
			i = i + 1;
		}
		name[i] = '.';
	}
	name[i - 1] = '\0'; //remove the last dot
	return name;
}

/*
 * Get the DNS servers from /etc/resolv.conf file on Linux
 * */
void get_dns_servers() {
	FILE *fp;
	char line[200], *p;
	if ((fp = fopen("/etc/resolv.conf", "r")) == NULL) {
		printf("Failed opening /etc/resolv.conf file \n");
	}

	while (fgets(line, 200, fp)) {
		if (line[0] == '#') {
			continue;
		}
		if (strncmp(line, "nameserver", 10) == 0) {
			p = strtok(line, " ");
			p = strtok(NULL, " ");

			//p now is the dns ip :)
			//????
		}
	}

	strcpy(dns_servers[0], "208.67.222.222");
	strcpy(dns_servers[1], "208.67.220.220");
}

/*
 * This will convert www.google.com to 3www6google3com
 * got it :)
 * */
void ChangetoDnsNameFormat(unsigned char* dns, unsigned char* host) {
	int lock = 0, i;
	strcat((char*) host, ".");

	for (i = 0; i < strlen((char*) host); i++) {
		if (host[i] == '.') {
			*dns++ = i - lock;
			for (; lock < i; lock++) {
				*dns++ = host[lock];
			}
			lock++; //or lock=i+1;
		}
	}
	*dns++ = '\0';
}

原文连接:http://www.binarytides.com/dns-query-code-in-c-with-linux-sockets/

Linux DNS
2017-08-12 12:18:38 w826925085 阅读数 114
  • 网络工程师DNS域名解析强化训练视频课程

    网络工程师考试考察知识点繁多,形式多样。如何有效把握每种考察形式,拿到相应分数?这是历年考生挠头的事情。本系列课程紧抓考生痛点,对网工考试中重点题型分门别类讲解,反复强化训练,助力考生查缺补漏,拿到相应分数。本次分课程重点讲解了理解题型中DNS解题方法。通过基本概念阐述->实战配置演示->全真模拟题强化训练,三大步骤帮助考生掌握DNS解题方法,拿到相应分数。

    3238 人正在学习 去看看 徐朋

DNS:

权威名称服务器

存储并提供某区域 ( 整个 DNS 域或 DNS 域的一部分 ) 的实际数据。

权威名称服务器的类型包括

Master : 包含原始区域数据。有时称作 “主要 ”名称服务器

Slave : 备份服务器 , 通过区域传送从 Master 服务器获得的区域数据的副本。有时称作 “次要 ”名称服务器

非权威 / 递归名称服务器

– 客户端通过其查找来自权威名称服务器的数据。递归名称服务器的类型包括

存名称服务器 : 仅用于查找 , 对于非重要数据之外的任何内容都不具有权威性

DNS查找:



客户端上的 Stub 解析器 将查询发送至 /etc/resolv.conf 中的名称服务器,如果名称服务器对于请求的信息具有权威性 , 会将权威答案发送至客户端,否则 , 如果名称服务器在其缓存中有请求的信息 , 则会将非权威答案发送至客户端,如果缓存中没有信息 , 名称服务器将搜索权威名称服务器以查找信息 , 从根区域开始 , 按照DNS 层次结构向下搜索, 直至对于信息有具有权威性的名称服务器 , 以此为客户端获得答案。在此情况中,名称服务器将信息传递至客户端并在自己的缓存中保留一个副本 , 以备以后查找。

DNS资源记录

• DNS 区域采用资源记录的形式存储信息。每条资源记录均具有一个类型 , 表明其保留的数据类型。

– A : 名称至 IPv4 地址

– AAAA : 名称至 IPv6 地址

– CNAME : 名称至 ”规范名称 “ ( 包含 A/AAAA 记录的另一个名称 )

– PTR : IPv4/IPv6 地址至名称

– MX : 用于名称的邮件交换器 ( 向何处发送其电子邮件 )

– NS : 域名的名称服务器

– SOA :” 授权起始 “ , DNS 区域的信息 ( 管理信息 )


DNS排错

• 它显示来自 DNS 查找的详细信息 , 其中包括为什么查询失败 :

– NOERROR : 查询成功

– NXDOMAIN : DNS 服务器提示不存在这样的名称

– SERVFAIL : DNS 服务器停机或 DNSSEC 响应验证失败

– REFUSED : DNS 服务器拒绝回答 ( 也许是出于访问控制原因 )

dig输出的部分内容

• 标题指出关于查询和答案的信息 , 其中包括响应状态和设置的任何特殊标记 ( aa 表示权威答案 , 等等 )

– QUESTION : 提出实际的 DNS 查询

– ANSWER : 响应 ( 如果有 )

– AUTHORITY : 负责域 / 区域的名称服务器

– ADDITIONAL : 提供的其他信息 , 通常是关于名称服务器

– 底部的注释指出发送查询的递归名称服务器以及获得响应所花费的时间

缓存 DNS 服务器

BIND 是最广泛使用的开源名称服务器,在 RHEL 中 , 通过 bind 软件包提供防火墙开启端口 53/TCP 和 53/UDP。BIND 的主配置文件是 /etc/named.conf 。/var/named 目录包含名称服务器所使用的其他数据文件

/etc/named.conf 的语法

• // 或 # 至行末尾是注释 ; /* 与 */ 之间的文本也是注释 ( 可以跨越多行 )

• 指令以分号结束 (;)

• 许多指令认为地址匹配列表放在大括号中、以CIDR 表示法表示的 IP 地址或子网列表中 , 或者命名的 ACL 中 ( 例如 any; [ 所有主机 ] 和none; [ 无主机 ] )。

• 文件以 options 块开始 , 其中包含控制 named如何运作的指令。

• zone 块控制 named 如何查对于其具有权威性的根名称服务器和区域。

一些重要的 options 指令

isten-on 控制 named 侦听的 IPv4 地址

listen-on-v6 控制 named 侦听的 IPv6 地址

allow-query 控制哪些客户端可以向 DNS 服务器询问信息

forwarders 包含 DNS 查询将转发至的名称服务器的列表

( 而不是直接联系外部名称服务器 ; 在设有防火 墙的情况中

很有用 )

• 所有这些指令会将打括号中以分号分隔的元素视为地址匹配

列表 . 如

– listen-on { any; };

– allow-query { 127.0.0.1; 10.0.0.0

DNS的配置

首先在主机上安装DNS相应的服务,再进行DNS的配置。

在安装一种服务时,如果不知道,可以search一下,再在结果里面找。





现在进行安装:

现在进行配置DNS:

高速缓存DNS:

正向解析:

正向解析的意思就是给定一个网址,对其进行解析

制作一个域名对应解析,进行试验。

1.在 /etc/named.rfc1912.zones 进行添加要制作的网址。
2.在/var/named/中制作westos.com.zone文件



3.在westos.com.zone进行编写信息。


4.最后在DNS主配置文件里添加我们编写的信息。(重启named服务)

反向解析

反向解析的意思就是给定一个ip,对其进行解析成相对应的网址。

制作一个域名解析,进行试验。

2.在/var/named/中制作westos.com.ptr文件

3.编写westos.com.ptr文件

4.在主配置文件里添加添加我们编写的信息。(重启named服务)

DNS的域名规范配置

域名规范的意思就是原来设定是@是westos.com,或许自己想要一个别的模块,在这个基础上,进行名称的修正。

1.直接在westos.com.zone进行编写信息。(重启named服务)


2.直接测试

多项解析

3.进入主配置文件做视图(view)(编写完成后进行,重启named服务)

4.分别用两种不同网段的主机来测试。

DHCP+DNS

提示:在做此实验的时候,先将westos.com.zone备份一份,以便后面实验的需要


2.制作密钥文件

3.在配置文件中修改使用密钥文件更新(修改完毕重启named服务)



5.进行更新(加密更新)

1.server端安装dhcp服务
2.制作dhcp配置文件并配置(进入dhcp配置文件,先将36之后全部删掉)(修改完毕后,重启dhcpd服务)



6.进行测试(登陆一台新的主机)






























































2018-04-25 12:59:36 zs_pnzzz 阅读数 390
  • 网络工程师DNS域名解析强化训练视频课程

    网络工程师考试考察知识点繁多,形式多样。如何有效把握每种考察形式,拿到相应分数?这是历年考生挠头的事情。本系列课程紧抓考生痛点,对网工考试中重点题型分门别类讲解,反复强化训练,助力考生查缺补漏,拿到相应分数。本次分课程重点讲解了理解题型中DNS解题方法。通过基本概念阐述->实战配置演示->全真模拟题强化训练,三大步骤帮助考生掌握DNS解题方法,拿到相应分数。

    3238 人正在学习 去看看 徐朋

课程名称

服务器配置与管理

实验

成绩

 

实验名称

DNS服务器配置

学号

 

姓名

 

班级

 

日期

 

实验目的:

1.掌握liunx系统的基本命令

2 掌握DNS的原理

3.掌握liunx企业版DNS服务器和客户端的安装与配制方法

实验平台:

  云平台

一、  实验内容

配置DNS服务器和客户端,可以完成DNS解析。

二、  服务器端设置

1、    配置网卡,并且把网卡中DNS服务器地址配置下。

2、  在服务器上查看,安装bind服务器软件包。

 [root@localhost ~]# rpm -qa|grep bind

bind-libs-9.9.4-29.el7.x86_64

bind-9.9.4-29.el7.x86_64

3、修改/etc/named.conf配置文件,添加正向区域”sh.com”。结果如下:

   

 Logging{}中的建议看书配置似乎少了} };这两项




 4、退出vi编辑器,使用named-checkconf命令检查配置文件

[root@localhost Packages]# named-checkconf  /etc/named.conf

 

 5、配置sh.com.hosts正向解析文件,可以拷贝模板修改。

[root@localhost ~]#cp  /var/named/named.localhost  /var/named/sh.com.hosts

[root@localhost ~]# vi  /var/named/sh.com.hosts

 

7、使用named-checkzone 检查正向,区域配置是否出错

[root@localhost ~]# named-checkzone sh.com /var/named/sh.com.hosts

出现

zone sh.com/IN: loaded serial 0

OK

显示为OK则配置没有问题

 

8、启动服务

[root@localhost ~]# systemctl start named.service

[root@localhost ~]# systemctl status named.service

二、客户端设置

使用host命令检查是否能够解析,如果解析成功,如图所示。

 

三、需要注意的问题:

  1、不能启动named程序,出现错误

[root@localhost ~]# systemctl start named.service

Job for smb.service failed because the control process exited with error code. See "systemctl status named.service" and "journalctl -xe" for details.

 

解决办法:1、使用testparm检查配置文件,

1、        查看第二行有没有多一个@.

2、        下面解析所有行都顶格

3、        域名后面要有个”.”

 

 2、如果host 命令出错

 

 (1)关闭防火墙: #systemctl stop firewalld. 

               

(2)修改正向和反向区域文件权限。

Chmod –R  757 /var/named/sh.com.hosts

        

(3)重启DNS服务   

 

 

  

实验总结(结论或问题分析):

 

 

 

DNS与IP一致

2008-08-05 17:11:00 xueyancctv 阅读数 978
  • 网络工程师DNS域名解析强化训练视频课程

    网络工程师考试考察知识点繁多,形式多样。如何有效把握每种考察形式,拿到相应分数?这是历年考生挠头的事情。本系列课程紧抓考生痛点,对网工考试中重点题型分门别类讲解,反复强化训练,助力考生查缺补漏,拿到相应分数。本次分课程重点讲解了理解题型中DNS解题方法。通过基本概念阐述->实战配置演示->全真模拟题强化训练,三大步骤帮助考生掌握DNS解题方法,拿到相应分数。

    3238 人正在学习 去看看 徐朋

    DNS是域名系统Domain Name System的缩写,是一种组织域层次结构的计算机和网络服务命名系统,当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与此名称相关的IP地址信息。今天,我就给大家介绍一下目前常见的域名解析方法以及如何在Linux系统上架设DNS服务器,希望能够给各位朋友的DNS学习带来一些帮助。

    域名原理简介

  在DNS中,各个域分别由不同的组织管理。每个组织都可将它的域再分成一定数量的子域,并将这些子域委托给其他组织管理。域名被用做DNS数据库中的索引,子域中任何域名都被认为是域的一部分。判断一个域是否为另一域的子域,简单方法是比较它们的域名,一般子域名以其父域名结尾。

  设计域名系统的一个主要目的是让管理分散化。管理域的组织将该域划分成子域,每一个子域可以由其他组织管理意味着那些下级组织负责维护自己子域的所有数据。他们可以改变数据,甚至可以将自己管理的子域再划分成更多的子域并重新分配,而父域中仅包含指向这些子域的指针。

  实现域名查询和提供域名信息的程序被称为域名服务器。通常域名服务器拥有部分域名空间(称之为区Zone)的完整信息,一个域名服务器可以拥有对多个区的授权。域既包括了该层主机,又包括了子域的所有信息;而区仅包含了一个域中除了分配出去让其它组织管理的子域以外的域名数据信息。如果一个域没有分配任何子域,则该区包含该域的所有域名数据信息。

  DNS定义了PM(Primary Master)和SM(Secondary Master)两类域名服务器。PM从配置文件中读取区域数据,这些数据对整个区域来说都是具有权威性的。SM域名服务器是从其它具有该区授权的PM域名服务器上获得区数据,并定期查询PM域名服务器以保证区数据为最新版本。一般情况下,最好设立一台PM域名服务器和若干台SM域名服务器。这样可以分担负载,以确保区中所有主机都有比较靠近的域名服务器方便访问。

  对域名系统的访问是按照客户/服务器模式进行的,采用缓存(Caching)技术在保证数据可靠真实性的同时,又保证了较高的效率。应用程序一般是利用解析器来实现域名解析的。解析器是一组库函数,任何需要解析域名的应用程序都会调用这组函数来完成域名解析工作。解析器是应用程序实现域名查询的接口。

  域名服务器在接收到客户的查询请求时,一般是按照递归的方式来进行的。下面用一个例子来说明什么叫递归方式查询。一个域名服务器MyDM接收到查询http://www.linuxaid.com.cn的查询请?...铀僖院蟮牟檠?

  域名服务器有生存期(TTL)的概念,一旦生存期到了,名字服务器必须丢弃缓存数据并从权威的名字服务器中重新获取新的数据。这样可以确保域数据在整个网络上的一致性。

  从TCP/IP协议栈的角度来看, DNS属于应用层协议,运行在传输层之上,但是它并不使用TCP提供的服务,而是使用UDP服务。

        域名解析的方法

  1、最早的域名解析方法

  最简单的主机名解析方法是,在一个文件中记录所有的主机名以及与其对应的IP地址,并保证该文件中主机名的唯一性,通过检索文件便可以完成主机名的解析。

  采用这种最简单的解决方法有其历史原因:在整个70年代,APRANET只是一个小规模的、由数百台主机所组成的团体。于是为了解决主机名解析问题,就将连接到ARPANET上的每台主机名和与其所对应的地址都保存在HOSTS.TXT文件中。这样每增加一台机器,就必须修改一次HOSTS.TXT文件。随着网络的不断发展,网络中的主机数量爆炸性地增加,这种域名解析方法已经无法适应新的解析需要了。

  2、分布式的域名服务器

  在这种分布式的域名服务器体系中,每一台域名服务器( DNS )只负责解析属于自己这一部分的主机域名。

  一般来说,如果你所处的公司或组织所拥有的主机并不多,一般是将域名的解析工作交给自己的ISP域名服务器来完成。而如果你所在的组织主机比较多,我们就可以组建自己的域名服务器负责解析你所在组织的主机

        Linux环境下的编译和安装

        在Linux环境下,需要Bind软件的支持,实现DNS服务。

  Bind的安装有两种方式。一种是以RPM包的方式安装,另一种是使用源程序进行编译。RPM包安装方式非常简单,只要使用命令:

  rpm -Uhv bind-8.2.2-p5-9.i386.rpm
  rpm -Uhv bind-devel-8.2.2-p5-9.i386.rpm
  rpm -Uhv cache-nameserver-6.2-2.noarch.rpm

  就可以安装成功。在此不再详述。下面主要说明使用源程序进行编译这种方式。

  1.软件的下载

  下面的示例在Red Hat Linux 7.1下测试通过,需要安装者具有root权限。这里使用的Bind的版本号是8.2.2-patchlevel5。注意在真正的网络应用中(非测试学习环境)使用Bind时一定要下载最新版本,因为以前的版本中有一些安全漏洞。Bind主页为http : //www.isc.org/,下载bind-contrib.tar.gz, bind-doc.tar.gz, bind-src.tar.gz。

  最好在编译前和编译后都做一张系统中所有文件的列表,然后用diff命令比较它们找出其中的差别,并知道到底把软件安装在哪里。只要在编译之前运行 find /* >dns1命令,在编译和安装完软件之后运行find/*>dns2命令,最后用d i ff dns1 dns2 >dns命令找出变化。显示如下:

  [root@Aid /]# mkdir /var/tmp/bind
  [root@Aid /]# cp bind-contrib.tar.gz /var/tmp/bind/
  [root@Aid /]# cp bind-doc.tar.gz /var/tmp/bind/
  [root@Aid /]# cp bind-src.tar.gz /var/tmp/bind/

  我们创建了一个名为“bind”的目录,用它来处理tar文档,并转到新的“bind”目录(cd/ var/ tmp/bind),解压tar文件:

  [root@Aid bind]# tar xzpf bind-contrib.tar.gz
  [root@Aid bind]# tar xzpf bind-doc.tar.gz
  [root@Aid bind]# tar xzpf bind-src.tar.gz

  2.编译配置和优化

  编辑Makefile.set文件(vi /src/port/linux/Makefile.set),并加入:

  'CC=egcs -D_GNU_SOURCE'
  'CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro
  -march=pentiumpro -fomitframe-
  pointer -fno-exceptions'
  'DESTBIN=/usr/bin'
  'DESTSBIN=/usr/sbin'
  'DESTEXEC=/usr/sbin'
  'DESTMAN=/usr/man'
  'DESTHELP=/usr/lib'
  'DESTETC=/etc'
  'DESTRUN=/var/run'
  'DESTLIB=/usr/lib/bind/lib'
  'DESTINC=/usr/lib/bind/include'
  'LEX=flex -8 -I'
  'YACC=yacc -d'
  'SYSLIBS=-lfl'
  'INSTALL=install'
  'MANDIR=man'
  'MANROFF=cat'
  'CATEXT=$$N'
  'PS=ps -p'
  'AR=ar crus'
  'RANLIB=:'

  第一行说明使用的GCC编译器的名字是egcs。第二行是优化参数。“DESTLIB =”这一行说明Bind所需的库函数目录,“DESTING =”说明Bind的include目录在哪里。输入下面的命令:

  [root@Aid bind]# make -C src
  [root@Aid bind]# make clean all -C src SUBDIRS=../doc/man
  [root@Aid bind]# make install -C src
  [root@Aid bind]# make install -C src SUBDIRS=../doc/man

  make命令把所有的源文件都编译成二进制文件,接着“make install”把二进制文件和相关的配置文件安装到相应的目录中。

  [root@Aid bind]# strip /usr/bin/addr
  [root@Aid bind]# strip /usr/bin/dig
  [root@Aid bind]# strip /usr/bin/dnsquery
  [root@Aid bind]# strip /usr/bin/host
  [root@Aid bind]# strip /usr/bin/nslookup
  [root@Aid bind]# strip /usr/bin/nsupdate
  [root@Aid bind]# strip /usr/bin/mkservdb
  [root@Aid bind]# strip /usr/sbin/named
  [root@Aid bind]# strip /usr/sbin/named-xfer
  [root@Aid bind]# strip /usr/sbin/ndc
  [root@Aid bind]# strip /usr/sbin/dnskeygen
  [root@Aid bind]# strip /usr/sbin/irpd
  [root@Aid bind]# mkdir /var/named

  strip命令去掉目标文件中的所有符号信息。这样二进制程序就会缩小一些,可以提高程序的性能。mkdir命令创建一个“/var/named”目录。

  3.清除不必要的文件

  [root@Aid /]# cd /var/tmp
  [root@Aid tmp]# rm -rf bind/

  这些命令删除用来编译和安装BIND/DNS的源文件。

        域名服务器建立实例

  1、 实例环境

  假设我们需要建立一台应用于以下情况的企业主域名服务器。

  1)拥有一个C类网段地址,为202.101.55.0。

  2)企业域名注册为company.com。

  3)域名服务器的IP定为202.101.55.55,主机名为dns.company.com,同时充当Proxy。

  4)企业网通过路由器与Internet连接。

  下面我们就逐句地理解这里的配置。

  1.SOA是主服务器设定文件中一定要设定的命令,我们通常将它放在文件的第一行。

  1)最前面的符号“@”代表目前所管辖的域;

  2)接着的“IN”代表地址类别,这里就是固定使用“IN”的;

  3)接下来就是命令SOA;

  4)接下来填入域名服务器 ,记住由于DNS数据文件的特殊格式规定,在最后一定要加上“·”,在这个例子中,我们填入域名服务器 “dns.company.com.”;

  5)接下来是域名服务器管理员的E-MAIL地址,但要注意的是,E-Mail地址中的分隔符“@”在这里“·”来代替,在最后也要加上“。”,在这里我们相应写入“root.dns.company.com.”;

  6)接下来在括号内填上各种选项:

  文件版本号:当你修改这个文件的内容时,也要修改这个版本序列号,以此来区分是否有更新。

  更新时间:指定二级服务器向主服务器拷贝数据的更新时间周期。

  重试时间:指定二级服务器在更新出现通信故障时的重试时间。

  终止时间:指定二级服务器重新执行更新动作后仍然无法完成更新任务而终止更新的时间。

  生存时间:指定当域名服务器询问某个域名和其IP地址后,在域名服务器上放置的时间。

  注:二级服务器所设定的域名服务器是主服务器的备份主机。

  2.在第二行中,我们用NS命令指定这个域的域名服务器。在这里我们指出这个域的域名服务器 是“dns.company.com”。

  3.接下来的两行我们使用A命令来指定域名与IP地址的对应关系。我们将Web服务器的域www.company.com与其IP地址202.101.55.1对应起来;将E-Mail服务器的域名mail.company.com与其IP地址202.101.55.2对应起来。

  4.最后一行,我们使用了CNAME命令为dns.company.com指定了另一个域名以供使用——“proxy.company.com”。

  5、建立反向域名转换数据文件db.127.0.0和db.202.101.55

  反向域名转换数据文件用来提供IP地址查询相应的DNS主机名,每个网段分别有一个数据文件。

  1)网段127.0.0通常只有一个地址,那就是127.0.0.1 loopback地址,所以我们在db.127.0.0中写入的内容是:

  @ IN SOA dns.company.com. root.dns.company.com.(

  200002011 ;文件版本号

  28800 ;刷新时间(秒)

  7200 ;重试时间(秒)

  3600000 ;终止时间(秒)

  86400) ;TTL生存时间(秒)

  IN NS dns.company.com

  1 IN PTR localhost

  前面相信读者已经不会陌生,最后一句我们使用PTR命令让配置文件中的主机可以使用IP地址来知道所对应的域名。

  最前面的1代表127.0.0.1,对应的域名就是localhost。

  2)网段202.101.55就可能会存在更多的记录,前面假定环境下的设置应是:

  @ IN SOA dns.company.com. root.dns.company.com.(

  200002011 ;文件版本号

  28800 ;刷新时间(秒)

  7200 ;重试时间(秒)

  3600000 ;终止时间(秒)

  86400) ;TTL生存时间(秒)

  IN NS dns.company.com

  1 IN PTR www

  2 IN PTR email

  55 IN PTR dns

  55 IN PTR proxy

  6、获得db.cache文件

  在LINUX系统中通常提供一个named.ca文件,但是这个文件通常会发生变化,所以建议最好从Internet上下载最新的版本。该文件可以通过匿名FTP从ftp.rs.internic.net/domain下载,文件名是named.boot。将它拷贝一份为db.cache就可以了。

       

      测试域名服务器

  1、使用nslookup测试

  nslookup命令的功能是查询域名服务器中的数据资料。下例就是使用它来测试域名服务器是否架设成功,其中斜体字代表要输入的内容。

  # nslookup

  Default server:dns.company.com

  Address:202.101.55.55 ;能出现这些信息代表成功

  > www

  server:dns.company.com

  Address:202.101.55.1

  2、使用ping测试

  还有一种更简单的测试方法,那就是用ping命令,如果成功将显示:

  # ping www.company.com

  Ping www.company.com(202.101.55.1);56 data bytes

  64 bytes from 202.101.55.1:icmp_seq=0 ttl=255 time=1.3ms

  64 bytes from 202.101.55.1:icmp_seq=1 ttl=255 time=0.6ms

  64 bytes from 202.101.55.1:icmp_seq=2 ttl=255 time=0.6ms

  ……

  小技巧

  安装好域名服务器后,在内部使用域名进行远程连接时,会发现速度非常慢,其实只要在/etc/hosts中加上所有内部的机器域名就可以了。

  5)要解析的服务器有:

  www.company.com (202.101.55.1) Web服务器

  mail.company.com (202.101.55.2) E-Mail服务器

  2、安装前的准备工作

  首先要保证系统中有/etc/resolv.conf和/etc/hosts.conf这两个文件,/etc/resolv.conf文件中内容如下所示:

  domain compay.com

  nameserver 202.101.55.55

  其中第一行指出对于任何希望连到它上面的主机应该搜寻的域,而第二行指出了在哪个地址可以找到需要的域名服务,/etc/hosts.conf的内容如下所示:

  order hosts,bind

  multi on

  这里的设置告诉主机名称先在/etc/hosts文件中搜索,然后再查询域名服务器 。

  3、定义文件/etc/named.boot

  要使LINUX系统完成域名服务器的功能,则需要运行一个named的服务进程。这个服务进程可以在安装LINUX时选中。

  named启动时需要读取一个初始化文件--/etc/named.boot,这个文件是named的基本配置文件。它并不包含任何DNS数据,针对前面的假定环境,我们要在这个文件中写入:

  diretory /etc/named

  primary company.com db.company

  primary 0.0.127.IN-ADDR.ARPA db.127.0.0

  primary 55.101.202.IN-ADDR.ARPA db.202.101.55

  cache.db.cache

  下面我们逐行讲解这个文件中的内容:

  1) 在第一行中我们指定named从/etc/named目录下读取DNS数据文件。这个目录可以自行指定并创建,指定后将所有的DNS数据文件均存放在这个目录下;

  2) 第二行指定named作为company.com的主域名服务器,db.company文件中包含了所有*.my.com形式的域名解析数据;

  3) 第三行则指定named作为127.0.0网段(本地loopback)地址的转换主服务器。其中db.127.0.0文件中包含了所有127.0.0.*形式的地址到域名的转换数据;

  4) 第四行指定named作为202.101.55网段地址转换主服务器,db.202.101.55文件中包含了所有以202.101.55.*形式的地址到域名的转换数据;

  5) 最后一行指定named从db.cache文件中获得Internet的顶层“根”服务器地址。要说明的是,这些数据文件的名称均是自行决定的。

  4、建立正向域名转换数据文件db.company

  根据/etc/named.boot文件中的定义,我们在/etc/named目录下建立文件db.company,并且在其中写入所有在company.com域内的主机节点。根据前面假定的环境,可以写入:

  @ IN SOA dns.company.com. root.dns.company.com.(

  200002011 ;文件版本号

  28800 ;刷新时间(秒)

  7200 ;重试时间(秒)

  3600000 ;终止时间(秒)

  86400;)TTL生存时间(秒)

  IN NS dns.company.com

  www IN A 202.101.55.1

  email IN A 202.101.55.2

  proxy IN CNAME

2019-02-23 02:40:30 weixin_40001704 阅读数 40
  • 网络工程师DNS域名解析强化训练视频课程

    网络工程师考试考察知识点繁多,形式多样。如何有效把握每种考察形式,拿到相应分数?这是历年考生挠头的事情。本系列课程紧抓考生痛点,对网工考试中重点题型分门别类讲解,反复强化训练,助力考生查缺补漏,拿到相应分数。本次分课程重点讲解了理解题型中DNS解题方法。通过基本概念阐述->实战配置演示->全真模拟题强化训练,三大步骤帮助考生掌握DNS解题方法,拿到相应分数。

    3238 人正在学习 去看看 徐朋

DNS服务 C/S

DNS:Domain Name Service 应用层协议
服务器端口:C/S,53/udp, 53/tcp
BIND:Bekerley Internat Name Domain
ISC (www.isc.org)bind官网

本地名称解析配置文件:
/etc/hosts

hosts文件和dns优先顺序:
/etc/nsswitch.conf

windows:
/system32/drivers/etc/hosts

分散式:配置每个主机的hosts文件
集中式:NIS服务名词解析,集中存放在一个服务器上
分布式:DNS解决方案

www.dushan.com 全称域名(主机名|别名+域名)
www            主机名或别名
dushan.com     域名

DNS域名

根域
一级域名:Top Level Domain: tld
        com, edu, mil, gov, net, org, int,arpa
        三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
二级域名 
三级域名 www.sina.com.cn
最多127级域名

ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理


上级域知道下级域IP
下级域不知道上级域IP

大概流程:
用户通过小区DNS服务器想访问www.dushan.com这个网站,
小区DNS不知道www.dushan.com是哪的地址,需要找到权威的DNS服务器去问,
可是又不知道谁是,小区DNS就会去问根域。根一看是com的就会告诉他去找.com的问。
com也不知道,但是会告诉他去找dushan的问。直到找到权威的服务器。找到之后缓存到
自己的机器上然后告诉用户主机解析这个网站。

基于名字访问所以用到DNS解析服务。
QQ不依赖于DNS,因为内置IP地址。所以有时候QQ能上,网站打不开。

DNS查询类型:

递归查询:自己去一级级问,最终交给用户
迭代查询:推荐去哪级查,让用户自己去查

名称服务器:域内负责解析本域内的名称的主机
根服务器:13组服务器
IPV4一共13个根域服务(10个在美国,1个在荷兰,1个在瑞典,1个在日本)
IPV6一共25个根域服务(中国有1个主3个从,主在北京,从在上海,成都,广东)

解析类型:
FQDN --> IP 正向解析
IP --> FQDN 反向解析 arpa域:反向解析域
注意:正反向解析是两个不同的名称空间,是两棵不同的解析树

www.baidu.com回车后发生了什么
DNS方面:

hosts文件
DNS Service Local Cache 缓存  win:缓存 ipconfig/displaydns  清缓存 ipconfig/flushddns
interation(迭代)-->根-->顶级域名DNS-->二级域名DNS...找到

bind服务器

服务脚本和名称:/etc/rc.d/init.d/named /usr/lib/systemd/system/named.service
主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
解析库文件:/var/named/ZONE_NAME.ZONE

根服务器路径名:/var/named/named.ca

[root@centos7 ~]#grep -v '^;' /var/named/named.ca    (-V排除;注释)

.                       518400  IN      NS      a.root-servers.net.
.                       518400  IN      NS      b.root-servers.net.
.                       518400  IN      NS      c.root-servers.net.
.                       518400  IN      NS      d.root-servers.net.
.                       518400  IN      NS      e.root-servers.net.
.                       518400  IN      NS      f.root-servers.net.
.                       518400  IN      NS      g.root-servers.net.
.                       518400  IN      NS      h.root-servers.net.
.                       518400  IN      NS      i.root-servers.net.
.                       518400  IN      NS      j.root-servers.net.
.                       518400  IN      NS      k.root-servers.net.
.                       518400  IN      NS      l.root-servers.net.
.                       518400  IN      NS      m.root-servers.net.

a.root-servers.net.     3600000 IN      A       198.41.0.4              IPV4正向解析A记录
a.root-servers.net.     3600000 IN      AAAA    2001:503:ba3e::2:30     IPV6正向AAAA记录
b.root-servers.net.     3600000 IN      A       192.228.79.201
b.root-servers.net.     3600000 IN      AAAA    2001:500:84::b
c.root-servers.net.     3600000 IN      A       192.33.4.12
c.root-servers.net.     3600000 IN      AAAA    2001:500:2::c
d.root-servers.net.     3600000 IN      A       199.7.91.13
d.root-servers.net.     3600000 IN      AAAA    2001:500:2d::d
e.root-servers.net.     3600000 IN      A       192.203.230.10
e.root-servers.net.     3600000 IN      AAAA    2001:500:a8::e
f.root-servers.net.     3600000 IN      A       192.5.5.241
f.root-servers.net.     3600000 IN      AAAA    2001:500:2f::f
g.root-servers.net.     3600000 IN      A       192.112.36.4
g.root-servers.net.     3600000 IN      AAAA    2001:500:12::d0d
h.root-servers.net.     3600000 IN      A       198.97.190.53
h.root-servers.net.     3600000 IN      AAAA    2001:500:1::53
i.root-servers.net.     3600000 IN      A       192.36.148.17
i.root-servers.net.     3600000 IN      AAAA    2001:7fe::53
j.root-servers.net.     3600000 IN      A       192.58.128.30
j.root-servers.net.     3600000 IN      AAAA    2001:503:c27::2:30
k.root-servers.net.     3600000 IN      A       193.0.14.129
k.root-servers.net.     3600000 IN      AAAA    2001:7fd::1
l.root-servers.net.     3600000 IN      A       199.7.83.42
l.root-servers.net.     3600000 IN      AAAA    2001:500:9f::42
m.root-servers.net.     3600000 IN      A       202.12.27.33
m.root-servers.net.     3600000 IN      AAAA    2001:dc3::35

资源记录

区域解析库:由众多资源记录RR(Resource Record)组成

记录类型:

SOA  :Start Of Authority,起始授权记录;
      一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
A    :internet Address,作用:FQDN --> IP 名字转换成IP地址
AAAA :FQDN --> IPv6  

PTR  :PoinTeR,IP --> FQDN
NS   :Name Server,专用于标明当前区域的DNS服务器
CNAME:Canonical Name,别名记录
MX   :Mail eXchanger,邮件交换器
TXT  :对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,
       SPF(反垃圾邮件)记录,https验证等
       例:_dnsauth IN TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x

语法:name [TTL] IN rr_type value

名称+生命期+IN+类型+值

注意:

(1) TTL可从全局继承 (放在最前段,不用每行都写)
(2) @可用于引用当前区域的名字
(3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
(4) 同一个值也可能有多个不同的定义名字;
    通过多个不同的名字指向同一个值进行定义;
    此仅表示通过多个不同的名字可以找到同一个主机

SOA记录

name: 当前区域的名字,例如dushan.com.(注意一定要带.不写系统则自动补为dushan.com.dushan.com.)
value: 有多部分组成
1、主DNS名称 dns1.dushan.com
2、管理员邮箱 admin.dushan.com (注意@换成.)
3、数据库版本号 10  (每次记得递增)
4、主从同步间隔 1h
5、主从同步重试间隔 10m (注意间隔小于同步间隔)
6、从数据库过期有效时长
7、不存在记录的缓存时长

A记录

name: 某主机的FQDN,例如www.dushan.com.
value: 主机名对应主机的IP地址 例如8.8.8.8

例:
www.dushan.com. IN A 8.8.8.8

NS记录

name:本域的域名dushan.com. 或者@(@表示本域)
value:当前区域的某DNS服务器的名字

例:需配合A记录解析成IP
@ IN NS dns1.dushan.com. 或 @ IN NS dns1
@ IN NS dns2.dushan.com.
dns1.dushan.com. IN A 192.168.32.7
dns2.dushan.com. IN A 192.168.32.17	

CNANME记录

name: 别名的FQDN
value: 真正名字的FQDN

例:需配合A记录解析成IP
www IN CNAME web-nginx01.dushan.com.       (www后面写点自己补后缀)
web-nginx01.dushan.com. IN A 101.200.199.230

MX记录

name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高

例:任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
@ IN MX 10 mail.dushan.com.
@ IN MX 20 mail2.dushan.com.
mail IN A 10 3.3.3.3 (mail等同mail.dushan.com.)
mail IN A 20 6.6.6.6 

开放53端口,修改配置文件,默认为127.0.0.1

vim /etc/named.conf
...
options {
        listen-on port 53 { localhost; };
...
[root@centos7 ~]#systemctl reload named
[root@centos7 ~]#ss -ntlu
Netid  State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
...            
udp    UNCONN     0      0      172.20.121.114:53                           *:*                  
udp    UNCONN     0      0      192.168.32.7:53                           *:*                  
..            
tcp    LISTEN     0      10     172.20.121.114:53                           *:*                  
tcp    LISTEN     0      10     192.168.32.7:53                           *:*                  
...

填写dushan.com.zone区域解析库

[root@centos7 ~]#vim /etc/named.rfc1912.zones
zone "dushan.com" {                    域
        type master;                   设置类型
        file "dushan.com.zone ";       设置文件名,需手工创建此文件

[root@centos7 ~]#cd /var/named
[root@centos7 named]#ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@centos7 named]#cp named.localhost dushan.com.zone -a  复制模板 注意权限
[root@centos7 named]#ll
total 20
drwxrwx--- 2 named named   23 Sep 27 03:09 data
-rw-r----- 1 root  named  152 Jun 21  2007 dushan.com.zone
drwxrwx--- 2 named named   60 Sep 27 03:09 dynamic
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Apr 13 02:48 slaves

编辑dushan.com.zone文件

[root@centos7 named]vim dushan.com.zone 

rndc reload 同步命令
named-checkconf 检查配置文件
named-checkzone dushan.com /var/named/dushan.com.zone 名字+存在位置

/etc/resolv.conf

win清除dns
C:\Users\Dadda>ipconfig/flushdns
win检查dns nslookup

[root@centos6 ~]#host www.dushan.com 192.168.32.7
[root@centos6 ~]#dig www.dushan.com @192.168.32.7
检查dns

设置192.168.32.6 通过192.168.32.7的DNS解析,访问www.dushan.com网页

192.168.32.6 网卡配置文件,配置DNS为192.168.32.7

[root@centos6 network-scripts]vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
IPADDR=192.168.32.6
PREFIX=24
ONBOOT=yes
DNS1=192.168.32.7

[root@centos6 ~]#service network restart

[root@centos6 network-scripts]#cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.32.7

2、

Linux DNS各实验

阅读数 76

没有更多推荐了,返回首页