1、简述DNS服务器原理,并搭建主-辅服务器。
DNS服务器原理
DNS:Domain Name System,域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务器端:53/udp,53/tcp,主要的作用就是将网址 (域名) 解析成 IP 地址。
请求www.baidu.com域名时的流程:
- 查询本地hosts(/etc/hosts)文件中是否有www.baidu.com域名的记录,如果有直接使用,如果没有,向本地自定义的DNS服务器去请求(/etc/resolv.conf);
- DNS服务器收到客户端请求,DNS服务器查询本地缓存是否有www.baidu.com域名的解析记录,如果有直接返回给客户端;如果没有则DNS服务器直接向根服务器(.)请求查询;
- 根服务器(.)收到DNS服务器的查询请求发现是查询.com域的信息,然后根服务器(.)则返回.com域服务器的IP给到DNS服务器;
- DNS服务器收到.com域服务器的IP,则再次向.com域服务器请求baidu.com域服务器的IP;
- DNS服务器收到.com返回baidu.com域名服务器IP,则直接再次请求baidu.com域名服务器,查询www的解析记录;
- DNS服务器查询到www.baidu.com的解析记录后则直接返回给客户端,并自己缓存此记录;
- 客户端拿到www.baidu.com的IP就可以直接访问目标主机了,并缓存了此解析记录(2-7阶段是一次递归查询)
搭建主、辅服务器
一、搭建主服务器
环境要求
需要三台主机
DNS服务器:10.0.0.8
web服务器:10.0.0.100
DNS客户端:10.0.0.7
1 准备
关闭SELinux
关闭防火墙
时间同步
2 修改配置文件
[root@centos8 ~]#yum -y install bind
[root@centos8 ~]#vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
[root@centos8 ~]#vim /etc/named.rfc1912.zones
zone "magedu.org" {
type master;
file "magedu.org.zone";
};
[root@centos8 ~]#rndc reload
3 DNS区域数据库文件
[root@centos8 ~]#cp -p /var/named/named.localhost /var/named/magedu.org.zone
[root@centos8 ~]#vim /named/magedu.org.zone
$TTL 86400
@ IN SOA master admin.magedu.org (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H) ; minimum
NS master
master A 10.0.0.8
www A 10.0.0.100
[root@centos8 ~]#rndc reload
4 检查配置文件和数据库文件格式,并启动服务
[root@centos8 ~]#named-checkconf
[root@centos8 ~]#named-checkzone "magedu.org" /var/named/magedu.zone
[root@centos8 ~]#systemctl start named
[root@centos8 ~]#rndc reload
5 实现WEB服务
[root@ubuntu1804 ~]#yum -y install httpd
[root@ubuntu1804 ~]#vim /var/www/html/index.html
www.magedu.org
[root@ubuntu1804 ~]#systemctl start httpd
6 在客户端实现测试
[root@centos7 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=10.0.0.8
[root@centos7 ~]#nmcli con up eth0
[root@centos7 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.0.8
[root@centos7 ~]#curl www.magedu.org
www.magedu.org
二、搭建辅服务器
1 主服务器端配置
[root@centos8 ~]#vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
allow-transfer { 10.0.0.18;}; #加此行
#主DNS服务器10.0.0.8内容更新,从服务器10.0.0.18同步
[root@centos8 ~]#vim /var/named/magedu.org.zone
$TTL 1D
@ IN SOA master admin.magedu.org. (
1 ; serial #版本号更新
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS slave #加此行
master A 10.0.0.8
slave A 10.0.0.18 #加此行
[root@centos8 ~]#rndc reload
2 加一台从服务器 10.0.0.18,从服务器端配置
[root@centos8 ~]#yum -y install bind
[root@centos8 ~]#vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#不允许其它主机进行区域传输
allow-transfer { none;};
[root@centos8 ~]#vim /etc/named.rfc1912.zones
zone "magedu.org" IN {
type slave;
masters {10.0.0.8;};
file "slaves/magedu.org.slave";
};
[root@centos8 ~]#systemctl enable --now named
[root@centos8 ~]#rndc reload
3 客户端(10.0.0.7)测试主从DNS服务架构
[root@centos7 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=10.0.0.8
DNS2=10.0.0.18
[root@centos7 ~]#systemctl restart network
[root@centos7 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
search magedu.org
nameserver 10.0.0.8
nameserver 10.0.0.18
#验证从DNS服务器是否可以查询:
#默认走主DNS服务器10.0.0.8
[root@centos7 ~]#dig www.magedu.org
[root@centos7 ~]#dig www.magedu.org
#在主服务器上停止DNS服务
[root@centos8 ~]#rndc stop
#验证从DNS服务器仍然可以查询
[root@centos7 ~]#dig www.magedu.org
[root@centos7 ~]#dig www.magedu.org
2、搭建并实现智能DNS。
1 环境要求
需要四台机器
DNS主服务器:10.0.0.8/24、100.0.0.8/24
web服务器1:10.0.0.100/24
web服务器2:100.0.0.100/24
DNS客户端:10.0.0.7/24(模拟北京)、100.0.0.7/24(模拟上海)
2 前提准备
关闭SELinux
关闭防火墙
时间同步
3 实现步骤
3.1 DNS服务器的网卡配置
#配置两个IP地址
#10.0.0.8/24
#100.0.0.8/24
[root@centos8 ~]#ip a a 100.0.0.8/24 dev eth0 #加一个IP地址
3.2 主DNS服务端配置文件实现view
[root@centos8 ~]#yum -y install bind
[root@centos8 ~]#vim /etc/named.conf
#在文件最前面加下面行
acl beijingnet {
10.0.0.0/24
};
acl shanghainet {
100.0.0.0/24
};
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#其它略
#创建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.root.key";
[root@centos8 ~]#rncd reload
3.3 实现区域配置文件
[root@centos8 ~]#vim /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "name.ca";
}
zone "magedu.org" {
type master;
file "magedu.org.zone.bj";
}
[root@centos8 ~]#vim /etc/named.rfc1912.zones.sh
zone "." IN {
type hint;
file "name.ca";
}
zone "magedu.org" {
type master;
file "magedu.org.zone.sh";
}
chgrp named /etc/named.rfc1912.zones.bj
chgrp named /etc/named.rfc1912.zones.sh
[root@centos8 ~]#rncd reload
3.4 创建区域数据库文件
vim /var/named/magedu.org.zone.bj
$TTL 1D
@ IN SOA master admin.magedu.org. (1 1D 1H 1W 3D )
NS master
master A 10.0.0.8
www A 10.0.0.100
vim /var/named/magedu.org.zone.sh
$TTL 1D
@ IN SOA master admin.magedu.org. (1 1D 1H 1W 3D )
NS master
master A 10.0.0.8
www A 100.0.0.100
[root@centos8 ~]#rncd reload
3.5 实现位于不同区域的WEB服务器
#分别在两台主机上安装http服务
#在web服务器1:10.0.0.100实现
[root@ubuntu1804 ~]#yum -y install httpd
[root@ubuntu1804 ~]#vim /var/www/html/index.html
www.magedu.org in beijing
[root@ubuntu1804 ~]#systemctl start httpd
#在web服务器2:100.0.0.100实现
[root@ubuntu1804 ~]#yum -y install httpd
[root@ubuntu1804 ~]#vim /var/www/html/index.html
www.magedu.org in shanghai
[root@ubuntu1804 ~]#systemctl start httpd
3.6 客户端测试
[root@centos7 ~]#dig www.magedu.org @10.0.0.8 #解析为10.0.0.100
[root@centos7 ~]#curl www.magedu.org @10.0.0.8
www.magedu.org in beijing
[root@centos7 ~]#dig www.magedu.org @100.0.0.8 #解析为100.0.0.100
[root@centos7 ~]#curl www.magedu.org @100.0.0.8
www.magedu.org in shanghai
3、使用iptable实现: 放行ssh,telnet, ftp, web服务80端口,其他端口服务全部拒绝
[root@centos8 ~]#iptables -A INPUT -p tcp -m multiport--dports 21:23,80 -j ACCEPT
[root@centos8 ~]#iptables -A INPUT -j REJECT
4、NAT原理总结
1.1 NAT的产生
由于网络的飞速发展和网络应用的极速增多,致使IPv4可用地址空间逐渐枯竭。尽管IPv6可以在根本上解决地址枯竭问题,但IPv4发展到IPv6还需要一个过渡,而这便产生了NAT。
1.2 NAT的作用
IP地址分为公网IP与私网IP。一般情况下,在互联网中,公网IP可直接访问,私网IP无法直接访问。而NAT则是将私网IP地址转换为公网IP地址(将IP报文头部的私网IP地址改为可以提供访问的公网IP地址),从而实现用户上网功能或服务器在互联网上提供服务。NAT还可以使得一个公网IP代表多个不同的内网IP,这样便节省了IP地址资源。
1.3 NAT的类型与分类
NAT分为静态转换、动态转换、端口转换
- 静态转换:私有地址与公有地址进行一对一的映射。这种一对一映射无法缓解可用公有地址短缺的问题。
- 动态转换:私有地址与公有地址进行一对多的映射。首先建立公有地址地址池,私有地址向外通信时,会从公有地址地址池中选择非在用的公有地址进行映射,当通信结束时,释放映射关系,公有地址重新恢复到地址池中待用。弊端:若私有地址向外通信,而公有地址地址池中无可用公有地址时,会等待公有地址释放后在进行通信。
- 端口转换:在大多数网络中,一般都使用的是IP上的某个端口(如80、443、3389等),所以不需要进行全地址映射,只需要私有地址端口映射到公有地址端口上,直接访问公有地址加端口号的形式便可以。这样可以使得一个公有地址可以对应多个私有地址,从而大大缓解了公有地址紧缺的问题。
- Easy IP:为小型网络,一般为家庭、小型网吧、办公室等内部主机不多的地方。通过拨号方式获取一个临时公网IP地址进行外网的访问。
1.4 扩展:SNAT与DNAT区别
- SNAT是私网访问外网时,报文中源IP地址(私网IP地址)转换为公网IP地址过程。此转换可以使用静态、动态等转换方式,且内部的多台主机共用同一公网IP地址进行外网访问。
- DNAT是外网访问私网时,报文中目的IP地址(公网IP地址)转换为私网IP地址过程。此转换过程可以使用静态、动态、端口等转换方式。
1.5 实例
公司(有固定公网IP地址)上网访问某网站简易过程
- PC访问 www.xxxxxxx.com ,由于存在域名会通过DNS服务器解析域名从而获得公网IP地址。
- PC收到此网站的公网IP地址后,封装数据。源IP为PC的IP地址;目的地址为解析获得的公网IP地址;目的端口号为80。并且将此报文发送给网关设备, 网关设备收到数据报文后通过路由关系发送到出口设备。
- 出口设备配置有NAT转换关系,将报文中的源IP地址转换为公网IP地址。重新封装数据报文后发出。(这一步为SNAT)
- 数据报文到达公有网络上,由于目的IP地址为公网IP地址,通过公网路由关系转发到网站端(服务端)。
- 服务端收到报文后,检查到目的地址为公网IP地址。通过本端配置的NAT映射关系,与公网IP地址相匹配的映射关系中寻找私网IP地址。找到映射关系后,将目的地址转换为私网IP地址(这一步为DNAT)。在通过内部网络路由关系将数据报文转发至相应的服务器。
- 服务器将收到的报文通过相关计算,重新封装报文,发送给用户PC。原理不变,经过多次数据交互。最后用户PC接收到数据报文,网站就被打开了。
5、iptables实现SNAT和DNAT,并对规则持久保存
实现SNAT和DNAT都需要开启内核数据转发功能
[root@centos8 ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
1. SNAT
(1) 基于nat表的target,适用于固定的公网IP
SNAT选项:
--to-source [ipaddr[-ipaddr]][:port[-port]]
--random
语法:
iptables -t nat -A POSTROUTING -s localNET ! -d localNET -j SNAT --to-source ExtIP
范例:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j SNAT --to-source 192.168.10.8
(2) MASQUERADE:基于nat表的target,适用于动态的公网IP,如:拨号网络
MASQUERADE选项:
--to-ports port[-port]
--random
语法:
iptables -t nat -A POSTROUTING -s localNET ! -d localNET -j MASQUERADE
范例:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE
2. DNAT
nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能
DNAT选项:
--to-destination [ipaddr[-ipaddr]][:port[-port]]
语法:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterServerIP[:PORT]
范例:在10.0.0.8(防火墙)上设置规则,实现外网(192.168.10.100)可以访问内网(10.0.0.7)
[root@centos8 ~]#iptables -t nat -A PREROUTING -d 192.168.10.8 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.7
范例:内网端口更改为8080,实现外网(192.168.10.100)访问内网(10.0.0.7)
[root@centos8 ~]#iptables -t nat -R PREROUTING 1 -d 192.168.10.8 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.7:8080
范例:REDIRECT转发:内网端口再次更改为9090,实现外网(192.168.10.100)访问内网(10.0.0.7)
[root@centos7 ~]#iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 8080 -j REDIRECT --to-ports 9090
3. 持久保存规则
3.1 iptables规则持久保存
CentOS 7,8
iptables-save > /PATH/TO/SOME_RULES_FILE
CentOS 6
#将规则覆盖保存至/etc/sysconfig/iptables文件中
service iptables save
3.2 加载规则
CentOS 7,8 重新载入预存规则文件中规则:
iptables-restore < /PATH/FROM/SOME_RULES_FILE
iptables-restore选项
- -n, --noflush:不清除原有规则
- -t, --test:仅分析生成规则集,但不提交
CentOS 6
#会自动从/etc/sysconfig/iptables 重新载入规则
service iptables restart
3.3 开机自动重载规则
3.3.1 用脚本保存iptables命令;让此脚本开机后自动运行
/etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE
3.3.2 用规则文件保存各规则,开机时自动载入此规则文件中的规则
在/etc/rc.d/rc.local文件添加
[root@centos8 ~]#vim /etc/rc.d/rc.local
iptables-restore < /PATH/FROM/SOME_RULES_FILE
[root@centos8 ~]#chmod +x /etc/rc.d/rc.local #加执行权限
3.3.3 定义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
范例:
#centos7,8安装iptables-services
[root@centos8 ~]#yum -y install iptables-services
#实现SNAT
[root@centos8 ~]#iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j SNAT --to-source 192.168.10.8
#实现DNAT
[root@centos8 ~]#iptables -t nat A PREROUTING -d 192.168.10.8 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.7
#对规则持久保存
[root@centos8 ~]#iptables-save > /etc/sysconfig/iptables
[root@centos8 ~]#iptables -F #清空规则
[root@centos8 ~]#iptables -vnL #没有任何规则
[root@centos8 ~]#systemctl start iptables
[root@centos8 ~]#iptables -vnL #查看到保存的规则
#开机启动
[root@centos8 ~]#systemctl enable iptables
[root@centos8 ~]#reboot #重启
[root@centos8 ~]#iptables -vnL #查看到保存的规则