IPtables之四:NAT原理和配置

 

NAT通常狀況下分爲SNAT,DNAT和PNATweb

此篇主要講述的是使用iptables配置NAT,因此這3種NAT的區別和應用場景就簡單的說明一下ubuntu

 

SNAT:源地址轉換後端

目標地址不變,從新改寫源地址,並在本機創建NAT表項,當數據返回時,根據NAT表將目的地址數據改寫爲數據發送出去時候的源地址,併發送給主機安全

目前大多都是解決內網用戶用同一個公網地址上網的狀況服務器

DNAT:目標地址轉換網絡

和SNAT相反,源地址不變,從新修改目標地址,在本機創建NAT表項,當數據返回時,根據NAT表將源地址修改成數據發送過來時的目標地址,併發給遠程主機併發

在DNAT的基礎上,能夠根據請求數據包的端口作PNAT(端口轉換,也稱爲端口映射),能夠更句請求數據包不一樣的端口改寫不一樣的目標地址,從而發送給不一樣的主機tcp

這在用一個公網地址作不一樣服務時用的比較多,並且相對來講,用NAT的方式能夠隱藏後端服務器的真實地址,更加的安全ide

 

在使用iptables實現nat以前,再來回頭說說iptables的基礎原理post

wps_clip_p_w_picpath-8909

在這個模型中,完成nat的實現,數據要通過prerouting—forword--postrouting這3個鏈

 

分析SNAT的數據流向過程

首先進入prerouting,發現不是本網段的地址,然後開始查找路由表(查找路由的過程在prerouting和forword之間),因而通過forword鏈進行轉發,在經過postrouting時進行NAT轉換。

在這個流程中,NAT轉換的步驟在postrouting鏈上實現,之因此再也不prerouting上作nat是由於數據包在進來以前,還不知道是本網段地址仍是外網地址

 

再分析DNAT的數據流向過程

在DNAT中,NAT要在prerouting鏈上作。以前提到過,在數據進入主機後,路由選擇過程是在prerouting和forword之間的,因此應該先作地址轉換以後,再進行路由選擇,然後通過forword,最後從postrouting出去

 

理論說了一堆,接下來用實驗環境來驗證下(用dia畫的圖,比較搓。。。在ubuntu下將就用下了。)

wps_clip_p_w_picpath-5955

其中pc1是我本機,系統是ubuntu12.04,NAT和PC2是vmware虛擬機

 

nat主機網絡配置

wps_clip_p_w_picpath-30602

 

SNAT

在作nat以前,要先把路由功能打開,否則數據包連forword都過不了

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

 

添加nat表項

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

表示在postrouting鏈上,將源地址爲172.16.93.0/24網段的數據包的源地址都轉換爲10.0.0.1

 

查看下錶項

wps_clip_p_w_picpath-21165

 

驗證效果:

先看下本機的網絡配置

wps_clip_p_w_picpath-28305

添加一條去往10.0.0.0/24網段的靜態路由

lust@host:~$ sudo route add -net 10.0.0.0/24 gw 172.16.93.129

 

而後在主機上對vmnet1網段進行抓包

lust@host:~$ sudo tcpdump -i vmnet1 –v

 

在主機上ping 10.0.0.2,觀察抓到的包

wps_clip_p_w_picpath-28528

經過抓包能夠發現,去往10.0.0.2的源地址爲10.0.0.1,說明nat成功的將源地址改寫

 

以上是實驗驗證部分

 

這裏再介紹一個SNAT的經常使用選項:MASQUERADE

此選項能夠用在動態獲取IP地址的主機,經常使用在家庭adsl撥號上

iptables -t nat -A POSTROUTING -s 172.16.93.0/24 -o eth1 -j MASQUEREADE

在這裏最好使用 -o 接口來明確指定從哪一個接口出去,MASQUEREADE會調用該接口的地址做爲源地址出去(不指定接口也能夠,不過在主機上有多個IP地址的狀況下最好配置一下)

 

 

DNAT

對於DNAT就再也不作實驗驗證了,和SNAT是差很少的,這裏介紹下經常使用的幾種用法

 

在DNAT中,要把規則定義在PREROUTING鏈中

iptables -t nat -A PREROUTING -d 10.0.0.1 -j DNAT –-to-destination 172.16.93.1

此條規則將請求IP爲10.0.0.1的數據包轉發到後端172.16.93.1主機上

 

iptables -t nat -A PREROUTING -d 10.0.0.1 -p tcp –-dport 80 -j DNAT –-to-destination 172.16.93.1

此條規則將請求IP爲10.0.0.1而且端口爲80的數據包轉發到後端的172.16.93.1主機上,經過定義不一樣的端口,就能夠實現PNAT,將同一個IP不一樣的端口請求轉發到後端不一樣的主機

 

iptables -t nat -A PREROUTING -d 10.0.0.1 -p tcp –-dport 80 -j DNAT –-to-destination 172.16.93.1:8080

此條規則在上條規則的基礎上,發日後端的數據包的目標端口改成8080,在後端主機的web服務器上使用8080端口接收訪問, 這樣能更好的保護後端主機

 

iptables系列NAT部分就寫到這裏,有什麼不明白的能夠留言探討。下一篇將會講述使用iptables的7lay實現7層的訪問控制,也就是在第一篇中所說的網關代理型防火牆,能夠實現控制qq,bt等應用程序的網絡訪問

相關文章
相關標籤/搜索