SNATDNAT简介

SNAT:局域网共享一个公网IP接入lnternel,好处以下linux

一、保护内网用户安全,由于公网地址总有一些人恶意扫描,而内网地址在公网没有路由因此没法被扫描,能被扫描的只有防火墙这一台,这样就减小了被***的可能。web

二、Ipv4地址匮乏,不少公司只有一个ipv4地址,可是却有几百个用户须要上网,这个时候就须要使用SNAT。vim

三、省钱,公网地址付费,使用SNAT只须要一个公网ip就能够知足几百人同时上网。安全

DNAT:向internel发布内网服务器bash

在内网中有服务器,若是想让公网用户访问有有两种方法。服务器

  1. 配置双网卡,一网卡对内,一网卡对外;通常是高访问量的web服务器,为了不占用网关的流量才这样作,使用不是很普遍。网络

  2. 内网web服务器,或是ftp服务器,为了用户在公网也能够访问,有不想买公网ip地址,采用DNAT方案。ssh

SNAT实现

环境拓扑图:curl

 

环境说明:

 

系统环境

主机名

地址配置

功能描述

WEB服务器

Centos6.6 64位

WEB

公网:eth0 1.1.1.1

提供web页面,供用户访问

iptables防火墙

Centos6.6 64位

iptables

内网:eth0 172.16.4.1

外网:eth1 1.1.1.2

当有用户访问公网时,修改用户请求数据报的源地址为防火墙公网地址,实现SNAT功能。

内网用户

Centos6.6 64位

LAN

内网:172.16.4.100

网关:172.16.4.1

测试客户端,用来访问外网web服务器

地址转换过程

实验过程

前提条件:

一、配置好ip地址,内网用户须要配置网关指向防火墙,保证防火墙能够ping通内网和外网。

二、配置iptables开启路由转发功能,外网配置好web,保证内网能够访问。

开启路由转发功能,实现内外网互相访问

[root@iptables ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@iptables ~]# sysctl -p
net.ipv4.ip_forward = 1

设置完成以后内网主机就能够ping通外网WEB服务器了

[root@LAN ~]# ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=63 time=1.77ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=63 time=0.837ms

公网web服务器配置测试页并启动服务

[root@WEB ~]# echo "internet WEB" >/var/www/html/index.html
[root@WEB ~]# service httpd start

内网访问测试能够正常访问

[root@LAN ~]# curl http://1.1.1.1
internet WEB

可是:从web服务器的日志分析,访问的地址是内网地址,因为是测试环境配置了路由,因此能够访问;若是是生存环境,因为web服务器没有内网的路由,因此内网客户端的请求到达web服务器后,没法回应。

[root@WEB ~]# tail -1 /var/log/httpd/access_log
172.16.4.100 - - [23/Apr/2015:10:37:53 +0800]"GET / HTTP/1.1" 200 13 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu)libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

IPTABLES配置SNAT

配置SNAT将172.16.0.0网络全部主机只要经过防火墙上网就作源地址修改,将源地址修改成1.1.1.2。

iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -oeth1 -j SNAT --to-source 1.1.1.2

内网访问公网web服务器

[root@LAN ~]# curl http://1.1.1.1
internet WEB

查看公网服务器日志显示是防火墙外网ip地址访问的,说明SNAT配置成功。

[root@WEB ~]# tail -1 /var/log/httpd/access_log
1.1.1.2 - - [23/Apr/2015:10:42:33 +0800] "GET/ HTTP/1.1" 200 13 "lib/1.2.3 libidn/1.18 libssh2/1.4.2"

 

设置完成SNAT以后最好能够设置一下IPTABLES规则保证防火墙安全。

IPTABLES主机防火墙规则设置

iptables -A INPUT -s 172.16.4.10 -p tcp --dport 22-j ACCEPT
iptables -A OUTPUT -m state --stateESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

IPTABLES网络型防火墙转发规则设置;若是是生产环境,能够不用配置,由于公网地址没法访问私网地址,这里配置主要是为了更接近生产环境

iptables -A FORWARD -d172.16.0.0/16  -m state --stateESTABLISHED,RELATED -j ACCEPT
iptables -AFORWARD -s 172.16.0.0/16 -j ACCEPT
iptables -PFORWARD DROP

配置完成以后内网能够访问外网,可是外网已经没法访问内网了

 

动态地址上网说明:

在某些状况下,网关的外网ip地址可能并不固定,如ADSL宽带接入时。为了解决这种问题,IPTABLES提供了一个名为MASQUERADE的数据报控制类型,MASQUERAD一样用来修改源ip地址,只不过他可以自动获取外网ip地址。

iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -oppp0 -j MASQUERADE

DNAT实现

环境拓扑图:

 

环境说明:

 

系统环境

主机名

地址配置

功能描述

WEB服务器

Centos6.6 64位

WEB

内网:eth0:172.16.4.100

网关:172.16.4.1

提供web页面供用户访问

iptables防火墙

Centos6.6 64位

iptables

内网:eth0 172.16.4.1

外网:eth1 1.1.1.2

当用户请求公网地址的80端口时将请求转发给,内网服务器,实现DNAT功能

外网用户

Centos6.6 64位

WAN

外网:eth0:1.1.1.1

测试客户端,用来访问内网服务器

地址转换过程

实现过程

前提条件:

清除全部SNAT的配置,IP地址等相关信息不变,保证内网和外网能够ping通。

配置过程:

配置内网web页面,并启动httpd服务

[root@WEB ~]# echo "LAN WEB" >/var/www/html/index.html
[root@WEB ~]# service httpd start

外网访问内网web服务器

[root@WAN ~]# curl http://172.16.4.100
LAN WEB

防火墙配置DNAT

iptables -t nat -A PREROUTING -d 1.1.1.2 -p tcp--dport 80 -j DNAT --to-destination 172.16.4.100

外网访问IPTABLES防火墙的公网地址,就能够打开网页了

[root@WAN ~]# curl http://1.1.1.2
LAN WEB

可是记录的日志是外网用户的地址

[root@LAN ~]# tail -1 /var/log/httpd/access_log
1.1.1.1 - - [24/Apr/2015:03:38:36 +0800] "GET/ HTTP/1.1" 200 8 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu)libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"