c++ libcurl dns无法解析_Linux网络服务之DNS

183b12e6b50967d8f1e7c04c653f316d.gif

    前段时间忙于红帽考试和家里的一些事情,一直没能及时更新公众号文章,在这段时间里,公众号的关注量没有下降,在此特别感谢支持我的童鞋和朋友!

    今天我们来学习下Linux网络环境中的DNS服务器的搭建,开篇前,先来了解下DNS的一些概念

DNS简介:

    DNS(英文domain name system),域名系统,是互联网的一种服务,它用来将域名和IP地址相互映射的一个分布式数据库,能够使人方便的访问互联网。

    DNS中涉及到一个名词,域名解析。域名解析是把域名指向到了网站的空间IP,让人们通过注册的域名可以方便的访问到网站提供的一种服务,其实就是域名到IP地址的转换过程,域名解析工作依赖DNS服务器来完成,分为正向解析和反向解析,正向解析即域名到IP地址的的转换,反向解析即IP地址到域名的转换。

DNS服务器类型:

主DNS服务器:维护所负责解析的域数据库的服务器,读写操作均可进行。

从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库,但只能进行读操作。

DNS组织架构:

1d7be5183e455790e8780e2b93a05055.png

根域:位于最顶层的那个域,根域,可省略不写

顶级域:位于第二层的.net、.com,由ICANN组织指定和管理

二级域:位于第三层的ibm、kernel,可由个人或组织注册申请

三级域:如www.ibm.com等,网站服务名代表

DNS的两种查询方式

递归查询:请求(查询)者发送一次请求就能得到结果

fcf1e72b2a9d3fa74667cc84bfd5e20c.png

A发起请求它去问B,而B也不知道答案,它再去问C,C把答案返回给B,B再把答案返回给A,这个过程就是递归。(在这个过程当中,A只发送了一次请求)

迭代查询:请求(查询)者发送多次请求才能得到结果

5b16076840497980fd2aba9418948c4b.png

A发起请求它去问B,但B也不知道答案,但是B知道C知道答案,于是B告诉A可以去问C,于是A再去请求 C,C将结果告知给A,A从C处获取了答案,这个过程就是迭代。(在这个过程当中,A发送了多次请求)

一次完整DNS解析过程:

72cb7230cf4b771f41ef733a99190bf9.png

DNS bind安装及配置文件讲解

安装:

[root@servera ~]# yum install -y bind

[root@servera ~]# echo $?

0

注:$? 用于判断上一个命令是否执行成功,0代表执行成功,非0代表执行失败

配置文件讲解:

主配置文件:

[root@servera ~]# less /etc/named.conf | egrep -v "^#|^\//" | less

options {

listen-on port 53 { 127.0.0.1; }; //dns ipv4监听的地址

listen-on-v6 port 53 { ::1; }; //dns ipv6监听的地址

directory       "/var/named"; //区域配置文件目录

dump-file       "/var/named/data/cache_dump.db";

statistics-file "/var/named/data/named_stats.txt";

memstatistics-file "/var/named/data/named_mem_stats.txt";

recursing-file  "/var/named/data/named.recursing";

secroots-file   "/var/named/data/named.secroots";

allow-query     { localhost; }; //是否接受其他机器的dns查询

/*

- 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; //开启递归查询

dnssec-enable yes;

dnssec-validation yes;

/* Path to ISC DLV key */

bindkeys-file "/etc/named.root.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;

file "named.ca";

};

include "/etc/named.rfc1912.zones"; //区域配置文件

include "/etc/named.root.key";

区域配置文件:

[root@servera ~]# less /etc/named.rfc1912.zones | egrep -v "^\//" | less

zone "localhost.localdomain" IN {

type master; //用来作为主DNS服务器

file "named.localhost"; //这个zone区域配置文件

allow-update { none; }; //是否允许从服务器 同步主zone文件进行更新

};

zone "localhost" IN {

type master;

file "named.localhost";

allow-update { none; };

};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {

type master;

file "named.loopback";

allow-update { none; };

};

zone "1.0.0.127.in-addr.arpa" IN {

type master;

file "named.loopback";

allow-update { none; };

};

zone "0.in-addr.arpa" IN {

type master;

file "named.empty";

allow-update { none; };

};

数据配置文件:/var/named/abc.xx

3d0b26a917ea8bd3637acce5199588e1.png

01774a6bfd28843e82fc09467063de0a.png

实验一:DNS服务器搭建

拓扑:

71601d99ac0ba080599569dba2d45053.png

配置步骤:

webserver配置:

[root@httpd ~]# yum install -y httpd

[root@httpd ~]# setenforce 0

[root@httpd ~]# systemctl stop firewalld.service

[root@httpd ~]# echo "DNS Test" > /var/www/html/index.html

[root@httpd ~]# systemctl restart httpd

[root@httpd ~]# netstat -ntlp | grep httpd

tcp6       0      0 :::80                   :::*                    LISTEN      3851/httpd

[root@httpd ~]# curl 192.168.1.112

DNS Test

DNS Server配置:

[root@dns named]# setenforce 0

[root@dns named]# systemctl stop firewalld.service

#将/etc/named.conf如下红色标识处更改为any

cb7061e9640f9ccc70b95163955a0b43.png

#修改区域配置文件:

[root@dns named]# less /etc/named.rfc1912.zones

zone "chenli.com" IN {

type master;

file "chenli.localhost";

allow-update { none; };

};

zone "1.168.192.in-addr.arpa" IN {

type master;

file "chenli.loopback";

allow-update { none; };

};

#拷贝两个区域配置文件并重命名

[root@dns ~]# cp -a named.localhost chenli.localhost

[root@dns ~]# cp -a named.loopback chenli.loopback

0db78e5d53b0a64faac18ea66ffd1cba.png

#修改正向解析文件

2b553c67e232389c7eb0ca0fe149416c.png

#修改反向解析文件

8e78d6df2ed3b4191b5c63364a6a0beb.png

#重启named服务

[root@dns ~]# systemctl restart named

42a35be6a1a8e38943974d577bc75839.png

注:UDP 53端口用于DNS查询,TCP 53端口用户主从DNS同步

测试:

#修改测试机器DNS为192.168.1.111,测试是可以正常解析的

84720fe86fecdabf5ab591d4a51a6b9e.png

75ca6a918979405d5b2c9e5a2112e0d3.png

#将webserver主机的DNS指向DNS服务器进行测试,是可以正常解析的

5ed21968f8af3a4940fa6871b7af21a9.png

实验二:DNS主从服务器搭建:

目的:降低主服务器压力,从而搭建主从DNS服务器

拓扑:

1ef1e4793089c2e72479ab066fca1160.png

注:由于环境有限,备份DNS服务器即作为webserver,同时作为从DNS服务器

配置步骤:

主服务器配置:

#安装bind软件,关闭防火墙和Selinux

[root@dns-master ~]# yum install -y bind

[root@dns-master ~]# systemctl stop firewalld.service

[root@dns-master ~]# setenforce 0(临时关闭)

#修改/etc/named.conf配置文件,主DNS服务器监听自己本身地址

2c9e8d9fe4b5fe731cbd6d0ab8e5c39b.png

#修改主DNS服务器区域配置文件

aefe58110759006712bf54874e44dba1.png

#修改正向解析配置文件

0e374ef7087ae9eda323a8bb6e801781.png

#修改反向解析配置文件

522a4aca6757ec97776939217990a921.png

从服务器配置:

#安装bind软件,关闭防火墙和Selinux

[root@dns-slave ~]# yum install -y bind

[root@dns-slave ~]# systemctl stop firewalld.service

[root@dns-slave ~]# setenforce 0(临时关闭)

#修改/etc/named.conf从DNS服务器配置文件,从DNS服务器也只监听自己本机地址

a79be4ae6a223d1720b9334e92cb4cbc.png

#修改从DNS服务器区域配置文件

a84223a01c2cbdfeb034402feec4f05f.png

#此时的/var/named/slaves下还没有文件

[root@dns-slave slaves]# ll

total 0

#重启从DNS服务器named服务,可以看到区域配置文件已经同步过来了,并且和主区域配置文件内容均一致

[root@dns-slave slaves]# systemctl restart named

[root@dns-slave slaves]# ll

total 8

-rw-r--r--. 1 named named 239 Nov 17 05:51 chenli.localhost

-rw-r--r--. 1 named named 311 Nov 17 05:51 chenli.loopback

#同步过来的正向解析内容

1e13da8c44a0ea3f5d9099bd8b504ced.png

#同步过来的反向解析内容

9ee41850b33086f3acdd20493764bc96.png

验证主从同步过程1:

#修改测试机器的DNS地址为从服务器地址,发现是可以正常解析的

a8a9662f46c4c913427dbd14c7b6767d.png

验证主从同步过程2:

#在主服务器新增A记录,然后重启named服务,

eb285bbdcdb116d6c5a3781929300dc1.png

[root@dns-master named]# systemctl restart named

#此时查看从DNS的A记录,发现已经同步过来了

f1445e19afc1a6df258f4d373888bc60.png

实验三:DNS缓存服务器

目的:加快解析速度,提供解析效率

拓扑:

8dd91177c4d93dbdd736b424cfbb2c7d.png

配置步骤:

主DNS master和上面主从DNS配置中的主是一致的

DNS缓存服务器:

#安装缓存软件

[root@dns-slave ~]# yum install -y dnsmasq

#修改配置文件:

[root@dns-slave ~]# egrep -v "^#|^$" /etc/dnsmasq.conf

server=192.168.1.111

domain=chenli.com

cache-size=15000

conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig

[root@dns-slave ~]#

#重启服务

[root@dns-slave ~]# systemctl start dnsmasq.service

验证:

#缓存服务器已经有该www,bbs记录,此时关闭主DNS服务器,可以正常解析,解析为非权威应答

[root@dns-master ~]# systemctl stop named

364dbd644a16ec2fff09bc1c1b268c14.png

02d7b320cf78a974b8a134351c0ad48d.png

#由于缓存服务器无dns这台主机的缓存记录,当关闭掉主DNS服务后,无法正常解析

61c16bd47b864a538c57071b810f135f.png

#开启主DNS服务后,由于缓存服务器没有该DNS记录,会找主DNS服务器,而主DNS服务器中有该记录,则可以正常解析

[root@dns-master ~]# systemctl start named

b420dcc796d851d10385f12378cc74f3.png


注:

1、做完主动同步,发现从服务器的区域配置文件内容为乱码,解决方法如下,在区域配置文件中新增如下命令:masterfile-format  text;

如下图:

7991e57befb4e0a2eab4caa0231313e7.png

2、如上内容均为个人学习过程梳理,难免有错误之处,如有发现错误的地方,欢迎私信指正。

ad69d83fff67ca0f6c88658119a5444f.png

ae6746ae4beda578ae55da297db684c3.png 578f6b0b637a4ff5017707985c05a77e.png

一码不扫,
可以扫天下?

ad69d83fff67ca0f6c88658119a5444f.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值