2、Nat
NAT(Network Address Translation),網絡位址翻譯。
2、1 SNAT
使用在這樣一個場景中,通常情況下我們無論是在公司、學校内部計算機的ip位址都是一個内網位址,為了和外網的計算機通信我們必須連結到網關或者路由器,而網關和路由器必須對我們發出去的資料包的原位址翻譯為一個網關或路由器的公網位址,然後再将此包送到公網中,這樣的位址翻譯叫SNAT。
SNAT如果時防火牆轉發的包在前文中發生在圖1-2的prerouting鍊裡。

2、2 DNAT
當我們的che業務伺服器搭建在公司内部網絡上(其公司網絡ip位址為10.74.30.15),還有一個ftp伺服器(ip位址為10.74.30.16),兩台伺服器都接上防火牆,而我們在公網上申請一個公網IP位址(為11.11.2.3)。當外部使用者通路我們Che
業務時,他試圖通路11.11.2.3:8080 ,當另外一個外網使用者試圖通路我們的ftp伺服器時他通路11.11.2.3:21. 防火牆必須将發送往11.11.2.3:8080的資料包的dst ip轉換為che伺服器的内網ip;将發網11.11.2.3:21的資料包dst ip轉換為ftp伺服器内網ip 10.74.30.16;并把這些資料包轉發到内網上。如此防火牆就進行了dnat。
DNAT發生在防火牆的pretrouting鍊裡。很少情況下也可以發生在output裡
2、3 hairpin模式
在上述DNAT場景中,假設同僚陳xx知道我們搭建的che業務伺服器公網IP位址,他想在公司電腦上(10.74.30.2)通過這個伺服器公網ip位址通路che業務伺服器。假設防火牆内網ip10.74.30.1會出現下面的場景
step1
src:10.74.30.2 dst:11.11.2.3:8080 封包發送到防火牆(路由器)
step2:
防火牆根據我們配置的DNAT規則将保封包轉換為:
src:10.74.30.2 dst:10.74.30.15:8080 并把封包再發到公司内網中。
step3:
che伺服器收到了來自陳xx同學的封包,然後響應此封包,因為此時Che伺服器發現陳xx同學的封包來自于内網的計算機,是以它直接會送如下響應封包給陳xx同學(不再通過防火牆)
src:10.74.30.15:8080 dst:10.74.30.2
step4:
響應封包來到陳xx的機器裡。此時陳xx同學的電腦防火牆發現自己的沒有給10.74.30.15發送過資料包,是以這個包被防火牆攔截掉。而陳xx同學發現自己此時無法通過公網ip通路che伺服器。
為了解決這樣的問題,防火牆設定了hairpin模式。此種模式下,首先DNat規則還是和前文一樣;接着設定一個如下規則:凡是來自于内網的包,同時目的位址又是我們轉換後的内網IP位址,需要做SNAT,将包源位址設定為防火牆的公網位址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(當然也可以設定簡單一點——省去-s 10.74.30.0/24)。
當此規則生效以後從step2開始變化如下
step2
防火牆将來自陳xx同學發往che公網ip的包轉換為:
src:10.74.30.1 dst 10.74.30.15:8080發送到内網給che伺服器
step3、
che伺服器回複
src:10.74.30.15:8080 dst:10.74.30.1 封包發送到内網到達防火牆。
step4、
防火牆根據上述設定的規則,識别到此回複包是以前連結的一部分,将snat和dnat轉換逆過程:
src:11.11.2.3 :8080 dst:10.74.30.2并發封包發送到内網,陳xx同學的計算機收到此封包後,防火牆認識是自己建立的連結的包,放行。最終陳同學能夠在公司内部通過公網通路che伺服器了。
2.4 防火牆通路
還是上述場景,假設陳xx同學不甘心,跑到防火牆所在的計算機上去通路che的公網ip位址。這種情況下,他将通路到防火牆自己的8080端口的服務。如果他需要在防火牆上通過公網位址通路che服務,那麼他需要在防火牆的output鍊上做動作:
iptables -t nat -A OUTPUT -d 11.11.2.3 -dport 8080 -j NAT --to-destination 10.74.30.15