实验环境
DNS正向主服务器:10.0.0.8 DNS正向从服务器:10.0.0.18 web服务器:10.0.0.7 客户端:10.0.0.6实现DNS正向解析主服务
在DNS主服务器器端安装bind
yum install -y bind
修改bind配置文件
vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; }; #需注释
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
// allow-query { localhost; }; # 需注释
vim /etc/named.rfc1912.zones
zone "magedu.org" IN {
type master;
file "magedu.org.zone";
};
DNS区域数据库文件配置
cp -p /var/named/named.localhost /var/named/magedu.org.zone #以本地解析作为模板,需保留文件属性
vim /var/named/magedu.org.zone
$TTL 1D
@ IN SOA master admin.magedu.org. (
0 ; 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
www A 10.0.0.7
检查配置文件和数据库文件格式,并启动服务
yum install -y bind-utils-32:9.11.26-3.el8.x86_64
[root@Centos8 ~]# named-checkzone magedu.org /var/named/magedu.org.zone
zone magedu.org/IN: loaded serial 0
OK
systemctl start named
实现DNS正向从服务
生产环境中一台主DNS服务器,存在单点失败的问题,可以建立主DNS服务器的备份服务器,即从服务器来实现DNS服务的容错机制。从服务器可以自动和主服务器进行单向的数据同步,从而和主DNS服务器一样,也可以对外提供查询服务,但从服务器不提供数据更新服务。
配置要求:
1.应该为一台独立的名称服务器
2. 主服务器的区域解析库文件中必须有一条NS记录指向从服务器
3. 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
4. 主服务器得允许从服务器作区域传送
5. 主从服务器时间应该同步,可通过ntp进行
6. bind程序的版本应该保持一致;否则,应该从高,主低。
安装bind
yum install -y bind
修改配置文件
vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; }; #注释
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
// allow-query { localhost; };#注释
allow-transfer { none;}; #不允许其它主机进行区域传输
vim /etc/named.rfc1912.zones
zone "magedu.org" {
type slave;
masters { 10.0.0.8;};
file "slaves/magedu.org.salve";
};
重启服务
systemctl start named
查看区域数据库文件是否生成
ll /var/named/slaves/magedu.org.salve
-rw-r--r-- 1 named named 319 Nov 3 12:03 /var/named/slaves/magedu.org.salve
实现web服务
[root@Centos7 ~]# yum install -y httpd [root@Centos7 ~]#echo Welcome > /var/www/html/index.html [root@Centos7 ~]# systemctl start httpd.service
客户端配置
修改网卡指定的DNS服务器地址为10.0.0.8,10.0.0.18 [root@Centos6 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 name=eth0 HWADDR=00:0C:29:53:B2:90 TYPE=Ethernet UUID=cfe07653-f576-4b43-ad4a-ba0da0a225b5 onBOOT=yes NM_ConTROLLED=yes BOOTPROTO=static IPADDR=10.0.0.6 PREFIX=24 GATEWAY=10.0.0.2 DNS1=10.0.0.8 DNS2=10.0.0.18 重启网络 [root@Centos6 ~]# service network restart
验证
[root@Centos6 ~]# curl www.magedu.org Welcome 主DNS服务器停止服务 [root@Centos8 ~]# systemctl stop named.service [root@Centos6 ~]# curl www.magedu.org Welcome二、搭建并实现智能DNS。
利用view实现智能DNS
需要五台主机 DNS主服务器和web服务器1:10.0.0.8/24,172.16.0.8/16 本地web web服务器2:10.0.0.7/24 BeiJingweb web服务器3:172.16.0.7/16 ShangHaiweb DNS客户端1:10.0.0.6/24 DNS客户端2:172.16.0.6/162.1DNS主服务器配置
配置两个网卡,并设置IP,其中10.0.0.8作为DNS主服务器,172.16.0.7作为web服务器。
[root@Centos8 ~]# ip add 1: lo: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: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:65:4f:b8 brd ff:ff:ff:ff:ff:ff inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever 3: eth1: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:65:4f:c2 brd ff:ff:ff:ff:ff:ff inet 172.16.0.8/24 brd 172.16.0.255 scope global noprefixroute eth1 valid_lft forever preferred_lft forever
主DNS服务端配置文件实现 view
[root@Centos8 ~]# yum install -y bind
[root@Centos8 ~]# vim /etc/named.conf
acl beijingnet { #添加acl规则,定义10网络为北京网络)
10.0.0.0/24;
};
acl shanghainet { # 添加acl规则,定义172网络为上海网络)
172.16.0.0/16;
};
acl othernet { (本地网络)
any;
};
options {
// listen-on port 53 { 127.0.0.1; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
// allow-query { localhost; };
view beijingview { #通过view将定义好的acl规则与区域数据库文件做关联
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";
定义magedu.org 域各个网络中的数据库配置文件
[root@Centos8 ~]# cat /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.bj";
};
[root@Centos8 ~]# cat /etc/named.rfc1912.zones.sh
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.sh";
};
[root@Centos8 ~]# cat /etc/named.rfc1912.zones.other
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.other";
};
创建区域数据库文件
[root@Centos8 ~]# cat /var/named/magedu.org.zone.bj
$TTL 1D
@ IN SOA master admin.magedu.org. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 10.0.0.7
www CNAME websrv
[root@Centos8 ~]# cat /var/named/magedu.org.zone.sh
$TTL 1D
@ IN SOA master admin.magedu.org. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 172.16.0.7
www CNAME websrv
[root@Centos8 ~]# cat /var/named/magedu.org.zone.other
$TTL 1D
@ IN SOA master admin.magedu.org. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 127.0.0.1
www CNAME websrv
2.2 实现位于不同区域的三个WEB服务器
web服务器1(10.0.0.8)
yum install httpd echo welcome local > /var/www/html/index.html
web服务器2(10.0.0.7)
yum install httpd echo welcome to BeiJing > /var/www/html/index.html
web服务器3(172.16.0.7)
yum install httpd
echo welcome to Shanghai > /var/www/html/index.html
DNS客户端1
DNS客户端2
DNS客户端3
两块网卡DNS解析同一个地址必须
首先必须确保本机firewall已关闭
[root@Centos8 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
multiport扩展,以离散方式定义多端口匹配,最多指定15个端口,将其中telnet(21)、ssh(22)、ftp(23),web(80)端口添加为允许之后再将所有其他端口服务关闭,也可以采用白名单方式将服务端口添加到规则之中,不过在清空规则的时候可能造成一些通讯业务的中断,最好采黑名单。
[root@Centos8 ~]# iptables -I INPUT -p tcp -m multiport --dport 21,22,23,80 -j ACCEPT
[root@Centos8 ~]# iptables -A INPUT -j REJECT
[root@Centos8 ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
132 7736 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 21,22,23,80
0 0 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 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
四、NAT原理总结
在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。它是一个方便且得到了广泛应用的技术。当然,NAT也让主机之间的通信变得复杂,导致了通信效率的降低。
4.1基本网络地址转换(Basic NAT)这一种也可称作NAT或“静态NAT”,在RFC2663中提供了信息。它在技术上比较简单,仅支持地址转换,不支持端口映射。Basic NAT要求对每一个当前连接都要对应一个公网IP地址,因此要维护一个公网的地址池。宽带(broadband)路由器通常使用这种方式来允许一台指定的设备去管理所有的外部链接,甚至当路由器本身只有一个可用外部IP时也如此,这台路由器有时也被标记为DMZ主机。由于改变了IP源地址,在重新封装数据包时候必须重新计算校验和,网络层以上的只要涉及到IP地址的头部校验和都要重新计算。
Basic NAT要维护一个无端口号NAT表,结构如下
这种方式支持端口的映射,并允许多台主机共享一个公网IP地址。
支持端口转换的NAT又可以分为两类:源地址转换和目的地址转换。前一种情形下发起连接的计算机的IP地址将会被重写,使得内网主机发出的数据包能够到达外网主机。后一种情况下被连接计算机的IP地址将被重写,使得外网主机发出的数据包能够到达内网主机。实际上,以上两种方式通常会一起被使用以支持双向通信。
NAPT维护一个带有IP以及端口号的NAT表,结构如下。
对源地址作转换,在POSTROUTING链处作规则设置
模拟外网主机
[root@Centos6 ~]# ip add 1: lo:mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:53:b2:90 brd ff:ff:ff:ff:ff:ff inet 172.16.0.6/24 brd 172.16.0.255 scope global eth0 inet6 fe80::20c:29ff:fe53:b290/64 scope link valid_lft forever preferred_lft forever
防火墙配置
[root@Centos8 ~]# ip add 1: lo: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: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:65:4f:b8 brd ff:ff:ff:ff:ff:ff inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe65:4fb8/64 scope link valid_lft forever preferred_lft forever 3: eth1: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:65:4f:c2 brd ff:ff:ff:ff:ff:ff inet 172.16.0.8/24 brd 172.16.0.255 scope global noprefixroute eth1 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe65:4fc2/64 scope link valid_lft forever preferred_lft forever
必须启用防火墙的路由转发功能
[root@Centos8 ~]# sysctl -p net.ipv4.ip_forward = 1
防火墙规则添加
针对专线静态公共IP
[root@Centos8 ~]# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 172.16.0.8
#针对拨号网络和专线静态公共IP
[root@Centos8 ~]# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
[root@Centos8 ~]# iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1 76 SNAT all -- * * 10.0.0.0/24 0.0.0.0/0 to:176.16.0.8
0 0 MASQUERADE all -- * * 10.0.0.0/24 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
内网环境配置
[root@Centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 BOOTPROTO=static IPADDR=10.0.0.7 PREFIX=24 GATEWAY=10.0.0.8 #网关指向防火墙地址 DNS1=10.0.0.2 DNS2=180.76.76.76 onBOOT=yes
[root@Centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 BOOTPROTO=static IPADDR=10.0.0.17 PREFIX=24 GATEWAY=10.0.0.8 #网关指向防火墙地址 DNS1=10.0.0.2 DNS2=180.76.76.76 onBOOT=yes5.2 DNAT
只对目标地址作转换,在PREROUTING链进行设置。
将上个实验中防火墙的规则全部清空
[root@Centos8 ~]# iptables -F
[root@Centos8 ~]# iptables -t nat -A PREROUTING -d 172.16.0.8 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.17:80 #当外网机器访问内网防火墙的外网地址172.16.0.8时,通过DNAT技术将访问请求转发到内网10.0.0.17web服务器的80端口,请求报文中目标地址做了转换。
[root@Centos8 ~]# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
2 120 DNAT tcp -- * * 0.0.0.0/0 172.16.0.8 tcp dpt:80 to:10.0.0.17:80
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (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
5.3 规则保存
持久保存规则必须存放至文件之中
[root@Centos8 ~]# mkdir /data/backup;touch /data/backup/iptables [root@Centos8 ~]# iptables-save > /data/backup/iptables [root@Centos8 ~]# reboot
未加载配置文件
[root@Centos6 ~]# curl 172.16.0.8 curl: (7) couldn't connect to host
加载配置文件
[root@Centos8 ~]# iptables-restore < /data/backup/iptables [root@Centos6 ~]# curl 172.16.0.8 Welcome



