网络network
基础network模型
OSI七层模型,一层一层封装数据帧(添加报文头),传过去之后再一层一层解封装(解封装掉报文头)
应用层:应用软件层面业务端口,例如http/https,ftp,sftp,smtp(25),除了在四层TCP IP+端口号的方式进行外,还需要检查http/https的url,cookie等是否合法,是基于url来实现的(四层就是靠IP+端口号)
表示层:将数据转化为合适的传输格式。例如字符编码等
会话层(session):负责数据传输,建立会话,两台电脑(服务器)通信连接,确保能够连接到,所以说,http-post/get请求请求就是一个session会话,服务端/客户端连接的会话
传输层:把传输表头加到数据包头,表头包含了传输数据需要的协议,例如TCP/UDP等传输协议,TCP三次握手确认(消息发送-消息接收反馈-消息成功反馈)
---四层转发方式为IP+端口号
网络层:决定数据的走向,路由交换,上层交换,网络报文,IP协议
设备:路由,由路由器上面的路由表实现路由条目的记录
数据链路层:局域网内的寻址,包括物理地址(MAC地址),ARP报文协议等,设备:交换机,数据帧(仅限于局域网)
物理层:在局域网上的传输数据帧,管理电脑媒体之间的传输,网线,网卡等,物理连接
交换机和集线器:交换机可以隔离冲突域,但是不能隔离广播域
交换机工作在数据链路层,集线器工作在物理层,路由器工作在网络层
交换机需要联通同一个网段内
路由器:可以联通两个不同的网段,路由转发,路由表自动学习
vlan技术:隔离广播域,类似路由器的技术,给不同的网段划分vlan隔离网段
vlan技术最多支持4096个
大二层vxlan环境:可以支持很多个vlan环境
网络抓包工具:tcpdump
tcpdump -i:截取指定网卡的数据包,比如tcpdump -i eth0
-n:+协议,比如tcpdump -i eth0 -n icmp/tcp等
tcpdump -i eth0 -n icmp:抓从eth0出去/进来的icmp协议数据包,因为网络协议的交换都是双向的,有请求(request)和接收回应(reply)
ping 192.168.0.3
-c:精简显示,只显示10个
网络协议TCP/IP
其实TCP/IP是多个协议的组合,是TCP/IP协议簇,包括TCP/IP/RIP/ICMP/SMTP/FTP等协议
TCP/IP表示架构(四层):
链路层---网络层---传输层---应用层(包括会话层、表示层、应用层)
tcp和udp之间的区别
tcp可靠 | udp高效
tcp长链接,保持会话久(session)| udp短连接,保持会话时间短
tcp适合email web浏览 下载业务(长连接不中断)| ucp适合声音流、视频流,不保存,即时
tcp端口的类别:
0-1023:系统服务的端口,专门给安装的Linux服务使用的,比如ssh(22),smtp(25),tcp(80),ssl(443)
1024-49151:用户端口分配给某些服务的,比如某些服务需要用到特殊用户的,比如MySQL(3306,MySQL用户),sql server(1433,rdsuser)等
49000-65535:动态端口,随机分配给客户端的,像tcp三次握手的syn客户端发送syn=1 seq=x的时候,就会给客户端分配一个这里的端口
tcp三次握手的过程
服务端的状态:LISTEN(收听),ESTABLISHED(建立TCP连接)
seq:请求序号,1--->2 seq=x,2--->1 ack=x+1 1--->2 seq=y 2--->1 ack=y+1
ack:响应序号
建立tcp连接的过程:由客户端发起的tcp连接请求,发送给客户端
第一次握手:发起三次握手请求,SYN=1(同步请求),seq=x(请求响应的序号是x)
第二次握手:SYN=1(响应SYN请求后给A发送SYN请求),seq=y(服务端请求客户端的回应),ack=x+1(服务端已经确认),ACK=1(响应SYN请求)
第三次握手:ACK=1(响应B的SYN请求),seq=x+1(seq永远是客户端发给服务端的,第二次握手ack=x+1,所以第三次握手seq要回x+1),ack=y+1(因为第二次握手seq回)
Client端:发送请求 Server端:LISTEN(监听)
SYN-SENT:同步已发送 SYN-RCVD:同步已收到,同时发送给你SYN
ESTABLISHED:建立好连接
【SYN请求】、seq=0
【SYN、ACK请求】、seq=0(服务端请求)、ack=1(服务端响应)
【ACK请求】、seq=1(ack请求)、ack=1(客户端响应)
为什么不是两次握手的原因?
A给B发消息,B响应了,但是A没响应B的请求,所以不成立;
消息的传输都是要响应了才算传输成功,就像ICMP协议,A ping B,如果ping不通(B没有响应),则ping执行不成功
四次握手:多余了,三次握手就能搞定
netstat和ss:查看系统的tcp/udp连接状态
netstat命令用法:
-a:all socket所有连接状态
-n:使用IP地址显示远程地址(foreign address),不解析端口的服务,直接显示端口
-t:tcp连接协议
netstat -ant:显示所有tcp的连接,使用IP地址代替域名(主机名)
-u:显示udp协议
-p:显示连接的协议/服务
-l:显示STATE为LISTEN的条目,可以去掉不打这个
-i:显示网卡列表
ss命令,用法基本和netstat保持一致,但是更加轻量级,显示更多更详细的TCP信息,比netstat更快
ss命令:直接操作内核
-t:显示tcp
-u:显示udp
-a:显示所有
-l:显示在LISTEN的端口
-n:显示端口,不解析为服务
-p:显示是什么服务,-p还能显示这个服务连接的pid(进程id)
IP地址的组成与划分子网
网络位:判断属于哪个网段
主机位:判断有多少个主机可用
A类、B类、C类地址:内网地址
计算可用主机数量:2^n-2---除去.0地址和广播位全1的地址
比如192.168.24.0/26掩码,可用主机数:2^6-2=62个主机可用,然后是以64为分界线来
大网段:/24,2^8=256-2=254个主机可用
我想划分4个网段,则是256/4=64个主机一个网段
/26的主机位,一个主机位可以使用64-2=62位,从1到63;一共可以划分4个IP段,4个端192.168.24.0/26--1-63
192.168.24.64/26--65-127
192.168.24.128/26--129-191
192.168.24.192/26--192--2
192.168.9.0/30,2^2-2=2个
划分子网的思路:从一个大网段内划分若干个小网段,将需要划分的资源隔离开来
典型分配k8s的网段,给的是172.16.25.0/24的网段,这个网段内我要划分4个网段使用
k8s-node-广州三区
k8s-node-广州四区
mysql-广州三区
redis-广州四区
所以需要划分4个段,掩码为26,即从原始网络位借2位,即为掩码位(划分的子网段数),同时可以划分4个段
每个段可用的主机数:2^n-2=62位,以64作为隔离
网络划分面试题
路由相关配置
route -n:查看网关,本地回环地址0.0.0.0的就是网关
DNS解析文件:/etc/resolv.conf
云上的一般都是云内的DNS服务器(内网DNS服务器)
路由表的构成
1.destination:目标地址,需要到达的
2.gateway:网关
3.netmask:子网掩码
4.flag:flag位
5.iface:网卡(接口)
相当做路由器使用服务器:开启ipv4转发功能
vim /etc/sysctl.conf文件中
添加net.ipv4.forward=1这条命令
执行sysctl -p使得这个文件配置生效
添加静态路由
-net:加网段(目标地址)
-host:加主机IP地址
route -n:查看路由表,查看网关,以便写下一跳
route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
route add -host 172.16.9.1/24 gw 172.16.0.1 dev eth0
route add -net 0.0.0.0/0 gw 172.16.0.1
删除路由条目
route del -net xxx
ubuntu的网卡配置
查看IP地址:ip a | ifconfig
curl -s icanhazip.com
网卡(网络配置)目录:/etc/netplan/01-netcfg.yaml文件
注意:yaml文件编写的格式缩进一定要符合规定,同一个级别的yaml文件必须统一缩进,不能乱写
自动获取:
eth0:
dhcp4:true
netplan apply:应用网卡配置(更新配置)
VMware的三种网络连接模式
1.仅主机模式:直连主机上面的VMnet1,代表可以和主机直接通信(Cent OS 7网卡),但是无法访问到公网
2.桥接模式:与主机的以太网卡互连,可以出公网,直连公网,外面主机连接交换机(二层)
3.NAT模式:SNAT内网机器需要访问到公网,DNAT内网机器需要提供给外部机器访问(D作为源)
网络面试(加上网络子网规划的)
1.三次握手:
client端和server端
ifconfig eth0 | sed -n 2p | awk '{print $2}'
ifconfig eth0 | awk 'NR==2{print $2}'
ifconfig eth0 | grep -w inet | awk '{print $2}'---> grep -w查询出特定的单词,不加其他的字符
hostname -I
ifconfig eth0 192.168.0.2
vim /etc/sysconfig/network-scripts/ifcfg-eth0修改
重启网络服务
4.tcpdump
tcpdump的问题
DNS服务
主要是为了解决一个服务对应多个IP地址的问题。比如需要访问一个web服务(网站),后端有负载均衡,负载均衡后面挂了5个web服务器,5个web服务器都有各自的内网IP,那我访问该服务是访问哪个IP呢?
配置域名(WAF CNAME),CNAME通过DNS服务解析到SLB的IP地址,由SLB自己去轮询,那么访问的时候用户就会集中在一个入口去访问
域名基本格式
www.baidu.com:www作为主机名,baidu.com作为域名
前面的记录集(主机名)可以不一致,类似RDS的话,可以通过内网域名;redis可以通过redis的内网域名访问
rds.huaweicloud.com...redis.huaweicloud.com...,将这个解析到内网IP
配置到代码内,尽量是配置域名(不去写死IP地址),因为IP地址随时会变
类似刚刚的chrony.conf配置文件,配置的也是ntp服务器的域名地址
server ntp.myhuaweicloud.com iburst
server ntp.aliyun.com
server time1.cloud.tencent.com
配置hosts文件实现本地解析
实现本地解析的功能:配置本地hosts文件,本地解析,DNS会先去找本地解析
Linux:/etc/hosts
windows:C:\Windows\System32\drivers\etc\hosts
##配置/etc/hosts文件
192.168.244.128 master
192.168.244.132 slave1
192.168.244.133 slave2
192.168.244.136 manager
199.232.68.133 raw.githubusercontent.com
根域名:
顶级域名:.com,.net,.edu等,这些都是公网域名,也可以自己创建内网域名
一级域名:xxx.com,比如baidu.com,aliyun.com
二级域名(记录集):www.baidu.com,mirrors.aliyun.com,主机名,记录集随便添加;在哪里购买的域名,可以在本地/云上的DNS服务上面添加对应的记录集,比如说aliyun,可以在aliyun上面的DNS解析服务添加公网域名解析
也可以在private zone私网解析里面添加企业内网的解析
开源组织的域名:例如nginx.org,kubernetes.org,kernal.org
DNS解析过程(找DNS服务器)
配置本机指向的DNS服务器
Linux:/etc/resolv.conf,DNS服务器指向云厂商的DNS服务器地址
cat /etc/resolv.conf
# Generated by NetworkManager
search openstacklocal
nameserver 100.125.136.29
nameserver 100.125.1.250
windows:一般都是自动获取DNS地址,因为网卡一般都是DHCP的模式,你也可以手动配置DNS地址,这样才能解析上网访问的域名
cmd,ipconfig /all查看到DNS服务器为公网的根DNS服务器,是可以解析到所有的域名的
大量使用缓存技术(提高访问--->读写速率和效率)
想要访问www.baidu.com这个域名,使用迭代查询的方式去查询这个域名的解析的IP地址
1.找本地地址(host文件)--->本地配置的DNS服务器(DNS缓存(浏览器)),不用每次都去找根服务器;DNS服务器有缓存,本地也有缓存
2.DNS服务器找到根服务器(互联网的根服务器)
3.找顶级域名,因为baidu.com是.com,所以找.com的顶级域名服务器里面找解析
4.找一级域名baidu.com这个的DNS解析
5.从baidu.com这个解析里面就有www.baidu.com这个地址配置了记录集,传回到用户,实现baidu.com这个域名解析到后端的某个IP地址
递归查询:指的是请求到了,服务器无法反馈结果,会去找到结果并且最终反馈---处理到底;DNS服务器必须返回一个准确的结果给到客户端
迭代查询:找别人查找,自己不处理---找别的DNS服务器查询解析,根域名---顶级域名---一级域名
windows查看dns缓存ipconfig
刷新本地DNS缓存:
ipconfig /flushdns
查看本地的DNS解析:ipconfig /all,本地的DNS服务器,如果在windows上安装好DNS服务器,则windows服务器自己本身就是DNS服务器,DNS地址指向自己(127.0.0.1)
如果是自动获取,则是阿里云的DNS地址,或者是本地的DNS地址
切换DNS的时候,会有大概5min的延迟
查看本地缓存:
ipconfig /displaydns
DNS解析类型:正向解析、反向解析
正向解析:域名---IP地址
反向解析:IP地址---域名
一般访问的路径都是访问域名,解析到IP地址
常见公共DNS
114DNS 114.114.114.114
百度DNS 180.76.76.76
各大云厂商DNS服务器(ECS自带)
google 8.8.8.8
cat /etc/resolv.conf,云厂商的ECS其实都是配置的内网DNS
whois:查看域名的所有者,时间,查看注册信息
还能查看网站的DNS解析服务器的域名,有效期,2021年1206买的,有效期是3年
公司内部搭建的域名原则:最好是不要和互联网的公网域名冲突
内部服务需要用到内部的DNS解析,内部的DNS解析是可以出公网的
DNS服务器:也分主从服务器
DNS软件Bind
搭建本地的环境,域名,CA证书,都需要依赖局域网内的服务,包括在本地搭建根CA的服务,搭建本地DNS服务,使得本地访问到域名可以通过CA和key来实现认证,ssl认证
bind,powerdns,dnsmasq,unbound,coredns(dns)
rpm -q bind
yum -y install bind bind-utils
服务名称:bind,实际的配置文件:/etc/named.conf,服务名称:named
DNS解析服务端口:53
systemctl enable --now named ##现在启动+开启自启动named服务,状态active
本机搭建DNS服务,记录下www.baidu.com的解析IP后,直接存到DNS缓存内(Linux,windows均有DNS解析),所有的DNS服务器(软件)都知道全球的DNS根服务器
##安装DNS服务
yum -y install bind bind-utils
##修改网卡配置,配置DNS选项
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#IPADDR=10.0.0.128
#NETMASK=255.255.255.0
#GATEWAY=10.0.0.1
DNS1=127.0.0.1
##重启网络服务
systemctl restart network
##查看dns解析文件
cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.244.2
nameserver 127.0.0.1
其它局域网内的机器都指向这个机器就行了,比如是10.0.0.8这台机器,vim /etc/resolv.conf,nameserver指向就行
实现场景:服务器通过指向到内网DNS服务器实现访问公网
场景:
DNS服务器 10.0.0.128 已配置好resolv.conf和网卡DNS指向,指向本机127.0.0.1,配置好DNS服务bind
客户端 10.0.0.129 配置resolv.conf指向10.0.0.128,网卡DNS指向10.0.0.128
workstations配置:手动配置IP地址,NAT网关配置为10.0.0.2(网络编辑器),子网网段10.0.0.0,掩码24,VMNET8配置为手动配置IP地址
DNS服务的监听端口:53端口
配置:
1.配置10.0.0.128的named.conf
//监听哪些机器:本地所有的IP
listen-on port 53 { localhost; };
//允许哪些机器通过这个DNS查询:any所有机器
allow-query { any; };
allow-query { 10.0.0.0/24; }; //允许某个网段访问解析
2.10.0.0.129访问到互联网,成功
dig www.baidu.com
host www.baidu.com
面试题:tcp53端口和udp53端口各有什么用?
tcp 53端口:目前和解析没关系,tcp 53用于主从DNS服务器的同步
udp 53端口:和解析有关系,直接解析,udp53端口---用于查询
配置本地DNS服务器内网域名解析
安装dns监听服务
bind,bind-utils(dns测试工具,可以不装)
bind的测试工具包括:dig(最全面的域名解析工具),host(简易版DNS解析测试),nslookup(windows风格的),最常用的就是dig,显示内容最多
rpm -ql bind-utils:查看这个包中有哪些工具
yum -y install bind bind-utils
启动DNS服务:systemctl enable --now named
修改默认dns配置文件,监听为any,vim /etc/named.conf,上下两行可以删除掉
options {
//监听哪些机器:本地所有的IP
listen-on port 53 { localhost; }; //监听本地所有的IP 53端口
listen-on-v6 port 53 { ::1; };
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";
//允许哪些机器通过这个DNS查询:any所有机器
allow-query { any; };
}
使用到的用户+用户组:root,named,group:named
id root
uid=0(root) gid=0(root) groups=0(root)
id named---记得修改域配置文件所属组为named
uid=25(named) gid=25(named) groups=25(named)
rndc命令:对于dns缓存,配置的使用
rndc --help
rndc reload ##重新加载dns配置
rndc flush ##刷新缓存
各种资源记录(RR:resource record),文件路径:/var/named/named.localhost,/var/named/catyer.cn.zone(自已命名),后续可以在这里写域名解析的文件
写主DNS服务器配置(DNS记录)
SOA记录:一般写在首行,一条记录,作为起始的授权记录
NS:解析,正向解析记录
A记录:域名---IPV4地址
AAAA记录:域名---IPV6地址
TXT:文本记录
CNAME:别名记录(CDN,WAF等)
PTR:反向解析,指针
vim /var/named/catyer.cn.zone文件标准格式:其实也是个文件,只需要记得写入zone配置文件就好了
$TTL 1D
@ IN SOA master admin.catyer.cn ( ;SOA记录:起始授权记录
20220719 ; serial,序列号,数据库文件的序列号
3H ; refresh,DNS刷新记录,从节点拉取
10M ; retry,服务器网络有问题,重试时间
1W ; expire,DNS记录过期时间
3H )
@ IN NS master. ;主DNS服务器解析
master A 10.0.0.128
www A 10.0.0.128
k8s A 10.0.0.128
linux A 10.0.0.200
主从DNS服务器的同步机制:主服务器一般是有新的更新就推送,从服务器一般是定时拉更新的数据
主从DNS同步依赖条件:serial,类似MySQL主从的binlog文件版本号的变化,binlog_000003类似这样的文件名
PS:一定要记住修改catyer.cn.zone文件的所属组,不然这个文件是不生效的(本地域名解析)
chgrp named catyer.cn.zone
写域配置文件named.rfc1912.zones
将zone的配置信息(catyer.cn)配置到统一的域配置文件内,这里面是/etc/named.frc1912.zones
##写好主域的信息,type类型为master主域,file为catyer.cn.zone这个配置文件
vim /etc/named.rfc1912.zones
zone "catyer.cn" IN {
type master; ##DNS服务器类型是主服务器,主节点
file "catyer.cn.zone"; ##域配置文件:指向catyer
allow-update { none; };
};
##检查DNS配置文件以及域配置文件有无正确
named-checkconf
named-checkzone catyer.cn /var/named/catyer.cn.zone
rndc reload:重新加载dns配置文件zone
rndc flush:刷新本地DNS缓存
##本地网卡DNS解析指向自己
DNS1=10.0.0.128
在windows宿主机上访问到Cent OS中的DNS添加的记录集
在VMNET8网卡上添加DNS解析指向到10.0.0.128
分别都可以解析到IP,即本地的DNS服务器搭建成功,访问本地服务。访问到k8s.catyer.cn这个域名服务的
搭建从DNS服务器(DNS2)
安装dns服务:yum -y install bind
注释掉named.conf配置文件内的监听限制
编辑域配置文件,写上是catyer.cn主DNS(主域)的从域
zone "catyer.cn" {
type slave;
masters {10.0.0.128;}
file "catyer.cn.zone.slave"
};
编辑好后,重启named服务,配置网卡文件DNS2(DNS从服务器)
DNS1=10.0.0.128
DNS2=10.0.0.129
systemctl restart named
systemctl restart network
##停止dns1的服务
systemctl stop named
尝试解析k8s.catyer.cn这个域名,发现承载的dns服务器是10.0.0.129,证明停止了DNS1,DNS2成功生效工作,k8s.catyer.cn是在10.0.0.128上面做的A记录
k8s.catyer.cn
从指定的DNS服务器(IP)上查询该解析+DNS服务器地址
##windows环境
nslookup api.ctfmall.com 100.100.2.136
##Linux环境,+@符号
dig k8s.catyer.cn @10.0.0.128
host k8s.catyer.cn @10.0.0.8
配置主从DNS服务器同步
主服务器配置:需要加上从服务器的IP和NS解析记录
vim /var/named/catyer.cn.zone
$TTL 1D
@ IN SOA master. www.catyer.cn ( ;SOA记录:起始授权记录
20220719 ; serial,序列号
3H ; refresh,DNS刷新记录,从节点拉取
10M ; retry,服务器网络有问题,重试时间
1W ; expire,DNS记录过期时间
3H )
@ IN NS master ;主DNS服务器解析
@ IN NS slave1 ;从DNS服务器解析,需要添加从节点的NS记录
slave1 A 10.0.0.129 ;从DNS服务器的A记录也要写上
master A 10.0.0.128
www A 10.0.0.200
k8s A 10.0.0.128
linux A 10.0.0.200
rndc reload //重新加载dns配置
主节点更新www.catyer.cn的解析,查看从节点的解析是否正确,dig www.catyer.cn
更新的记录就是10.0.0.200的记录,响应的DNS服务器即为128和129
更新slave1节点的时间时区问题
安装chrony服务:yum -y install chrony,systemctl start chronyd
复制时区到slave1:scp /etc/localtime [email protected]:/etc
date
k8s内的dns服务器:coredns
配置DNS服务器转发forward:first/only模式
配置环境
dns1(主解析):10.0.0.129
dns2(转发+缓存机):10.0.0.128
客户端:10.0.0.130
想实现的效果:在客户端机器上解析www.catyer.local这个域名,通过DNS2转发到DNS1,通过DNS1解析到DNS1上面的解析记录(1.1.1.1)
---配置DNS1
DNS1在域配置里加一条,这个也是主DNS服务器(master),vim /etc/named.rfc1912.zones,域名为catyer.local(后缀)
zone "catyer.local" {
type master;
file "catyer.local.zone";
};
配置解析记录,scp原来的/var/named/catyer.cn.zone,修改属性chgrp named catyer.local,DNS1的配置完成
$TTL 1D
@ IN SOA master admin.catyer.local ( ;SOA记录:起始授权记录,修改为catyer.local
20220724 ; serial,序列号
3H ; refresh,DNS刷新记录,从节点拉取
10M ; retry,服务器网络有问题,重试时间
1W ; expire,DNS记录过期时间
3H )
@ IN NS master ;主DNS服务器解析
master A 10.0.0.129
www A 1.1.1.1 ;DNS1上面的解析
rndc reload
systemctl restart named
--配置DNS2服务器
DNS forward的两种方式:first和only
1.first:转发到dns1服务器,如果没结果,直接到互联网的根找
2.only:转发到dns1服务器,没结果,则返回no
vim /etc/named.conf
option{
forward only; ##转发模式
forwarders {10.0.0.129;}; ##转发的DNS服务器
}
dnssec-enable no; ##yes修改为no,这是dns默认的安全配置
dnssec-validation no;
rndc reload ##重新加载DNS配置
systemctl restart named
--DNS3上测试
1.如果10.0.0.129能出公网,则only模式ok;如果10.0.0.129不能出公网,则需要用first功能,first功能:去公网找根DNS
##在dns1上删除掉出公网的路由route
ip route
default via 10.0.0.2 dev ens33
10.0.0.0/24 dev ens33 proto kernel scope link src 10.0.0.129 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
ip route del default via 10.0.0.2 dev ens33
ip route
10.0.0.0/24 dev ens33 proto kernel scope link src 10.0.0.129 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
##无法解析了,因为配置了only模式,将这个添加回来
ip route add default via 10.0.0.2 dev ens33
测试catyer.local的访问,解析到的是DNS1的记录1.1.1.1
dig www.catyer.local
##断了公网为什么还能解析:存在缓存,一次解析成功后会存在缓存中,刷新缓存
rndc flush
2.first模式option转发
dns服务器转发优先找10.0.0.129,如果没有,则找互联网的根服务器,逐级转发找到
DNS2在forward模式配置为first
option{
forward first; ##转发模式
forwarders {10.0.0.129;}; ##转发的DNS服务器
}
rndc reload
systemctl restart named
删除掉dns1的路由,模拟dns1无法出公网,dns2找互联网根服务器的场景
ip route del default via 10.0.0.2 dev ens33
ping www.baidu.com
ping: www.baidu.com: Name or service not known
dns3测试找dig www.baidu.com,还是可以的,证明通过DNS2转发成功了
公司三地的DNS转发架构:统一通过北京的总DNS出口,上海、成都的解析可以指向北京DNS,上海、成都的机器可以指向各自的DNS,先找缓存,没有去找北京
配置上海和成都DNS转发forwarders为北京的DNS,快一些,缓存
智能DNS分发的实现:CDN
通过GSLB:全局负载均衡,将最佳的DNS返回到用户的客户端,可以自动识别用户在什么地域,可以匹配相对应最近的CDN节点
CDN节点:先找本地缓存,没有找DNS,返回最佳的节点;通过缓存,让用户找到最近的CDN节点,如果CDN节点没有这个图片(文件)资源,则回源到源站获取资源
访问路径:访问CDN的域名+对应的路径url,返回对应的资源;CDN再配置的时候默认配置好了CNAME
案例:配置阿里云的CDN,源站指向ctfmall的服务器/OSS桶
ping xxxyyy.ctfmall.com,返回的是cdn域名的CNAME--->CDN服务商,源站是47.106.192.140这个站点IIS,通过就近分发内容
整体的DNS架构(互联网+公司内网)
内网机器---网卡指向内网(分支)DNS服务器---内网DNS配置转发(forward first)到总DNS服务器(出公网)
总DNS服务器找不到---互联网找根服务器---一级域名(.com,.net,.cn)---二级域名(baiduc.com)---三级域名(www)
www返回到客户端内网机器