原文地址:http://www.cisco-club.com.cn/space-112942-do-blog-id-1438.html
Nat迴環(Lan——>Lan端口映射原理)
Bati-gol 整理
應用背景:
局域網內網有服務器對外發布,基於對服務器的保護,內網用戶需通過域名或者公網ip來訪問內網服務器。如下圖所示:
名詞解釋:
DNAT:轉換目標ip地址。
SNAT:轉換源ip地址。
需求:將外網202.96.128.5的80端口映射至內網192.168.2.10的80端口,外網地址對應有域名,以對外服務。同時,內網無DNS服務器,內網用戶通過公網DNS解析通過同樣的公網域名訪問內網web服務器,要求防火牆能將內網訪問該域名80端口的請求再次定向到內網服務器,使得內部訪問公網域名的數據直接返回給內網服務器,以節省互聯網帶寬。
數據流走向分析:內網服務器的真實ip和訪問端口是192.168.2.10:80,要能夠訪問到這個服務器資源,必須需要把訪問的目標ip 202.96.128.5轉換成192.168.2.10,這樣訪問數據包纔會轉回內網,否則數據包交到公網上,將訪問不到真實的服務器。那麼需要在設備上做一次DNAT(對訪問服務器的數據做目標ip的轉換)。
如果只在設備上做一次DNAT上網轉換的數據包和轉發流程如下圖所示:
文中所列的數據包的結構均爲:
第一步:封裝訪問到目標ip爲202.96.128.5的數據由客戶端發出
第二步:在設備的LAN口接受到數據包,匹配DNAT規則,對數據包進行目標IP的轉換
第三步:經過設備轉換的數據包從lan口發出,交給局域網的真實服務器192.168.2.10.
第四步:服務器對訪問請求做迴應,它收到數據包的源ip是192.168.2.3,成爲封裝回應的目標ip,那麼數據包有內網服務器直接發給內網主機
第五步:內網主機收到一個源ip爲192.168.2.10的迴應,和它發給目標ip爲202.96.128.5的請求不一致,所以數據包直接被丟棄。在客戶端看來,訪問服務器失敗。
由以上的數據包流程可以看出,要保證內網客戶端能訪問到服務器,只做DNAT是不夠的。
那麼需要服務器將回應數據發回給網關設備,再由網關設備轉回給客戶端,客戶端纔會接受數據。流程圖應該如下圖所示:
那麼要讓服務器的數據發給網關,那麼在服務器接收到的數據源IP是網關的IP,所以網關
發給服務器的數據包結構應該是:
這個數據包,和只做了一次DNAT從網關處發出的數據包
相比,源IP 做了轉換。所以才需要在網關設備處再做一次SNAT。
如果網關要代理內網上外網的話,那麼也啓用了SNAT,進行私有地址到公網地址的轉換。
所以這裏的SNAT,必須要設置條件,符合條件才轉換,而且要比上網的SNAT優先匹配。否則會對上網產生影響。
先經過網關設備DNAT處理,再經過SNAT處理的數據包走向如下圖:
由於在網關處做了DNAT和SNAT的轉換,每做一次轉換,設備都會記錄一個鏈接,當服務器迴應數據再經過網關時,網關會根據鏈接再做一次DNAT和SNAT,那麼數據包發回給訪問客戶端的是:,對於客戶端來說,它之前是發給202.96.128.5的訪問請求,所以會接受數據包。
此外對於網關設備來說,數據包是由LAN傳給LAN 的,所以還需放通防火牆的LAN--LAN規則。
應用舉例
用戶需求:
用戶內網有一臺服務器:192.168.0.1,WAN1 口使用光纖接入,有公網IP 地址(202.x.x.x),該公網IP 地址對應一個域名:www.xxx.com,已經使用DNAT 做端口映射把服務器發佈至公網,並可以在公網訪問www.xxx.com;現在要求在局域網(192.168.0.0/24 連接在LAN 口),也可以通過訪問域名:www.xxx.com 達到訪問web server:192.168.0.1,規則如下:
用一國內產品演示:
1) 做端口映射,注意外網接口選擇LAN 口
2) 做SNAT:將源地址轉換成LAN 口。
如果有Lan-Lan規則,放通規則。開放LAN1→LAN1 的防火牆規則:
注意事項:
a)如果服務器在DMZ 區,則第二步可以省略,但要注意放通LAN→DMZ 的防火牆規則。
b)上面的方法也適用於WAN 口爲ADSL 撥號使用動態域名的情況。