浏览器输入网址后发生了什么
梳理用户访问网站流程
0.客户端 确保你的机器可以上外网
1.客户端 浏览器输入网站url,点击回车 www.haloyang.top
2.客户端 本地进行dns域名查找、查找域名对应的ip地址
3.客户端 直接访问该服务器的ip,开始tcp三次握手过程
4.客户端 建立tcp连接后,发起http请求,构造请求报文,会发出多次请求
5.服务端 接收到http请求后,解析请求,响应请求,回复多次
6.客户端 浏览器看到响应内容,浏览器解析响应数据,渲染结果在屏幕上
7.客户端 结束访问,关闭网站,完成tcp四次挥手
抓技术名词关键字
1.域名
2.域名解析
3.TCP/IP 三次握手
4.TCP/IP 四次挥手
5.HTTP请求发出
6.HTTP响应报文
DNS域名解析
DNS域名结构
由于互联网中的域名太多,全球的用户也太多,因特网的域名采用的是树状结构命名。 任何一个连接到网络中的机器,都有一个唯一的层次结构名字,叫做域名(domain name)。
域、就是名字空间中可被划分、管理的部分。
语法上要求,域名由标号(label)组成,每一个label之间通过小数点隔开。
域名可以被分为多个子域,子域还可以继续划分子域的子域,因此形成了
顶级域
主域名
子域名
根域 .
在整个 DNS 系统的最上方一定是 . (小数点) 这个 DNS 服务器 (称为 root),也叫”根域“。
根域 (13台 全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。)
顶级域名(一级域名)
顶级域名是域名的最后一个部分,即是域名最后一点之后的字母,例如在https://www.haloyang.top/这个域名中,顶级域是.top,大小写视为相同。
二级域名
二级域名是域名的倒数第二个部分,例如在https://www.haloyang.top/这个域名中,二级域名是haloyang。以此类推。
三级域名
子域名
域名机构
收费、新网https://www.xinnet.com/、万网https://www.hichina.com/
免费域名、tk域名等。
DNS服务器分层结构(DNS解析流程)
域名是分层结构,域名服务器也是分层结构,域名服务器其实就是一台部署了DNS域名解析系统的计算机,对外提供解析服务。
主要涉及的四个DNS服务器如下
如果你本地
/etc/hosts
文件做好了解析纳闷DNS解析会优先以hosts为准
通过dig命令,查看域名查找流程
1.首先确定本地dns服务器
[root@master-61 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
yum install bind-utils -y
解析
1.先去找了13个根域服务器,没有排序关系
2.然后确认顶级域的范围,是.top
3.然后确认权威域名服务器地址freens1.jdgslb.com.
4.最后通过权威域名服务器拿到域名、ip的解析关系
www.haloyang.top. 600 IN A 117.72.37.183
文字描述DNS解析流程
DNS域名解析:
浏览器客户端需要正确查询、解析出域名的的ip地址,才能建立与服务器的连接
1.浏览器需要解析域名,首先查看本地的hosts文件,查看是否有固定的解析规则,有则直接使用该ip信息
2.本地的hosts文件没有解析关系,浏览器会发出一个dns请求到本地设置的dns服务器
本地dns服务器一般默认会是你接入的网络运营商,如电信dns,移动dns
3.域名解析的请求到达dns服务器之后,dns服务器优先查找它自己的缓存记录,如果有直接返回结果
如果dns服务器本地没有结果,递归的向上查找DNS根服务器,是否有解析记录。
4.根DNS服务器的作用只是提供域服务器的地址(不提供域名和ip的关系解析)
5.本地dns服务器此时向域服务器继续发出请求,此时请求的服务器就是如.com .cn这样的域服务器了
域服务器也不会直接返回你要访问的域名、以及它对应的IP地址的关系,而是告诉本地dns服务器,该域名对应的解析服务器的地址,
如163.com
6.最后本地dns服务器,向该域名对应的解析服务器发出请求,此时才能正确的拿到该域名对应的ip地址关系
此时本地dns服务器会把ip告诉浏览器
以及这个域名、ip的对应关系会被存储在本地缓存中,便于下次访问,可以直接看到这个域名、ip的对应关系,加速访问
DNS专业名词
递归查询
就好比我们递归创建文件夹一样
mkdir -p /opt/linux/0224/chaoge666.log
1.我们本地进行域名解析时,如ping baidu.com,本地的/etc/resolv.conf指定的服务器接收到用户请求,必须返回给用户一个精准的ip结果。
2.如果指定的DNS服务器没有存储这个解析关系,就会以上述于超老师讲解的dns解析流程,开始向根域服务器发出请求,因此反复循环,直到拿到结果。
迭代查询
也就是DNS服务器/etc/resolv.conf没有直接返回查询域名-ip的对应结果,而是告诉另外一台服务器,另外一台服务器,再去请求另外一台机器,反复发请求,直到获取正确结果。
DNS缓存
指的是将域名、ip的解析关系存储在离用户最近的一个客户端上,这个位置可以是任意的地方,目的都是为了减少递归查询的次数,更快的获取查询结果。
TTL值
英文名 time to live
告诉本地dns服务器,该解析记录的可用时长,到期后本地缓存会自动删除该解析关系,重新发起迭代/递归查询,获取新的域名、ip解析结果。
云解析DNS的手册
https://help.aliyun.com/document_detail/102237.html
各记录类型使用目的
工作中经常需要加的记录类型
主机记录指的就是,主域名的前缀,通常会添加如下记录类型
www,如解析为www.haloyang.top,或者www.taobao.com
@,直接解析主域名,如haloyang.top,或taobao.com
,泛解析,匹配其他所有子域名,如
.haloyang.top
一般适用于给域名绑定证书,一张证书,绑定
*.haloyang.top
,也就可以处理如api.haloyang.top
blog.haloyang.top
...
mail,mail.haloyang.com,一般用于邮件服务器的绑定
移动端网址,如
https://www.haloyang.top/
DNS服务搭建
主流的dns服务器部署,有两种工具
bind(大型公司需要自建复杂的域名解析系统,存储解析记录,包括了设置根域、顶级域、二级域等区域功能)
dnsmasq(轻量级域名系统,提供域名、ip的对应解析关系,需要提供上游权威dns服务器地址)
bind服务部署
DNS 的==域名解析==都是
udp/53
;主从之间的==数据传输==默认使用==tcp/53==;DNS软件:
Bind
是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley(伯克利)分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件,支持各种unix平台和windows平台。BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。
机器准备
172.16.1.61 dns服务端
172.16.1.7 dns客户端 web-server
172.16.1.8 dns客户端 web-server
部署bind(61机器)
[root@master-61 ~]#yum install bind bind-utils -y
解释
bind-utils:bind客户端程序集,例如dig, host, nslookup等;
bind:提供的dns server程序、以及几个常用的测试程序;
bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
操作全流程
1.关闭防火墙
[root@master-61 ~]# systemctl stop firewalld
[root@master-61 ~]# iptables -F
[root@master-61 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@master-61 ~]# getenforce
Disabled
2.配置yum源,用于安装bind软件。
[root@master-61 ~]# ls /etc/yum.repos.d/
3.安装bind
[root@master-61 ~]# yum install bind -y
4.查看软件
[root@master-61 ~]# rpm -qi bind
5.查看dns配置文件
[root@master-61 ~]# rpm -ql bind
# 日志轮转文件
/etc/logrotate.d/named
# 配置文件目录
/etc/named
# 主配置文件
/etc/named.conf
# zone文件,定义域
/etc/named.rfc1912.zones
# 服务管理脚本
/usr/lib/systemd/system/named.service
# 二进制程序文件
/usr/sbin/named
# 检测配置文件
/usr/sbin/named-checkconf
# 检测域文件
/usr/sbin/named-checkzone
# 根域服务器
/var/named/named.ca
# 正向解析区域文件模板
/var/named/named.localhost
# 反向解析区域文件模板
/var/named/named.loopback
# dns服务器下载文件的默认路径
/var/named/slaves
# 进程pid
/var/rum/named
配置文件修改设置dns区域文件
named.conf修改
1.备份原有文件
[root@master-61 ~]# cp /etc/named.conf /etc/named.conf.bak
[root@master-61 ~]#
[root@master-61 ~]# cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak
2.修改主配置文件
# 定义监听端口、监听方式、允许查询来源
options {
// 定义监听方式 any代表全网监听
// 监听的地址和端口,localhost表示监听在本机所有地址上;
listen-on port 53 { 127.0.0.1;any; }; #在这里添加 any;
listen-on-v6 port 53 { ::1; };
// 区域数据库文件存放的目录,存放解析记录的目录
directory "/var/named";
// dns解析过内容的缓存文件
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";
// 允许谁向本台DNS发起查询请求(localhost|ip|any);
allow-query { localhost;any; }; #在这里添加 any;
..
...
...
省略
// 控制日志输出级别,路径
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
// 区域设置,这是根域。
zone "." IN {
type hint;
file "named.ca";
};
59 include "/etc/named.rfc1912.zones"; // 这里include表示,载入一个子配置文件
60 include "/etc/named.root.key";
配置文件解析
主配置文件组成部分::
options {} :全局选项(监听端口、数据文件存储位置、缓存位置、权限等)
logging {} :服务日志选项
zone . {} :自定义区域配置
include :包含其他的文件
主配置文件注意事项:
语法非常严格。
文件权限属主 root ,属组 named ,文件权限 640;
[root@master-61 ~]# ll /etc/named.conf
-rw-r----- 1 root named 1812 Feb 19 17:10 /etc/named.conf
/etc/named.rfc1912.zones 修改
在named.conf中写入全局设置;
在include的配置文件中写入具体的dns解析设置,域名解析记录;
3.修改子配置文件,自定义区域配置文件
配置解析
zone "example.com" IN {
type master|slave;
#自定义区域类型
file /path/to/zonefile;
#绝对路径和相对路径
allow-update {ip|none};
#允许哪个ip可以使用nsupdate动态更新 区域文件
};
追加如下配置,注意格式,这里就是添加你的域名了。 一定不要落下分号
[root@master-61 ~]# tail -5 /etc/named.rfc1912.zones
zone "haloyang.top" IN {
type master;
file "haloyang.cn.zone";
allow-update { none; };
};
4.创建zone区域文件 haloyang.cn.zone,先去复制一个模板,区域文件放在了/var/named
[root@master-61 ~]# cp -p /var/named/named.localhost /var/named/haloyang.cn.zone
5.修改区域文件
让这个域名和你要的IP地址对应起来,以及添加一个三级域名www.haloyang.cn。
[root@master-61 ~]# cat /var/named/haloyang.cn.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 172.16.1.61
AAAA ::1
www A 192.168.1.100
6.修改完了后,务必修改zone文件的权限
[root@master-61 ~]# chmod 640 haloyang.cn.zone
[root@master-61 ~]# ll /var/named/
total 20
drwxrwx--- 2 named named 6 Nov 25 00:38 data
drwxrwx--- 2 named named 6 Nov 25 00:38 dynamic
-rw-r----- 1 root named 2253 Apr 5 2018 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 Nov 25 00:38 slaves
-rw-r----- 1 root named 173 Feb 19 17:58 haloyang.top.zone
7.检查配置文件语法,不要有任何错误
[root@master-61 ~]# named-checkconf /etc/named.conf
[root@master-61 ~]# named-checkconf /etc/named.rfc1912.zones
[root@master-61 ~]#
8.启动named域名解析服务,注意名字是这个。
[root@master-61 ~]# netstat -tnlp|grep named
[root@master-61 ~]#
[root@master-61 ~]# systemctl start named
[root@master-61 ~]# netstat -tnlp|grep named
tcp 0 0 172.16.1.61:53 0.0.0.0:* LISTEN 2901/named
tcp 0 0 10.0.0.61:53 0.0.0.0:* LISTEN 2901/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2901/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 2901/named
tcp6 0 0 ::1:53 :::* LISTEN 2901/named
tcp6 0 0 ::1:953 :::* LISTEN 2901/named
[root@master-61 ~]#
9.修改本地dns配置文件
[root@master-61 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
#nameserver 223.5.5.5
nameserver 172.16.1.61
备注:关于zone file区域档案的参数解释
http://dns-learning.twnic.net.tw/bind/intro6.html#cb
关于zone文件语法解析
time to live(TTL),ttl值主要是控制域名指向的ip地址在dns服务器上的缓存时间
@ 指的就是haloyang.top
$TTL 1D //定义一个TTL默认值为1天,下面数据直接引用此值.
@ [TTL] IN SOA 主DNS服务器FQDN 管理员邮箱 (
0 ; 序列号
1D ; 更新间隔
1H ; 更新失败后重试间隔
1W ; 过期时长
3H ) ; 否定记录保存时长
资源类型:A(IPv4), AAAA(IPv6):定义FQDN的IP
NS : 定义DNS服务器的FQDN
SOA : 起始授权(每个zone首先要定义此值)
MX: 定义邮件记录,有优先级概念(0-99),值越小优先级越高。
CNAME: 定义别名
PTR: 反向记录
客户端设置dns服务器地址
测试域名
1.客户端配置我们自己部署的dns服务器地址,写入配置文件,这个192.168.0.104是超哥部署的dns服务器IP。
[root@master-61 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 172.16.1.61
2.检查解析关系
[root@master-61 ~]#nslookup www.haloyang.cn
Server: 172.16.1.61
Address: 172.16.1.61#53
Name: www.haloyang.cn
Address: 192.168.1.100
2.1.其他机器也想访问www.haloyang.cn
[root@web-7 ~]#echo "nameserver 172.16.1.61" > /etc/resolv.conf
[root@web-7 ~]#cat /etc/resolv.conf
nameserver 172.16.1.61
[root@web-7 ~]#ping www.haloyang.cn
PING www.haloyang.cn (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100 (192.168.1.100): icmp_seq=1 ttl=128 time=0.770 ms
64 bytes from 192.168.1.100 (192.168.1.100): icmp_seq=2 ttl=128 time=0.659 ms
轻量级dnsmasq服务
1、dnsmasq是一款小巧且方便地用于配置DNS服务器和DHCP服务器的工具,适用于小型网络,它提供了DNS解析功能和可选择的DHCP功能。
2、dnsmasq可以解决小范围的dns查询问题,如果业务是跨机房、跨地区的话不建议使用dnsmasq做为dns解析服务器。
部署dnsmasq
使用之前先把bind服务停了
systemctl stop named
1.安装
yum install dnsmasq -y
#之前如果修改了DNS解析文件/etc/resolv.conf记得改回去 nameserver 223.5.5.5
2.修改配置文件
[root@master-61 ~]#ll /etc/dnsmasq.conf
-rw-r--r-- 1 root root 26832 Jul 21 2021 /etc/dnsmasq.conf
修改为如下
[root@master-61 ~]#grep -Ev '^$|^[#;]' /etc/dnsmasq.conf
#第46行,定义dnsmasq从哪里获取上游DNS服务器的地址,默认是从/etc/resolv.conf获取
resolv-file=/etc/resolv.dnsmasq.conf
#第111行,定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址
listen-address=172.16.1.61
# 本地域名配置文件(不支持泛域名),添加内部需要解析的地址和域名(重新加载即可生效)
# 第131行,默认读取/etc/hosts
addn-hosts=/etc/dnsmasq.hosts
#记录dns查询日志服务器
log-queries
log-facility=/var/log/dnsmasq.log
#包含其他文件夹下所有配置文件
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
3.查询修改的配置
[root@master-61 ~]#grep -Ev '^$|^[#;]' /etc/dnsmasq.conf
resolv-file=/etc/resolv.dnsmasq.conf
listen-address=172.16.1.61
addn-hosts=/etc/dnsmasq.hosts
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
添加上游dns服务器
#配置这个是为了能ping通外网
[root@master-61 ~]# echo "nameserver 223.5.5.5" > /etc/resolv.dnsmasq.conf
[root@master-61 ~]# cat /etc/resolv.dnsmasq.conf
nameserver 223.5.5.5
添加dns解析记录
[root@master-61 ~]#cat >/etc/dnsmasq.hosts <<EOF
172.16.1.61 master-61
172.16.1.5 slb-5
172.16.1.6 slb-6
172.16.1.7 web-7
172.16.1.8 web-8
172.16.1.9 web-9
172.16.1.31 nfs-31
172.16.1.41 rsync-41
172.16.1.51 db-51
EOF
启动dnsmasq
[root@master-61 ~]#systemctl start dnsmasq
测试局域dns记录
1.修改本地DNS解析文件
[root@master-61 ~]#cat /etc/resolv.conf
nameserver 172.16.1.61
[root@web-7 ~]#cat /etc/resolv.conf
nameserver 172.16.1.61
2.使用公网dns查询记录
[root@web-7 ~]#nslookup master-61 223.5.5.5
Server: 223.5.5.5
Address: 223.5.5.5#53
** server can't find master-61: NXDOMAIN
3.使用本地dns服务器查询
[root@master-61 ~]#nslookup web-7
Server: 172.16.1.61
Address: 172.16.1.61#53
Name: web-7
Address: 172.16.1.7
Name: web-7
Address: 10.0.0.7
[root@web-7 ~]#nslookup master-61
Server: 172.16.1.61
Address: 172.16.1.61#53
Name: master-61
Address: 172.16.1.61
Name: master-61
Address: 10.0.0.61
小结
部署dns服务器,添加dns解析记录(ip、域名对应关系)
客户端需要指定dns服务器,方可使用这些记录
dns查询流程,还有上游服务器提供公网dns记录。