DNS:(Domain Name System,域名系统),应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务器端:53/udp, 53/tcp
根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本一级域名:Top Level Domain: tld三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域arpa通用顶级域名:com, edu, mil, gov, net, org, int
二级域名:magedu.com
三级域名:blog.magedu.com
最多可达到127级域名
如:www.google.com. 这个域名,分解后含义如下:
. #表示根域.com #表示顶级域google.com #表示二级域www #表示主机名
DNS服务器规则(1) 每一个主机都知道根域在哪里;(2) 上级必须知道下级;(3) 下级不知道上级;(4) 查询两段式递归查询和迭代查询;(5) 根域不迭代(根全球有13台a-m.root-servers.net);(6) 顶级域不迭代;(7) 二级域服务器可以只提供权威查询不提供迭代或转发;
DNS的工作模式:DNS查询以各种不同的方式进行解析,客户机可通过使用从以前查询获得的缓存信息就地应答查询,DNS服务器也可以使用其自身的资源记录缓存来应答查询。但更多是使用递归查询和迭代查询两种方式。
递归查询:DNS服务器收到一个域名解析请求时,如果所要检索的资源记录不在本地,DNS服务器将和自己的上一层服务器交互,获得最终的答案,并将其返回给客户
迭代查询:DNS服务器收到解析请求,首先在本地的数据库中查找是否有相应的资源记录,如果没有,则向客户提供另外一个DNS服务器的地址,客户负责把解析请求发送给新的DNS服务器地址
完整的DNS查询请求经过的流程
如:访问 www.google.com(1)/etc/hosts:查看本地hosts文件有没有记录获取应IP地址,如果没有,进行下一步(2)/etc/resolv.conf:查询DNS服务器,如8.8.8.8。若此DNS服务器本地有记录(如A记录)或缓存记录,则直接从本地中获取对应的IP,如果没有,进行下一步(3)根DNS:通过8.8.8.8到根DNS服务器(.)去查询,返回.com主机的DNS服务器IP地址(4).com:通过.com的DNS服务器去查询,返回google.com主机的DNS服务器IP地址(5)google.com. :通过左侧的DNS服务器去查询,返回www.google.com主机的IP地址(6)访问 www.google.com:8.8.8.8这台DNS服务器收到信息后会先把这条记录在本地,然后把查询数据结果返回客户端
在这个查询过程中,从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。
DNS工作原理:1、当在浏览器中输入URL时,浏览器会先检查自己的缓存是否有域名IP的映射关系,有则直接使用IP进行通信2、如浏览器没有缓存,则操作系统检查本地hosts文件是否有域名IP的映射关系,有则使用IP进行通信3、如果hosts没有这个域名的映射,则查找本地DNS解析器缓存是否有映射关系,有则直接返回完成域名解析4、如果还未找到映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,也就是本地DNS服务器,如果服务器已缓存了映射关系,则使用这个IP地址映射返回完成域名解析,此时解析不具有权威性5、如果本地DNS服务器缓存已经失效,进行递归查询。
前提准备 关闭SElinux 关闭firewalld防火墙 时间同步 需要五台主机 DNS服务器1:配置eth0和eth1,10.0.0.131、192.168.1.130,其中eth0为NAT模式,eth1为桥接模式。 web服务器1:10.0.0.132 NAT模式 web服务器2:192.168.1.131 桥接模式 DNS客户端1:10.0.0.133 NAT模式 DNS客户端2:192.168.1.132 桥接模式 #DNS服务器1 配置 bind服务器包、bind-utils(测试包可以不装) [root@centos7-01 ~]# yum -y install bind bind-utils #启动bind 并设置开机启动(查看启动状态 systemctl status named.service) [root@centos7-01 ~]# systemctl enable --now named.service [root@centos7-01 ~]# vim /etc/named.conf #更改bind配置,注释掉以下两行,开放访问权限 #listen-on port 53 { 127.0.0.1; }; #allow-query { localhost; }; #重新加载配置 [root@centos7-01 ~]# rndc reload #配置bind实现判断访问来源。 vim /etc/named.conf #判断网段acl,在文件最前面加下面行 acl beijingnet { 10.0.0.0/24; }; acl shanghainet { 192.168.1.0/24; }; 将以下内容删除或注释掉 zone "." IN { type hint; file "named.ca"; }; # 创建view,在文件下面加 view beijingview { match-clients { beijingnet;}; include "/etc/named.rfc1912.zones.bj"; }; view shanghaiview { match-clients { shanghainet;}; include "/etc/named.rfc1912.zones.sh"; }; #include "/etc/named.rfc1912.zones";原有的删除或注释掉 include "/etc/named.root.key"; #配置named.rfc1912.zones.bj vim /etc/named.rfc1912.zones.bj zone "." IN { type hint; file "named.ca"; }; zone "magedu.org" { type master; file "magedu.org.zone.bj"; }; #配置named.rfc1912.zones.sh vim /etc/named.rfc1912.zones.sh zone "." IN { type hint; file "named.ca"; }; zone "magedu.org" { type master; file "magedu.org.zone.sh"; }; #配置magedu.org.zone.bj,master A 10.0.0.131为本机,www A 10.0.0.132为web服务器 vim /var/named/magedu.org.zone.bj $TTL 1D @ IN SOA master admin.magedu.org. ( ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master master A 10.0.0.131 www A 10.0.0.132 #配置magedu.org.zone.sh,master A 192.168.1.130为本机,www A 192.168.1.131为web服务器 vim /var/named/magedu.org.zone.sh $TTL 1D @ IN SOA master admin.magedu.org. ( ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master master A 192.168.1.130 www A 192.168.1.131 #重新加载配置,如果报错rndc: connect failed: 127.0.0.1#953: connection refused 连接拒绝错误,需要进行文件授权 [root@centos7-01 ~]# chmod 640 /etc/rndc.key [root@centos7-01 ~]# rndc reload server reload successful #配置web服务器1:10.0.0.132、web服务器2:192.168.1.131 安装httpd,注意最小化安装有时出现Existing lock /var/run/yum.pid: another copy is running as pid的错误,可以运行一下代码恢复后可正常安装。 [root@centos7-01 ~]# rm -f /var/run/yum.pid [root@centos7-01 ~]# /sbin/service yum-updatesd restart #安装httpd yum -y install httpd #启动程序并开机自启 systemctl enable --now httpd #修改以下页面访问内容以便区分两个web服务器 #web服务器1: echo www.magedu.org in Beijing > /var/www/html/index.html #web服务器2: echo www.magedu.org in Shanghai > /var/www/html/index.html #配置客户端1:10.0.0.133 DNS地址为DNS服务器1 eth0的IP、客户端2:192.168.1.132的DNS地址为DNS服务器1 eth1的IP [root@centos7-03 ~]# service network restart #查看DNS是否生效。 #DNS客户端1 [root@centos7-03 etc]# cat resolv.conf # Generated by NetworkManager nameserver 10.0.0.131 #DNS客户端2 [root@centos7-05 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.1.130 #DNS客户端1访问www.magedu.org进行测试,可显示web服务器1的页面。 [root@centos7-04 ~]# curl www.magedu.org www.magedu.org in Beijing #DNS客户端2访问www.magedu.org进行测试,可显示web服务器2的页面。 [root@centos7-05 ~]# curl www.magedu.org www.magedu.org in Shanghai
前提准备关闭firewalld防火墙
#查看当前状态iptables -nvL,未配置任何规则 [root@centos7-02 etc]# ss -ntl Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination #放行ssh,telnet, ftp, web服务80端口 [root@centos7-02 etc]# iptables -A INPUT -p tcp -m multiport --dport 21,22,23,80 -j ACCEPT #拒绝全部端口服务,由于规则从上至下进行规则判断,ssh,telnet, ftp, web满足条件会放行,不满足第一条件的到第二条拒绝全部端口 [root@centos7-02 etc]# iptables -A INPUT -j REJECT #查看当前状态iptables -nvL [root@centos7-02 etc]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 21,22,23,80 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 10 packets, 1484 bytes) pkts bytes target prot opt in out source destination #ssh测试链接正常 [root@centos7-04 ~]# ssh 10.0.0.132 The authenticity of host '10.0.0.132 (10.0.0.132)' can't be established. ECDSA key fingerprint is SHA256:kX81UzGfABKKtw1oZXc3jM+U+IRFd++YoFuKa26b6UA. ECDSA key fingerprint is MD5:d3:47:82:78:81:d9:bf:ea:da:8c:14:62:84:a5:d9:89. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.0.0.132' (ECDSA) to the list of known hosts. root@10.0.0.132's password: Last login: Sun May 1 15:40:27 2022 from 10.0.0.1 [root@centos7-02 ~]# #web测试链接正常 [root@centos7-04 ~]# curl 10.0.0.132 www.magedu.org in Beijing
NAT的实现分为下面类型:
SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问
外部网络,实现地址伪装,请求报文:修改源IP
DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外
部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP
PNAT: port nat,端口和IP都进行修改
PC访问 www.xxx.com,由于存在域名会通过DNS服务器解析域名从而获得公网IP地址。
PC收到此网站的公网IP地址后,封装数据。源IP为PC的IP地址;目的地址为解析获得的公网IP地址;目的端口号为80。并且将此报文发送给网关设备, 网关设备收到数据报文后通过路由关系发送到出口设备。
出口设备配置有NAT转换关系,将报文中的源IP地址转换为公网IP地址。重新封装数据报文后发出。(这一步为SNAT)
数据报文到达公有网络上,由于目的IP地址为公网IP地址,通过公网路由关系转发到网站端(服务端)。
服务端收到报文后,检查到目的地址为公网IP地址。通过本端配置的NAT映射关系,与公网IP地址相匹配的映射关系中寻找私网IP地址。找到映射关系后,将目的地址转换为私网IP地址(这一步为DNAT)。在通过内部网络路由关系将数据报文转发至相应的服务器。
服务器将收到的报文通过相关计算,重新封装报文,发送给用户PC。原理不变,经过多次数据交互。最后用户PC接收到数据报文,网站就被打开了。
实现SNAT和DNAT都需要开启内核数据转发功能
[root@centos7-04 ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward=1
DNAT:nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能
DNAT选项:
--to-destination ipaddr[-ipaddr]]
DNAT 格式:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --todestination InterSeverIP[:PORT]
范例:
iptables -t nat -A PREROUTING -d 192.168.126.83 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.84:80
DNAT使用方法DNAT:nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能
DNAT选项:
--to-destination ipaddr[-ipaddr]]
DNAT 格式:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --todestination InterSeverIP[:PORT]
范例:
iptables -t nat -A PREROUTING -d 192.168.126.83 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.84:80iptables规则持久保存:CentOS 7,8
iptables-save > /PATH/TO/SOME_RULES_FILE
CentOS 6
#将规则覆盖保存至/etc/sysconfig/iptables文件中
service iptables save
加载规则1.CentOS 7,8 重新载入预存规则文件中规则:
iptables-restore < /PATH/FROM/SOME_RULES_FILE
iptables-restore选项
-n, --noflush:不清除原有规则
-t, --test:仅分析生成规则集,但不提交
2.CentOS 6:
service iptables restart #会自动从/etc/sysconfig/iptables 重新载入规则
开机自动重载规则1.用脚本保存各iptables命令;让此脚本开机后自动运行
/etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE
用规则文件保存各规则,开机时自动载入此规则文件中的规则
在/etc/rc.d/rc.local文件添加
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
2.定义Unit File, CentOS 7,8 可以安装 iptables-services 实现iptables.service
范例: CentOS 7,8 使用 iptables-services
[root@centos8 ~]#yum -y install iptables-services
[root@centos8 ~]#cp /etc/sysconfig/iptables{,.bak}
#保存现在的规则到文件中方法1
[root@centos8 ~]#/usr/libexec/iptables/iptables.init save
#保存现在的规则到文件中方法2
iptables-save > /etc/sysconfig/iptables
#开机启动
[root@centos8 ~]#systemctl enable iptables.service