DNSiptables和NAT

笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述DNSiptables和NAT相关的知识,希望能为你提供帮助。
1.简述DNS服务器原理,并搭建主-辅服务器
(1)DNS服务器原理

这里假设本地某主机去请求www.sky.com域名时的流程:

a.本地主机查询本地dns缓存及本地hosts(/etc/hosts)文件中是否有www.sky.com域名的记录,如果有直接使用,如果没有则会向本地自定义的dns服务器去请求(/etc/resolv.conf);

b.dns服务器收到主机请求则查询dns服务器本地是否有www.sky.com域名的解析记录,如果有直接返回给客户端,如果没有则dns服务器直接向根服务器(.)请求查询;

c.根服务器(.)收到dns服务器的查询请求发现是查询.com域的信息,然后根服务器则返回.com域的服务器ip给到dns服务器;

d.dns服务器收到.com的服务器IP,则再次向.com的服务器请求sky.com的域名服务器ip;

e.dns服务器收到.com返回sky.com域名服务器IP则直接再次请求sky.com域名服务器,查询www的解析记录;

f.dns服务器查询到www.sky.com的解析记录后则直接返回给客户端并自己缓存此记录;

g.客户端主机则拿到www.sky.com的ip就直接访问到目标主机了,并缓存了此解析记录;(b-g阶段是一次递归查询)
(2)搭建主-辅服务器
主用DNS服务器主要编辑以下几个文件:
a.编辑/etc/named.conf,启用本机指定网口监听53端口号、指定网口接收DNS查询请求,并允许接收指定备用DNS的区域传送;
b.编辑/etc/named.rfc1912.zones文件,新增指定区域参数;
c.新建zone文件,/var/named/sky.com.zone,添加SOA,NS,A,MX等记录;
d.使用named-checkconf、named-zone检查服务端配置、区域文件配置。
e.使用systemctl start named启动DNS服务。
主用DNS配置:

yum -y install bind

vi /etc/named.conf

//       listen-on port 53127.0.0.1; ;

//       allow-query     localhost; ;

    allow-transfer     192.168.0.103; ;

vi /etc/named.rfc1912.zones

zone "sky.com"

    type master;

    file "sankeya.vip.zone";

;

vi /var/named/sky.com.zone

$TTL 1D

@     IN     SOA     ns1 admin     (1 1h 10m 1D 1D)

        NS     ns1

        NS     ns2

ns1         A     192.168.0.102

ns2         A     192.168.0.103

www         A     192.168.0.104

chgrp named /var/named/sky.com.zone

chmod 640 /var/named/sky.com.zone

named-checkconf /etc/named.conf

【DNSiptables和NAT】named-checkzone sky.com sky.com.zone


systemctl start named
systemctl enable named


备用DNS主要编辑以下几个文件:

a.编辑/etc/named.conf,启用本机指定网口监听53端口号、指定网口接收DNS查询请求,不允许区域传送;

b.编辑/etc/named.rfc1912.zones文件,新增指定区域参数(type类型slave,masters指定主DNS服务器,zone文件是放在/var/named/slaves/下且是自动生成);

c.使用named-checkconf检查服务端配置。
备用DNS配置:

yum -y install bind



vi /etc/named.conf

//       listen-on port 53127.0.0.1; ;

//       allow-query     localhost; ;

    allow-transfer     none; ;



vi /etc/named.rfc1912.zones

zone "sky.com"

    type slave;

    masters 192.168.0.102; ;

    file "slaves/sky.com.zone.slave";

;



named-checkconf /etc/named.conf



systemctl start named

systemctl enable named


测试备用DNS同步效果及客户端解析结果如下:

新增1条A记录,并且将SOA内的序列号由2改成3.并使用rndc reload 重载配置文件。



vi /var/named/sky.com.zone



$TTL 1D

@       IN       SOA     ns1     admin   (3 1h 10m 1D 1D)

                NS       ns1

                NS       ns2

ns1     IN       A       192.168.0.102

ns2     IN       A       192.168.0.103

www     IN       A       192.168.0.104

testsync         IN       A       1.1.1.1



[root@dns-master ~]# rndc reload

server reload successful



在DNS客户端侧使用dig命令测试解析效果,分别指定主备DNS。



指定主用DNS的测试:

dig testsync.sky.com @192.168.0.102



指定备用DNS的测试:

dig testsync.sky.com @192.168.0.103


2.搭建并实现智能DNS
(1)定义ACL列表,定义view功能模块
vi /etc/named.conf

//ACL定义归属地IP列表

acl shanghainet

        192.168.0.101;

;

acl beijingnet

        192.168.0.250;

;

acl othernet

        any;

;

//options模块中注释掉监听和查询的限制,这里还定义成主DNS服务器

options

//       listen-on port 53127.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";

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

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

//       allow-query     localhost; ;

        allow-transfer   192.168.0.103; ;

//定义view模块,将此文件中根区域的部分删除,将在include里中指定的文件里再补充。

view shanghaiview

        match-clientsshanghainet; ;

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

;

view beijingview

        match-clientsbeijingnet; ;

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

;

view otherview

        match-clientsothernet; ;

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

;
(2)定义zone文件
//参考named.rfc1912.zones文件,增加根区域配置和对应归属区域配置

cp   -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.sh

cp   -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj

cp   -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.other

//编辑/etc/named.rfc1912.zones.sh如下:

vi /etc/named.rfc1912.zones.sh

zone "." IN

    type hint;

    file "named.ca";

;



zone "sky.com" IN

    type master;

    file "sky.com.zone.sh";

;

//编辑/etc/named.rfc1912.zones.bj如下:

vi /etc/named.rfc1912.zones.bj

zone "." IN

    type hint;

    file "named.ca";

;



zone "sky.com" IN

    type master;

    file "sky.com.zone.bj";

;

//编辑/etc/named.rfc1912.zones.other如下:

vi /etc/named.rfc1912.zones.other

zone "." IN

    type hint;

    file "named.ca";

;



zone "sky.com" IN

    type master;

    file "sky.com.zone.other";

;
(3)定义解析数据库
编辑三个区域数据库文件

vi /var/named/sky.com.zone.sh

$TTL 1D

@     IN     SOA     ns1     admin     (7 1h 10m 1D 1D)

        NS     ns1

        NS     ns2

sh     IN     NS     ns3

ns1     IN     A     192.168.0.102

ns2     IN     A     192.168.0.103

ns3     IN     A     192.168.0.104

websrv     IN     A     192.168.0.105

www     IN     CNAME     websrv



vi /var/named/sky.com.zone.bj

$TTL 1D

@     IN     SOA     ns1     admin     (7 1h 10m 1D 1D)

        NS     ns1

        NS     ns2

sh     IN     NS     ns3

ns1     IN     A     192.168.0.102

ns2     IN     A     192.168.0.103

ns3     IN     A     192.168.0.104

websrv     IN     A     192.168.0.106

www     In     CNAME     websrv



vi /var/named/sky.com.zone.qita  
$TTL 1D

@     IN     SOA     ns1     admin     (7 1h 10m 1D 1D)

        NS     ns1

        NS     ns2

sh     IN     NS     ns3

ns1     IN     A     192.168.0.102

ns2     IN     A     192.168.0.103

ns3     IN     A     192.168.0.104

websrv     IN     A     6.6.6.6

www     IN     CNAME     websrv
(4)启动服务
named-checkconf   named-checkzone /etc/named.rfc1912.zones.sh /var/named/sankeya.vip.zone.sh

named-checkzone /etc/named.rfc1912.zones.bj /var/named/sankeya.vip.zone.bj

named-checkzone /etc/named.rfc1912.zones.other /var/named/sankeya.vip.zone.other  
systemctl start named

ss -ntl
(5)验证解析效果
从一台客户机验证

dig www.sky.com @192.168.0.102
3.使用iptable实现: 放行ssh,telnet, ftp, web服务80端口,其他端口服务全部拒绝

iptables -I INPUT -p tcp -m multiport --dports 21,23,80,139,445 -j ACCEPT
iptables -A INPUT -j REJECT
4.NAT原理总结
?NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术,如下图所示。因此我们可以认为,NAT在一定程度上,能够有效的解决公网地址不足的问题。?????
简单地说,NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关(可以理解为出口,打个比方就像院子的门一样)处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共 IP地址紧缺的问题。通过这种方法,可以只申请一个合法IP地址,就把整个局域网中的计算机接入Internet中。这时,NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的,而内部网计算机用户通常不会意识到NAT的存在。如下图所示。这里提到的内部地址,是指在内部网络中分配给节点的私有IP地址,这个地址只能在内部网络中使用,不能被路由转发。
????
NAT 功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。比如Cisco路由器中已经加入这一功能,网络管理员只需在路由器的ios中设置NAT功能,就可以实现对内部网络的屏蔽。再比如防火墙将WEB Server的内部地址192.168.1.1映射为外部地址202.96.23.11,外部访问202.96.23.11地址实际上就是访问访问 192.168.1.1。



5.iptables实现SNAT和DNAT,并对规则持久保存
(1)实现SNAT和DNAT都需要开启内核数据转发功能
?vi /etc/sysctl.conf  ?    net.ipv4.ip_forward=1
?
SNAT格式:
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP
DNAT 格式:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --todestination InterSeverIP[:PORT]
?
(2)规则永久保存
iptables-save > /PATH/TO/SOME_RULES_FILE


    推荐阅读