1、简述DNS服务器原理,并搭建主-辅服务器。
DNS服务的基本原理:
DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。
搭建主-辅服务器:
- 1.环境准备:
192.168.112.129 主DNS服务器
192.168.112.134 从DNS服务器
192.168.112.135 web服务器
192.168.112.128 DNS客户端
关闭SElinux
关闭防火墙
时间同步
- 2.操作步骤:
- 2.1、主DNS服务配置
[root@Centos8 ~]#rpm -ql bind
package bind is not installed
[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 { 192.168.112.134;}; #这个填从DNS服务器IP地址
[root@Centos8 ~]#vim /etc/named.rfc1912.zones
#在最后行加上这段
zone "zhanggui.org" {
type master;
file "zhanggui.org.zone";
};
[root@Centos8 ~]#cp -p /var/named/named.localhost /var/named/zhanggui.org.zone
[root@Centos8 ~]#vim /var/named/zhanggui.org.zone
$TTL 1D
@ IN SOA master admin.zhanggui.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS slave
master A 192.168.112.129
slave A 192.168.112.134
www A 192.168.112.135
[root@Centos8 ~]#systemctl enable --now named #我这里是第一次启动我就设置了开机自启动,并立即启动。如果不是第一次启动的话就使用endc reload命令来启动服务。
- 2.2、从DNS的服务配置:
[root@Centos8 ~]#rpm -ql bind
package bind is not installed
[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@localhost ~]#vim /etc/named.rfc1912.zones
zone "zhanggui.org" {
type slave;
masters { 192.168.112.129;};
file "slaves/zhanggui.org.slave";
};
[root@localhost ~]#systemctl start named
[root@localhost ~]#ls /var/named/slaves/zhanggui.org.slave #查看区域数据库文件是否生成
/var/named/slaves/zhanggui.org.slave
- 2.3、web端安装httpd
[root@localhost ~]#yum install httpd -y
[root@localhost ~]#systemctl enable --now httpd
[root@localhost ~]#echo "The is test page" > /var/www/html/index.html
[root@localhost ~]#curl 192.168.112.135
The is test page
- 2.4、客户端测试主从DNS服务架构
[root@Centos7 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.112.128
PREFIX=24
GATEWAY=192.168.112.2
DNS1=192.168.112.129
DNS2=192.168.112.134
[root@Centos7 ~]# dig www.zhanggui.org
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.zhanggui.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40134
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.zhanggui.org. IN A
;; ANSWER SECTION:
www.zhanggui.org. 86400 IN A 192.168.112.135
;; AUTHORITY SECTION:
zhanggui.org. 86400 IN NS master.zhanggui.org.
zhanggui.org. 86400 IN NS slave.zhanggui.org.
;; ADDITIONAL SECTION:
master.zhanggui.org. 86400 IN A 192.168.112.129
slave.zhanggui.org. 86400 IN A 192.168.112.134
;; Query time: 1 msec
;; SERVER: 192.168.112.129#53(192.168.112.129)
;; WHEN: Sat Jan 29 19:33:44 CST 2022
;; MSG SIZE rcvd: 134
- 2.5、在主服务器上停止DNS服务
[root@Centos8 ~]#systemctl stop named
[root@Centos7 ~]# dig www.zhanggui.org
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.zhanggui.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32628
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.zhanggui.org. IN A
;; ANSWER SECTION:
www.zhanggui.org. 86400 IN A 192.168.112.135
;; AUTHORITY SECTION:
zhanggui.org. 86400 IN NS master.zhanggui.org.
zhanggui.org. 86400 IN NS slave.zhanggui.org.
;; ADDITIONAL SECTION:
master.zhanggui.org. 86400 IN A 192.168.112.129
slave.zhanggui.org. 86400 IN A 192.168.112.134
;; Query time: 0 msec
;; SERVER: 192.168.112.134#53(192.168.112.134)
;; WHEN: Sat Jan 29 19:50:23 CST 2022
;; MSG SIZE rcvd: 134
#测试web
[root@Centos7 ~]# curl www.zhanggui.org
The is test page
2、搭建并实现智能DNS。
- 2.1、环境准备:
DNS主服务器和web服务器1:192.168.112.129/24,172.16.0.5/24
web服务器2:192.168.112.128/24
web服务器3:172.16.0.6/24
DNS客户端1:192.168.112.135/24
DNS客户端2:172.16.0.7/24
关闭SElinux
关闭防火墙
时间同步
- 2.2、DNS服务器的网卡配置
[root@Centos8 ~]#ip a a 172.16.0.5/24 dev eth0
[root@Centos8 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:4b:41:25 brd ff:ff:ff:ff:ff:ff
inet 192.168.112.129/24 brd 192.168.112.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 172.16.0.5/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe4b:4125/64 scope link
valid_lft forever preferred_lft forever
- 2.3、主DNS服务端配置文件实现 view
[root@Centos8 ~]#yum install bind -y
[root@Centos8 ~]#vim /etc/named.conf
#在文件最前面加下面行
acl beijingnet {
192.168.112.0/24;
};
acl shanghainet {
172.16.0.0/24;
};
acl othernet {
any;
};
#注释掉下面两行
// 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";
};
view otherview {
match-clients { othernet;};
include "/etc/named.rfc1912.zones.other";
};
include "/etc/named.root.key";
- 2.4、实现区域配置文件
[root@Centos8 ~]#vim /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "zhanggui.org" {
type master;
file "zhanggui.org.zone.bj";
};
[root@Centos8 ~]#vim /etc/named.rfc1912.zones.sh
zone "." IN {
type hint;
file "named.ca";
};
zone "zhanggui.org" {
type master;
file "zhanggui.org.zone.shang";
};
[root@Centos8 ~]#vim /etc/named.rfc1912.zones.other
zone "." IN {
type hint;
file "named.ca";
};
zone "zhanggui.org" {
type master;
file "zhanggui.org.zone.other";
};
chgrp named /etc/named.rfc1912.zones.bj
chgrp named /etc/named.rfc1912.zones.shang
chgrp named /etc/named.rfc1912.zones.other
- 2.5、创建区域数据库文件
[root@Centos8 ~]#vim /var/named/zhanggui.org.zone.bj
$TTL 1D
@ IN SOA master admin.zhanggui.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.112.129
websrv A 192.168.112.128
www CNAME websrv
[root@Centos8 ~]#vim /var/named/zhanggui.org.zone.sh
$TTL 1D
@ IN SOA master admin.zhanggui.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.112.129
websrv A 172.16.0.6
www CNAME websrv
[root@Centos8 ~]#vim /var/named/zhanggui.org.zone.other
$TTL 1D
@ IN SOA master admin.zhanggui.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.112.129
websrv A 127.0.0.1
www CNAME websrv
chgrp named /var/named/zhanggui.org.zone.bj
chgrp named /var/named/zhanggui.org.zone.shang
chgrp named /var/named/zhanggui.org.zone.other
[root@Centos8 ~]#systemctl start named #第一次启动服务,不是第一次启动的话可以使用rndc reload
- 2.6、实现位于不同区域的三个WEB服务器
#分别在三台主机上安装http服务
yum install httpd
#在web服务器1:192.168.112.129/24实现
[root@Centos8 ~]#echo www.zhanggui.org in Other > /var/www/html/index.html
[root@Centos8 ~]#systemctl start httpd
#在web服务器2:192.168.112.128/24
[root@Centos7 ~]# echo www.zhanggui.org in Beijing > /var/www/html/index.html
[root@Centos7 ~]# systemctl start httpd
#在web服务器3:172.16.0.6/24
[root@Centos7 ~]# echo www.zhanggui.org in Shanghai > /var/www/html/index.html
[root@Centos7 ~]# systemctl start httpd
- 2.7、客户端测试
#分别在三台主机上访问
#DNS客户端1:192.168.112.135/24 实现,确保DNS指向192.168.112.129
[root@client network-scripts]#curl www.zhanggui.org
www.zhanggui.org in Beijing
#DNS客户端2:172.16.0.7/24 实现,确保DNS指向172.16.0.5
[root@web3 ~]#curl www.zhanggui.org
www.zhanggui.org in Shanghai
#DNS客户端3:192.168.112.129 实现,,确保DNS指向127.0.0.1
[root@DNS ~]#curl www.zhanggui.org
www.zhanggui.org in other
3、使用iptable实现: 放行ssh,telnet, ftp, web服务80端口,其他端口服务全部拒绝。
- 3.1环境准备
需要两台主机
服务端:192.168.112.136
客户端:192.168.112.129
- 3.2操作步骤
- 3.2.1在服务器安装相应服务软件包
#安装ssh,telnet, ftp, http80 服务软件包并启动服务
[root@Centos7 ~]# yum -y install httpd
[root@Centos7 ~]# systemctl enable --now httpd
[root@Centos7 ~]# yum install vsftpd
[root@Centos7 ~]# systemctl enable --now vsftpd
[root@Centos7 ~]# yum install telnet-server
[root@Centos7 ~]# systemctl enable --now telnet.socket
#端口监听状况
[root@Centos7 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:6010 *:*
LISTEN 0 128 [::]:111 [::]:*
LISTEN 0 128 [::]:80 [::]:*
LISTEN 0 32 [::]:21 [::]:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 [::]:23 [::]:*
LISTEN 0 128 [::1]:631 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
LISTEN 0 128 [::1]:6010 [::]:*
- 3.2.2 配置iptable
#定义iptables 规则
[root@Centos7 ~]# iptables -I INPUT -p tcp -m multiport --dports 21,22,23,80 -j ACCEPT
[root@Centos7 ~]# iptables -A INPUT -j DROP
#查看规则表
[root@Centos7 ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
200 12155 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 21,22,23,80
20 1560 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 101 packets, 13565 bytes)
pkts bytes target prot opt in out source destination
- 3.2.3测试验证
#在客户端上测试上面开通的端口
[root@Centos8 ~]#curl 192.168.112.136
The is test page
[root@Centos8 ~]#ssh 192.168.112.136
root@192.168.112.136's password:
Last login: Sun Jan 30 20:37:49 2022 from 192.168.112.129
[root@Centos7 ~]# hostname -I
192.168.112.136 192.168.122.1
[root@Centos8 ~]#telnet 192.168.112.136
Trying 192.168.112.136...
Connected to 192.168.112.136.
Escape character is '^]'.
^]
Kernel 4.18.0-305.3.1.el8.x86_64 on an x86_64
Centos7 login: root
Password:
Last login: Sun Jan 30 20:40:49 from 192.168.112.129
[root@Centos7 ~]# hostname -I
192.168.112.136 192.168.122.1
[root@Centos8 ~]#ftp 192.168.112.136
Connected to 192.168.112.136 (192.168.112.136).
220 (vsFTPd 3.0.3)
ftp>
ftp> quit
221 Goodbye.
4、NAT原理总结。
- 4.1、概述
NAT ( Network Address Translation ) 中文意思是"网络地址转换",它是一个IETF(Internet Engineering Task Force, Internet工程任务组) 标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。NAT 可以让那些使用私有地址的内部网络连接到Internet或其它IP网络上。NAT路由器在将内部网络的数据包发送到公用网络时,在IP包的报头把私有地址转换成合法的IP地址。
RFC1918规定了三块专有的地址,作为私有的内部组网使用:
A类:10.0.0.0—10.255.255.255 10.0.0.0/8
B类:172.16.0.0—172.31.255.255 172.16.0.0/12
C类:192.168.0.0—192.168.255.255 192.168.0.0/16
这三块私有地址本身是可路由的,只是公网上的路由器不会转发这三块私有地址的流量;当一个公司内部配置了这些私有地址后,内部的计算机在和外网通信时,公司的边界路由会通过NAT或者PAT技术,将内部的私有地址转换成外网IP,外部看到的源地址是公司边界路由转换过的公网IP地址,这在某种意义上也增加了内部网络的安全性。
Basic NAT是一种把一组IP地址映射成另一组IP地址的方法,映射的过程在IP中继设备上完成,对用户完全透明。NAPT则要复杂一些,它把许多(不能太多)IP地址连同TCP/UDP端口号映射到单独一个IP地址和端口号上。无论是Basic NAT还是NAPT都提供一种把内部的私有地址转换成在公网上可用的全球唯一IP地址的方法。
- 4.2、分类
NAT有三种类型:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)
- 4.3、NAT类型及工作原理
静态 NAT ( Static NAT )( 一对一 ): 将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一直不变的。
动态地址 NAT ( Pooled NAT )(多对多): 将内部网络的私有 IP 地址转换为公用 IP 地址时,IP 地址是不确定,随机的。所有被授权访问 Internet 的私有 IP 地址可随机转换为任何指定合法的 IP 地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态 NAT 转换。动态 NAT 是在路由器上配置一个外网 IP 地址池,当内部有计算机需要和外部通信时,就从地址池里动态的取出一个外网 IP,并将他们的对应关系绑定到 NAT 表中,通信结束后,这个外网 IP 才被释放,可供其他内部 IP 地址转换使用,这个 DHCP 租约 IP 有相似之处。当 ISP 提供的合法 IP 地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
网络地址端口转换 NAPT(Network Address Port Translation)(Port-Level NAT)( 多对一 ): 改变外出数据包的源端口并进行端口转换,采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部 IP 地址实现对 Internet 的访问,可以最大限度地节约 IP 地址资源。同时,也可以隐藏网络内部的所有主机,有效避免来自 Internet的攻#击。因此,目前网络中应用最多的就是 PAT 规则。这是最常用的 NAT 技术,也是 IPv4 能够维持到今天的最重要的原因之一,它提供了一种多对一的方式,对多个内网 IP 地址,边界路由可以给他们分配一个外网 IP,利用这个外网 IP 的不同端口和外部进行通信。NAPT 与 动态NAT 不同,它将内部连接映射到外部网络中的一个单独的 IP 地址上,同时在该地址上加上一个由 NAT 设备选定的端口号。
NAPT 是使用最普遍的一种转换方式,它又包含两种转换方式:SNAT和DNAT。
- 源NAT(Source NAT,SNAT):修改数据包的源地址。源NAT改变第一个数据包的来源地址,它永远会在数据包发送到网络之前完成,数据包伪装就是一具SNAT的例子。
- 目的NAT(Destination NAT,DNAT):修改数据包的目的地址。Destination NAT刚好与SNAT相反,它是改变第一个数据懈的目的地地址,如平衡负载、端口转发和透明代理就是属于DNAT。
5、iptables实现SNAT和DNAT,并对规则持久保存。
5.1、实现SNAT:
SNAT:基于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
注意:需要开启ip_forward
[root@Centos8 ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@Centos8 ~]#sysctl -p
范例:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! –d 10.0.0.0/24 -j SNAT --to
source 172.18.1.6-172.18.1.9
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
5.2、实现DNAT
DNAT:nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端
口,但不支持多目标,即不支持负载均衡功能
DNAT选项:
- --to-destination [ipaddr[-ipaddr]][:port[-port]]
DNAT格式:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]
注意: 需要开启 ip_forward
[root@Centos8 ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@Centos8 ~]#sysctl -p
范例:
iptables -t nat -A PREROUTING -d 192.168.0.8 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.7
5.3、持久保存规则:
Centos7,8
iptables-save > /PATH/TO/SOME_RULES_FILE
加载规则
CentOS 7,8 重新载入预存规则文件中规则:
iptables-restore < /PATH/FROM/SOME_RULES_FILE
开机自动重载规则
- 用脚本保存各个iptables命令;让此脚本开机后自动运行/etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE
- 用规则文件保存各个规则,开机时自动载入此规则文件中的规则在/etc/rc.d/rc.local文件添加
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
[root@Centos8 ~]#iptables-save > /data/iptables.rule
[root@Centos8 ~]#vim /etc/rc.d/rc.local
iptables-restore < /data/iptables.rule #需要添加这行内容
[root@Centos8 ~]#chmod +x /etc/rc.d/rc.local #给脚本添加好权限