DNS与iptable

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

1、DNS服务器原理

 第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器;

 第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回;

 第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域) 的主域名服务器的地址;

 第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址;

 第五步:重复第四步,直到找到正确的纪录;

 第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户 。

2、DNS服务器的主从搭建

 二台主机,一台当主服务器(192.168.27.7/24),一台当从服务器(192.168.27.17/24),配置 abc.com 域的主从架构

 (1) 在两台主机上分别安装BIND服务

[root@master ~]#yuminstall-y bind  #主服务器

[root@slave ~]#yuminstall-y bind    #从服务器

 (2) 修改主服务配置文件 /etc/named.conf

options {//      listen-on port 53 { 127.0.0.1; };    #注释此项listen-on-v6 port53{ ::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";

        recursing-file"/var/named/data/named.recursing";

        secroots-file"/var/named/data/named.secroots";//      allow-query    { localhost; };    #注释此项allow-transfer {192.168.214.17;};    #添加此项

...以下省略

 (3) 新建域解析文件 /var/named/abc.com

[root@master ~]# cd /var/named/[root@master named]# vim abc.com

$TTL 1D

@ IN SOA NS1 admin (1 1D 10M 1W 1D)

        NS NS1

NS1    A      192.168.27.7www    A      192.168.27.7[root@master named]# chown root:named abc.com

[root@master named]# chmod640abc.com

 (4) 在主服务器上域文件 /etc/named.rfc1912.zones 中添加"abc.com"域

[root@master named]# vim /etc/named.rfc1912.zones

#添加以下内容

zone "abc.com" IN {

        type master;

        file"abc.com";};

 (5) 配置从服务器主配置文件 /etc/named.conf,并在从服务器的域文件 /etc/named.rfc1912.zones 中添加域信息

[root@slave ~]# vim /etc/named.conf

options {//      listen-on port 53 { 127.0.0.1; };    #注释此项listen-on-v6 port53{ ::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";

        recursing-file"/var/named/data/named.recursing";

        secroots-file"/var/named/data/named.secroots";//      allow-query    { localhost; };    #注释此项allow-transfer {none;};    #添加此项

...省略以下

#添加域信息如下

[root@slave ~]# vim /etc/named.rfc1912.zones

zone "abc.com" IN {

        type slave;

        masters {192.168.27.7;};

        file"slaves/abc.com.slave";

};

 (6) 启动主从服务器的DNS服务,并测试

[root@master ~]# systemctl start named

[root@slave ~]# systemctl start named

[root@master ~]# dig www.abc.com @192.168.27.7#主服务器可以解析

; <<>> DiG9.9.4-RedHat-9.9.4-72.el7 <<>> www.abc.com @192.168.27.7;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR,id:18897;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY:1, ADDITIONAL:2;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp:4096;; QUESTION SECTION:

;www.abc.com.            IN    A

;; ANSWER SECTION:

www.abc.com.        86400IN    A192.168.27.7;; AUTHORITY SECTION:

abc.com.        86400    IN    NS    NS1.abc.com.

;; ADDITIONAL SECTION:

NS1.abc.com.        86400IN    A192.168.27.7;; Query time:2 msec

;; SERVER: 192.168.27.7#53(192.168.27.7)

;; WHEN: Tue Feb 0407:04:59CST2020;; MSG SIZE  rcvd: 90[root@master named]# dig www.abc.com @192.168.27.17#从服务器也可以解析

; <<>> DiG9.9.4-RedHat-9.9.4-72.el7 <<>> www.abc.com @192.168.27.17;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR,id:55308;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY:1, ADDITIONAL:2;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp:4096;; QUESTION SECTION:

;www.abc.com.            IN    A

;; ANSWER SECTION:

www.abc.com.        86400IN    A192.168.27.7;; AUTHORITY SECTION:

abc.com.        86400    IN    NS    NS1.abc.com.

;; ADDITIONAL SECTION:

NS1.abc.com.        86400IN    A192.168.27.7;; Query time:2 msec

;; SERVER: 192.168.27.17#53(192.168.27.17)

;; WHEN: Tue Feb 0407:05:23CST2020;; MSG SIZE  rcvd: 90[root@slave ~]# ll /var/named/slaves/    #从服务器也自动生成了域解析文件

total 4-rw-r--r--1named named225Feb407:03abc.com.slave

二、搭建并实现智能DNS

 二台主机,一台作为智能DNS服务器,有两个网段,NAT(192.168.27.7/24),桥接(192.168.0.104/24),一台客户端,NAT(192.168.27.17/24),桥接(192.168.0.105/24),域为 def.com ,假设通过192.168.27.0/24网段访问DNS服务器,则智能解析到 1.1.1.1,通过192.168.0.0/24网段访问DNS服务器,则智能解析到 2.2.2.2,其它网段的解析到 3.3.3.3

 (1)在作为DNS服务器上安装BIND服务

[root@centos7 ~]#yuminstall-y bind

 (2)在DNS服务器上主配置文件/etc/named.conf中配置 acl 和 view

[root@centos7 ~]# vim /etc/named.conf

acl net27 {   

        192.168.27.0/24;

};

acl net0 {

        192.168.0.0/24;

};

acl othernet {

        any;

};

options {//      listen-on port 53 { 127.0.0.1; };    #注释此项listen-on-v6 port53{ ::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";

        recursing-file"/var/named/data/named.recursing";

        secroots-file"/var/named/data/named.secroots";//      allow-query    { localhost; };    #注释此项...中间省略

logging {

        channel default_debug {

                file"data/named.run";

                severity dynamic;

        };

};

#此处添加view,并将 zone "."IN 这段移入/etc/named.rfc1912.zones 文件中

view view_net27{

        match-clients { net27;};

        include "/etc/named.rfc1912.zones.net27";

};

view view_net0{

        match-clients { net0;};

        include "/etc/named.rfc1912.zones.net0";

};

view view_other{

        match-clients { othernet;};

        include "/etc/named.rfc1912.zones";

};

include "/etc/named.root.key";

 (3) 创建以上view中的include的配置域文件

[root@centos7 ~]# vim /etc/named.rfc1912.zones.net27

zone "def.com" IN {

        type master;

        file"def.com.zone.net27";

};

[root@centos7 ~]# vim /etc/named.rfc1912.zones.net0

zone "def.com" IN {

        type master;

        file"def.com.zone.net0";

};

[root@centos7 ~]# vim /etc/named.rfc1912.zones

zone "def.com" IN {

        type master;

        file"def.com.zone.othernet";

};

#以下为/etc/named.conf 移入的段

zone "." IN {

        type hint;

        file"named.ca";

};

...以下省略

(4) 创建上一步中的解析文件

[root@centos7 ~]# vim /var/named/def.com.zone.net27

$TTL 1D

@ IN SOA ns1 admin (1 1H 1H 1D 3H)

        NS ns1

ns1    A      192.168.27.7www    A      1.1.1.1[root@centos7 ~]# vim /var/named/def.com.zone.net0

$TTL 1D

@ IN SOA ns1 admin (1 1H 1H 3D 3H)

        NS ns1

ns1    A      192.168.27.7www    A      2.2.2.2[root@centos7 ~]# vim /var/named/def.com.zone.othernet

$TTL 1D

@ IN SOA ns1 admin (1 1H 1H 1D 3H)

        NS ns1

ns1    A      192.168.27.7www    A      3.3.3.3

 (5) 配置解析文件的相关权限,并启动DNS服务

[root@centos7 ~]# cd /var/named/[root@centos7 named]# chown:named def.com.zone.*[root@centos7 named]# chmod640def.com.zone.*[root@centos7 named]# ll def.com.zone.*-rw-r-----1root named84Feb418:07 def.com.zone.net0-rw-r-----1root named84Feb418:06 def.com.zone.net27-rw-r-----1root named84Feb418:09 def.com.zone.othernet

[root@centos7 named]# systemctl start named

(6) 在客户端上测试

[root@centos7-17~]# dig www.def.com @192.168.27.7#测试通过192.168.27.0/24网段访问,可以看到解析到1.1.1.1了;<<>> DiG9.9.4-RedHat-9.9.4-72.el7 <<>> www.def.com @192.168.27.7;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR,id:40379;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY:1, ADDITIONAL:2;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp:4096;; QUESTION SECTION:

;www.def.com.            IN    A

;; ANSWER SECTION:

www.def.com.        86400IN    A1.1.1.1;; AUTHORITY SECTION:

def.com.        86400    IN    NS    ns1.def.com.

;; ADDITIONAL SECTION:

ns1.def.com.        86400IN    A192.168.27.7;; Query time:2 msec

;; SERVER: 192.168.27.7#53(192.168.27.7)

;; WHEN: Tue Feb 0418:15:32CST2020;; MSG SIZE  rcvd: 90[root@centos7-17~]# dig www.def.com @192.168.0.104#测试通过192.168.0.0/24访问,解析到2.2.2.2了;<<>> DiG9.9.4-RedHat-9.9.4-72.el7 <<>> www.def.com @192.168.0.104;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR,id:1252;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY:1, ADDITIONAL:2;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp:4096;; QUESTION SECTION:

;www.def.com.            IN    A

;; ANSWER SECTION:

www.def.com.        86400IN    A2.2.2.2;; AUTHORITY SECTION:

def.com.        86400    IN    NS    ns1.def.com.

;; ADDITIONAL SECTION:

ns1.def.com.        86400IN    A192.168.27.7;; Query time:1 msec

;; SERVER: 192.168.0.104#53(192.168.0.104)

;; WHEN: Tue Feb 0418:16:04CST2020;; MSG SIZE  rcvd: 90[root@centos7 named]# dig www.def.com @127.0.0.1#在DNS服务器上测试不通以下两个网段访问,解析到了3.3.3.3; <<>> DiG9.9.4-RedHat-9.9.4-72.el7 <<>> www.def.com @127.0.0.1;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR,id:1314;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY:1, ADDITIONAL:2;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp:4096;; QUESTION SECTION:

;www.def.com.            IN    A

;; ANSWER SECTION:

www.def.com.        86400IN    A3.3.3.3;; AUTHORITY SECTION:

def.com.        86400    IN    NS    ns1.def.com.

;; ADDITIONAL SECTION:

ns1.def.com.        86400IN    A192.168.27.7;; Query time:1 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Tue Feb 0418:17:28CST2020;; MSG SIZE  rcvd: 90



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

iptables -A INPUT -p tcp -s 0/0 --dport 23 -j ACCEPT

iptables -A INPUT -p tcp -s 0/0 --dport 20 -j ACCEPT

iptables -A INPUT -p tcp -s 0/0 --dport 21 -j ACCEPT

iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT

iptables -A INPUT -p tcp -s 0/0 --dport 443 -j ACCEPT

iptables -A OUTPUT -p tcp -s 0/0 --dport 23 -j ACCEPT

iptables -A OUTPUT -p tcp -s 0/0 --dport 20 -j ACCEPT

iptables -A OUTPUT -p tcp -s 0/0 --dport 21 -j ACCEPT

iptables -A OUTPUT -p tcp -s 0/0 --dport 80 -j ACCEPT

iptables -A OUTPUT -p tcp -s 0/0 --dport 443 -j ACCEPT

iptables -P INPUT DROP

iptables -P OUTPUT DROP

service iptables save

service iptables restart

iptables多端口允许

iptables -I INPUT -s 10.10.10.1/32 -p tcp -m tcp -m multiport --dports 20,21,2000:2500 -j ACCEPT


四、NAT原理总结

4.1 NAT的产生

由于网络的飞速发展和网络应用的极速增多,致使IPv4可用地址空间逐渐枯竭。尽管IPv6可以在根本上解决地址枯竭问题,但IPv4发展到IPv6还需要一个过渡,而这便产生了NAT。

4.2 NAT的作用

IP地址分为公网IP与私网IP。一般情况下,在互联网中,公网IP可直接访问,私网IP无法直接访问。而NAT则是将私网IP地址转换为公网IP地址(将IP报文头部的私网IP地址改为可以提供访问的公网IP地址),从而实现用户上网功能或服务器在互联网上提供服务。NAT还可以使得一个公网IP代表多个不同的内网IP,这样便节省了IP地址资源。

4.3 NAT的类型与分类

NAT分为静态转换、动态转换、端口转换

静态转换:私有地址与公有地址进行一对一的映射。这种一对一映射无法缓解可用公有地址短缺的问题。

动态转换:私有地址与公有地址进行一对多的映射。首先建立公有地址地址池,私有地址向外通信时,会从公有地址地址池中选择非在用的公有地址进行映射,当通信结束时,释放映射关系,公有地址重新恢复到地址池中待用。弊端:若私有地址向外通信,而公有地址地址池中无可用公有地址时,会等待公有地址释放后在进行通信。

端口转换:在大多数网络中,一般都使用的是IP上的某个端口(如80、443、3389等),所以不需要进行全地址映射,只需要私有地址端口映射到公有地址端口上,直接访问公有地址加端口号的形式便可以。这样可以使得一个公有地址可以对应多个私有地址,从而大大缓解了公有地址紧缺的问题。

Easy IP:为小型网络,一般为家庭、小型网吧、办公室等内部主机不多的地方。通过拨号方式获取一个临时公网IP地址进行外网的访问。

4.4 扩展:SNAT与DNAT区别

SNAT是私网访问外网时,报文中源IP地址(私网IP地址)转换为公网IP地址过程。此转换可以使用静态、动态等转换方式,且内部的多台主机共用同一公网IP地址进行外网访问。

DNAT是外网访问私网时,报文中目的IP地址(公网IP地址)转换为私网IP地址过程。此转换过程可以使用静态、动态、端口等转换方式。

4.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接收到数据报文,网站就被打开了。


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

实现SNAT和DNAT都需要开启内核数据转发功能

[root@localhost ~]# vim /etc/sysctl.conf# 把下列选项改正1net.ipv4.ip_forward=0...net.ipv4.ip_forward=1

5.1 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

范例:

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.122.103

5.2 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 --todestination InterSeverIP[:PORT]

范例:

[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.122.103 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.6:80

5.3 iptables规则持久保存:

CentOS 7、8

iptables-save>/PATH/TO/SOME_RULES_FILE

CentOS 6

# 将规则覆盖保存至/etc/sysconfig/iptables文件中service iptables save

5.4 加载规则

5.4.1 CentOS 7、8 重新载入预存规则文件中规则:

iptables-restore

iptables-restore选项

-n, --noflush:不清除原有规则

-t, --test:仅分析生成规则集,但不提交

5.4.2 CentOS 6:

service iptables  restart      #会自动从/etc/sysconfig/iptables 重新载入规则

5.5 开机自动重载规则

5.5.1 用脚本保存各iptables命令;让此脚本开机后自动运行

/etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE

用规则文件保存各规则,开机时自动载入此规则文件中的规则

在/etc/rc.d/rc.local文件添加

iptables-restore

5.5.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

你可能感兴趣的:(DNS与iptable)