一、SNAT與DNAT概念
IPtables中可以靈活的做各種網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT),網(wǎng)絡(luò)地址轉(zhuǎn)換主要有兩種:SNAT和DNAT。
SNAT是source network address translation的縮寫,即源地址目標(biāo)轉(zhuǎn)換。比如,多個(gè)PC機(jī)使用ADSL路由器共享上網(wǎng),每個(gè)PC機(jī)都配置了內(nèi)網(wǎng)IP,PC機(jī)訪問外部網(wǎng)絡(luò)的時(shí)候,路由器將數(shù)據(jù)包的報(bào)頭中的源地址替換成路由器的ip,當(dāng)外部網(wǎng)絡(luò)的服務(wù)器比如網(wǎng)站web服務(wù)器接到訪問請(qǐng)求的時(shí)候,他的日志記錄下來的是路由器的ip地址,而不是pc機(jī)的內(nèi)網(wǎng)ip,這是因?yàn)?,這個(gè)服務(wù)器收到的數(shù)據(jù)包的報(bào)頭里邊的“源地址”,已經(jīng)被替換了,所以叫做SNAT,基于源地址的地址轉(zhuǎn)換。
DNAT是destination network address translation的縮寫,即目標(biāo)網(wǎng)絡(luò)地址轉(zhuǎn)換,典型的應(yīng)用是,有個(gè)web服務(wù)器放在內(nèi)網(wǎng)配置內(nèi)網(wǎng)ip,前端有個(gè)防火墻配置公網(wǎng)ip,互聯(lián)網(wǎng)上的訪問者使用公網(wǎng)ip來訪問這個(gè)網(wǎng)站,當(dāng)訪問的時(shí)候,客戶端發(fā)出一個(gè)數(shù)據(jù)包,這個(gè)數(shù)據(jù)包的報(bào)頭里邊,目標(biāo)地址寫的是防火墻的公網(wǎng)ip,防火墻會(huì)把這個(gè)數(shù)據(jù)包的報(bào)頭改寫一次,將目標(biāo)地址改寫成web服務(wù)器的內(nèi)網(wǎng)ip,然后再把這個(gè)數(shù)據(jù)包發(fā)送到內(nèi)網(wǎng)的web服務(wù)器上,這樣,數(shù)據(jù)包就穿透了防火墻,并從公網(wǎng)ip變成了一個(gè)對(duì)內(nèi)網(wǎng)地址的訪問了,即DNAT,基于目標(biāo)的網(wǎng)絡(luò)地址轉(zhuǎn)換。
二、MASQUERADE概念
MASQUERADE,地址偽裝,在iptables中有著和SNAT相近的效果,但也有一些區(qū)別,但使用SNAT的時(shí)候,出口ip的地址范圍可以是一個(gè),也可以是多個(gè),例如:
如下命令表示把所有10.8.0.0網(wǎng)段的數(shù)據(jù)包SNAT成192.168.5.3的ip然后發(fā)出去,
iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT –to-source 192.168.5.3
如下命令表示把所有10.8.0.0網(wǎng)段的數(shù)據(jù)包SNAT成192.168.5.3/192.168.5.4/192.168.5.5等幾個(gè)ip然后發(fā)出去
iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT –to-source 192.168.5.3-192.168.5.5
這就是SNAT的使用方法,即可以NAT成一個(gè)地址,也可以NAT成多個(gè)地址,但是,對(duì)于SNAT,不管是幾個(gè)地址,必須明確的指定要SNAT的ip,假如當(dāng)前系統(tǒng)用的是ADSL動(dòng)態(tài)撥號(hào)方式,那么每次撥號(hào),出口ip192.168.5.3都會(huì)改變,而且改變的幅度很大,不一定是192.168.5.3到192.168.5.5范圍內(nèi)的地址,這個(gè)時(shí)候如果按照現(xiàn)在的方式來配置iptables就會(huì)出現(xiàn)問題了,因?yàn)槊看螕芴?hào)后,服務(wù)器地址都會(huì)變化,而iptables規(guī)則內(nèi)的ip是不會(huì)隨著自動(dòng)變化的,每次地址變化后都必須手工修改一次iptables,把規(guī)則里邊的固定ip改成新的ip,這樣是非常不好用的。
MASQUERADE就是針對(duì)這種場(chǎng)景而設(shè)計(jì)的,他的作用是,從服務(wù)器的網(wǎng)卡上,自動(dòng)獲取當(dāng)前ip地址來做NAT。
比如下邊的命令:
iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
如此配置的話,不用指定SNAT的目標(biāo)ip了,不管現(xiàn)在eth0的出口獲得了怎樣的動(dòng)態(tài)ip,MASQUERADE會(huì)自動(dòng)讀取eth0現(xiàn)在的ip地址然后做SNAT出去,這樣就實(shí)現(xiàn)了很好的動(dòng)態(tài)SNAT地址轉(zhuǎn)換。