Linux教程

linux_5

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

1、简述DNS服务器原理,并搭建主-辅服务器。

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服务器缓存已经失效,进行递归查询。

2、搭建并实现智能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

3、使用iptable实现: 放行ssh,telnet, ftp, web服务80端口,其他端口服务全部拒绝

前提准备关闭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

4、NAT原理总结

NAT的实现分为下面类型:

SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问

外部网络,实现地址伪装,请求报文:修改源IP

DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外

部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP

PNAT: port nat,端口和IP都进行修改

  1. PC访问 www.xxx.com,由于存在域名会通过DNS服务器解析域名从而获得公网IP地址。

  2. PC收到此网站的公网IP地址后,封装数据。源IP为PC的IP地址;目的地址为解析获得的公网IP地址;目的端口号为80。并且将此报文发送给网关设备, 网关设备收到数据报文后通过路由关系发送到出口设备。

  3. 出口设备配置有NAT转换关系,将报文中的源IP地址转换为公网IP地址。重新封装数据报文后发出。(这一步为SNAT)

  4. 数据报文到达公有网络上,由于目的IP地址为公网IP地址,通过公网路由关系转发到网站端(服务端)。

  5. 服务端收到报文后,检查到目的地址为公网IP地址。通过本端配置的NAT映射关系,与公网IP地址相匹配的映射关系中寻找私网IP地址。找到映射关系后,将目的地址转换为私网IP地址(这一步为DNAT)。在通过内部网络路由关系将数据报文转发至相应的服务器。

  6. 服务器将收到的报文通过相关计算,重新封装报文,发送给用户PC。原理不变,经过多次数据交互。最后用户PC接收到数据报文,网站就被打开了。

5、iptables实现SNAT和DNAT,并对规则持久保存。

实现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

 

 

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