2、Nat
NAT(Network Address Translation),網(wǎng)絡(luò)地址翻譯。
2、1 SNAT
使用在這樣一個(gè)場(chǎng)景中,通常情況下我們無(wú)論是在公司、學(xué)校內(nèi)部計(jì)算機(jī)的ip地址都是一個(gè)內(nèi)網(wǎng)地址,為了和外網(wǎng)的計(jì)算機(jī)通信我們必須鏈接到網(wǎng)關(guān)或者路由器,而網(wǎng)關(guān)和路由器必須對(duì)我們發(fā)出去的數(shù)據(jù)包的原地址翻譯為一個(gè)網(wǎng)關(guān)或路由器的公網(wǎng)地址,然后再將此包送到公網(wǎng)中,這樣的地址翻譯叫SNAT。
SNAT如果時(shí)防火墻轉(zhuǎn)發(fā)的包在前文中發(fā)生在圖1-2的prerouting鏈里。

2、2 DNAT
當(dāng)我們的c業(yè)務(wù)服務(wù)器搭建在公司內(nèi)部網(wǎng)絡(luò)上(其公司網(wǎng)絡(luò)ip地址為10.74.30.15),還有一個(gè)ftp服務(wù)器(ip地址為10.74.30.16),兩臺(tái)服務(wù)器都接上防火墻,而我們?cè)诠W(wǎng)上申請(qǐng)一個(gè)公網(wǎng)IP地址(為11.11.2.3)。當(dāng)外部用戶訪問(wèn)我們C
業(yè)務(wù)時(shí),他試圖訪問(wèn)11.11.2.3:8080 ,當(dāng)另外一個(gè)外網(wǎng)用戶試圖訪問(wèn)我們的ftp服務(wù)器時(shí)他訪問(wèn)11.11.2.3:21. 防火墻必須將發(fā)送往11.11.2.3:8080的數(shù)據(jù)包的dst ip轉(zhuǎn)換為che服務(wù)器的內(nèi)網(wǎng)ip;將發(fā)網(wǎng)11.11.2.3:21的數(shù)據(jù)包dst ip轉(zhuǎn)換為ftp服務(wù)器內(nèi)網(wǎng)ip 10.74.30.16;并把這些數(shù)據(jù)包轉(zhuǎn)發(fā)到內(nèi)網(wǎng)上。如此防火墻就進(jìn)行了dnat。
DNAT發(fā)生在防火墻的pretrouting鏈里。很少情況下也可以發(fā)生在output里

2、3 hairpin模式
在上述DNAT場(chǎng)景中,假設(shè)同事xx知道我們搭建的c業(yè)務(wù)服務(wù)器公網(wǎng)IP地址,他想在公司電腦上(10.74.30.2)通過(guò)這個(gè)服務(wù)器公網(wǎng)ip地址訪問(wèn)c業(yè)務(wù)服務(wù)器。假設(shè)防火墻內(nèi)網(wǎng)ip10.74.30.1會(huì)出現(xiàn)下面的場(chǎng)景

step1
src:10.74.30.2 dst:11.11.2.3:8080 報(bào)文發(fā)送到防火墻(路由器)
step2:
防火墻根據(jù)我們配置的DNAT規(guī)則將保報(bào)文轉(zhuǎn)換為:
src:10.74.30.2 dst:10.74.30.15:8080 并把報(bào)文再發(fā)到公司內(nèi)網(wǎng)中。
step3:
c服務(wù)器收到了來(lái)自陳xx同學(xué)的報(bào)文,然后響應(yīng)此報(bào)文,因?yàn)榇藭r(shí)C服務(wù)器發(fā)現(xiàn)陳xx同學(xué)的報(bào)文來(lái)自于內(nèi)網(wǎng)的計(jì)算機(jī),所以它直接會(huì)送如下響應(yīng)報(bào)文給陳xx同學(xué)(不再通過(guò)防火墻)
src:10.74.30.15:8080 dst:10.74.30.2
step4:
響應(yīng)報(bào)文來(lái)到陳xx的機(jī)器里。此時(shí)陳xx同學(xué)的電腦防火墻發(fā)現(xiàn)自己的沒(méi)有給10.74.30.15發(fā)送過(guò)數(shù)據(jù)包,所以這個(gè)包被防火墻攔截掉。而陳xx同學(xué)發(fā)現(xiàn)自己此時(shí)無(wú)法通過(guò)公網(wǎng)ip訪問(wèn)che服務(wù)器。
為了解決這樣的問(wèn)題,防火墻設(shè)定了hairpin模式。此種模式下,首先DNat規(guī)則還是和前文一樣;接著設(shè)定一個(gè)如下規(guī)則:凡是來(lái)自于內(nèi)網(wǎng)的包,同時(shí)目的地址又是我們轉(zhuǎn)換后的內(nèi)網(wǎng)IP地址,需要做SNAT,將包源地址設(shè)置為防火墻的公網(wǎng)地址iptables -t nat -A Postrouting -p tcp -s 10.74.30.0/24 --dst 10.74.30.15 --dport 8080 -j
SNAT --to-source 10.74.30.1(當(dāng)然也可以設(shè)置簡(jiǎn)單一點(diǎn)——省去-s 10.74.30.0/24)。
當(dāng)此規(guī)則生效以后從step2開(kāi)始變化如下
step2
防火墻將來(lái)自陳xx同學(xué)發(fā)往c公網(wǎng)ip的包轉(zhuǎn)換為:
src:10.74.30.1 dst 10.74.30.15:8080發(fā)送到內(nèi)網(wǎng)給c服務(wù)器
step3、
che服務(wù)器回復(fù)
src:10.74.30.15:8080 dst:10.74.30.1 報(bào)文發(fā)送到內(nèi)網(wǎng)到達(dá)防火墻。
step4、
防火墻根據(jù)上述設(shè)置的規(guī)則,識(shí)別到此回復(fù)包是以前鏈接的一部分,將snat和dnat轉(zhuǎn)換逆過(guò)程:
src:11.11.2.3 :8080 dst:10.74.30.2并發(fā)報(bào)文發(fā)送到內(nèi)網(wǎng),陳xx同學(xué)的計(jì)算機(jī)收到此報(bào)文后,防火墻認(rèn)識(shí)是自己建立的鏈接的包,放行。最終陳同學(xué)能夠在公司內(nèi)部通過(guò)公網(wǎng)訪問(wèn)c服務(wù)器了。
2.4 防火墻訪問(wèn)
還是上述場(chǎng)景,假設(shè)陳xx同學(xué)不甘心,跑到防火墻所在的計(jì)算機(jī)上去訪問(wèn)c服務(wù)的公網(wǎng)ip地址。這種情況下,他將訪問(wèn)到防火墻自己的8080端口的服務(wù)。如果他需要在防火墻上通過(guò)公網(wǎng)地址訪問(wèn)c服務(wù),那么他需要在防火墻的output鏈上做動(dòng)作:
iptables -t nat -A OUTPUT -d 11.11.2.3 -dport 8080 -j NAT --to-destination 10.74.30.15