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"