一、功能描述

a)DNS server和WEB server使用内网地址,但允许外网通过防火墙的外网地址访问;(DNAT)

b)DNS server对WEB server解析时,内网用户指向内网地址,外网用户指向防火墙外网地址。

c)尽可能多的安全限制策略,但不影响正常访问。

iptables 实现 ip 数据转发 iptables转发dns_iptables 实现 ip 数据转发

二、规划

1、实现

DNAT实现外网对内网服务器资源的访问

SNAT实现内网对外网资源的访问

view实现DNS分割

2、规划

内网为172.16.0.0/16 网关地址172.16.251.254

:172.16.251.219/16域:sunlinux.com.                                        

:172.16.251.218/16FQDN:www.sunlinux.com

防火墙地址

内网地址:172.16.251.254/16

外网地址:192.168.0.200/24

外网测试机地址(开启Web服务):

IP:192.168.0.201/24

网关:192.168.0.200/24

DNS:192.168.0.200/24

三、实现

配置DNS服务

#vim /etc/named.conf
利用ACL分割内外网
acl inter{ 172.16.0.0/16; };        #内网地址
acl outer{ ! 172.16.0.0/16; any; };  #非内网地址,或者任意地址,这里也可以直接写成任意地址


利用view分割DNS

view inter
inter; };
        zone "." IN {
        type hint;
        file "named.ca";
        };                                                     
        zone "sunlinux.com." IN {
        type master;
int";
        };
};

view outer
outer; };
        zone "." IN {
        type hint;
        file "named.ca";
        };
        zone "sunlinux.com." IN {
        type master;
out";
        };
};

#注意事项#

view的优先级自上到下,若上面匹配到之后,后面的将不再进行匹配。

编辑named数据文件

对应内网

vim /etc/named/sunlinux.com.int
$TTL 600
@   IN  SOA    dns.sunlinux.com.ad.sunlinux.com. (
                        2014032812
                        2H
                        10M
                        2D
                        1D
                        )
        IN     NS      dns.sunlinux.com.
dns     IN     A       172.16.251.219        # 这是个内网地址
www     IN      A      172.16.251.218#指向内网地址

对应外网

vim /etc/named/sunlinux.com.out
$TTL 600
@   IN  SOA    dns.sunlinux.com.ad.sunlinux.com. (
                        2014032812
                        2H
                        10M
                        2D
                        1D
                        )
        IN     NS      dns.sunlinux.com.
dns     IN     A       192.168.0.200   # 这里不能用内网地址(注1)
www    IN      A      192.168.0.200 #防火墙外网地址

检查语法并启动

         

#service named configtest 
                   #service named start


配置内网WEB服务器(主要设置测试页面)

vim/var/www/cgi-bin/hostip.sh     (cgi机制)
#!/bin/bash
#
cat << EOF
Content-Type:text/html

`ifconfig`
EOF
chmod +x/var/www/cgi-bin/hostip.sh

配置防火墙iptables

打开网络间转发功能并使其生效

# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1   # 这项改成1 保
# sysctl -p
编写防火墙规则
         DNAT
#iptables -t nat -A PREROUTING -d 192.168.0.200-p tcp --dport 80 -j DNAT --to-destination 172.16.251.218:80  
#iptables -t nat -A PREROUTING -d192.168.0.200 -p udp --dport 53 -j DNAT --to-destination 172.16.251.219:53
#iptables -t nat -A PREROUTING -d192.168.0.200 -p tcp --dport 53 -j DNAT --to-destination 172.16.251.219:53
         SNAT
# iptables -t nat -A POSTROUTING -s 172.16.0.0/16-j SNAT --to-source 192.16.0.200
启动并查看
         #service iptables start
         #iptables -t nat -L -n -v

iptables 实现 ip 数据转发 iptables转发dns_外网_02

四、启动测试

在外网主机上测试

        DNS测试

iptables 实现 ip 数据转发 iptables转发dns_外网_03

                     WEB测试

iptables 实现 ip 数据转发 iptables转发dns_外网_04

在内网主机上测试

                     DNS测试

iptables 实现 ip 数据转发 iptables转发dns_iptables 实现 ip 数据转发_05

外网访问能力查看

iptables 实现 ip 数据转发 iptables转发dns_iptables 实现 ip 数据转发_06

iptables 实现 ip 数据转发 iptables转发dns_内网_07

注1

若使用内网真实地址:在外网做测试时会显示DNS的服务器地址是个内网地址如图:

iptables 实现 ip 数据转发 iptables转发dns_DNS_08

这当然不是我们想要的,对于外网来说,解析到的东西都应该指向外网。所以dns对应项改成防火墙地址。

这样能够实现内网DNS server对外网的伪装。



转载于:https://blog.51cto.com/suninger/1386713