Java教程

网络network

本文主要是介绍网络network,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

网络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报文协议等,设备:交换机,数据帧(仅限于局域网)

物理层:在局域网上的传输数据帧,管理电脑媒体之间的传输,网线,网卡等,物理连接

img

交换机和集线器:交换机可以隔离冲突域,但是不能隔离广播域

交换机工作在数据链路层,集线器工作在物理层,路由器工作在网络层

交换机需要联通同一个网段内

路由器:可以联通两个不同的网段,路由转发,路由表自动学习

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

img

-c:精简显示,只显示10个

网络协议TCP/IP

其实TCP/IP是多个协议的组合,是TCP/IP协议簇,包括TCP/IP/RIP/ICMP/SMTP/FTP等协议

TCP/IP表示架构(四层):

链路层---网络层---传输层---应用层(包括会话层、表示层、应用层)

img

tcp和udp之间的区别

tcp可靠 | udp高效

tcp长链接,保持会话久(session)| udp短连接,保持会话时间短

tcp适合email web浏览 下载业务(长连接不中断)| ucp适合声音流、视频流,不保存,即时

img

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回)

img

Client端:发送请求 Server端:LISTEN(监听)

SYN-SENT:同步已发送 SYN-RCVD:同步已收到,同时发送给你SYN

ESTABLISHED:建立好连接

【SYN请求】、seq=0

【SYN、ACK请求】、seq=0(服务端请求)、ack=1(服务端响应)

【ACK请求】、seq=1(ack请求)、ack=1(客户端响应)

img

为什么不是两次握手的原因?

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地址代替域名(主机名)

img

-u:显示udp协议

-p:显示连接的协议/服务

-l:显示STATE为LISTEN的条目,可以去掉不打这个

img

-i:显示网卡列表

img

ss命令,用法基本和netstat保持一致,但是更加轻量级,显示更多更详细的TCP信息,比netstat更快

ss命令:直接操作内核

-t:显示tcp

-u:显示udp

-a:显示所有

-l:显示在LISTEN的端口

-n:显示端口,不解析为服务

-p:显示是什么服务,-p还能显示这个服务连接的pid(进程id)

img

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作为隔离

网络划分面试题

img

路由相关配置

route -n:查看网关,本地回环地址0.0.0.0的就是网关

img

DNS解析文件:/etc/resolv.conf

云上的一般都是云内的DNS服务器(内网DNS服务器)

img

路由表的构成

1.destination:目标地址,需要到达的

2.gateway:网关

3.netmask:子网掩码

4.flag:flag位

5.iface:网卡(接口)

相当做路由器使用服务器:开启ipv4转发功能

vim /etc/sysctl.conf文件中

添加net.ipv4.forward=1这条命令

执行sysctl -p使得这个文件配置生效

img

添加静态路由

-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

img

netplan apply:应用网卡配置(更新配置)

VMware的三种网络连接模式

1.仅主机模式:直连主机上面的VMnet1,代表可以和主机直接通信(Cent OS 7网卡),但是无法访问到公网

2.桥接模式:与主机的以太网卡互连,可以出公网,直连公网,外面主机连接交换机(二层)

3.NAT模式:SNAT内网机器需要访问到公网,DNAT内网机器需要提供给外部机器访问(D作为源)

网络面试(加上网络子网规划的)

img

img

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

image-20220716110533069

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服务器,是可以解析到所有的域名的

image-20220716142630586

image-20220716142918160

大量使用缓存技术(提高访问--->读写速率和效率)

想要访问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

image-20220716150020189

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年

image-20220717090214234

公司内部搭建的域名原则:最好是不要和互联网的公网域名冲突

内部服务需要用到内部的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

image-20220717122950825

image-20220717123450832

本机搭建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

image-20220717180716940

image-20220717180935034

image-20220717181021499

面试题: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:查看这个包中有哪些工具

image-20220722212221251

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(自已命名),后续可以在这里写域名解析的文件

image-20220718230253744

写主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

image-20220721214131495

写域配置文件named.rfc1912.zones

将zone的配置信息(catyer.cn)配置到统一的域配置文件内,这里面是/etc/named.frc1912.zones

image-20220719230202982

##写好主域的信息,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这个域名服务的

image-20220721214838733

image-20220721215135845

搭建从DNS服务器(DNS2)

安装dns服务:yum -y install bind

注释掉named.conf配置文件内的监听限制

image-20220721222949631

编辑域配置文件,写上是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

image-20220722213051436

从指定的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

image-20220723084529769

更新slave1节点的时间时区问题

安装chrony服务:yum -y install chrony,systemctl start chronyd

复制时区到slave1:scp /etc/localtime root@10.0.0.129:/etc

date

image-20220723100805462

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	

image-20220723113056834

测试catyer.local的访问,解析到的是DNS1的记录1.1.1.1

dig www.catyer.local
##断了公网为什么还能解析:存在缓存,一次解析成功后会存在缓存中,刷新缓存
rndc flush

image-20220723112947631

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转发成功了

image-20220723113918891

公司三地的DNS转发架构:统一通过北京的总DNS出口,上海、成都的解析可以指向北京DNS,上海、成都的机器可以指向各自的DNS,先找缓存,没有去找北京

配置上海和成都DNS转发forwarders为北京的DNS,快一些,缓存

image-20220723114127871

智能DNS分发的实现:CDN

通过GSLB:全局负载均衡,将最佳的DNS返回到用户的客户端,可以自动识别用户在什么地域,可以匹配相对应最近的CDN节点

CDN节点:先找本地缓存,没有找DNS,返回最佳的节点;通过缓存,让用户找到最近的CDN节点,如果CDN节点没有这个图片(文件)资源,则回源到源站获取资源

image-20220723122137377

访问路径:访问CDN的域名+对应的路径url,返回对应的资源;CDN再配置的时候默认配置好了CNAME

案例:配置阿里云的CDN,源站指向ctfmall的服务器/OSS桶

ping xxxyyy.ctfmall.com,返回的是cdn域名的CNAME--->CDN服务商,源站是47.106.192.140这个站点IIS,通过就近分发内容

image-20220723142638159

image-20220723142701212

整体的DNS架构(互联网+公司内网)

内网机器---网卡指向内网(分支)DNS服务器---内网DNS配置转发(forward first)到总DNS服务器(出公网)

总DNS服务器找不到---互联网找根服务器---一级域名(.com,.net,.cn)---二级域名(baiduc.com)---三级域名(www)

www返回到客户端内网机器

image-20220723143552261

这篇关于网络network的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!