1. IPsec與NAT的關係
NAT作爲一個IPV4的地址轉換協議,它最初的目的是用來最解決IPv4地址不足的問題。通過NAT協議,局域網內的多個主機可以共同使用一個公網地址,這在很大程度上減輕了IPV4地址短缺的問題。但是隨着NAT的發展,它也用來實現屏蔽一個公司或者企業的內部網絡,從而可以對外隱藏真實的內部IP地址,從而降低被攻擊的風險,如果從這方面考慮,就算互聯網已經過渡到IPV6時代,NAT可能還是會存在的。廣義的NAT設備根據轉換的對象不同可以分爲兩種:NAT和NAPT。
1.1 狹義NAT:只轉換IP地址
根據轉換的地址的不同又可以分爲:
- 源NAT::只轉換源IP地址。一般說來源NAT主要用在報文接入互聯網時,將本地私網地址轉換爲公網地址;
- 目的NAT:只轉換目的IP地址。一般說來目的NAT用在報文從公網進入私網地址時,將目的地址由公網地址轉換爲本地私網地址。
- 雙向NAT:同時轉換源IP和目的IP地址。
1.2 NAPT:轉換IP地址和端口
NAPT與上述的幾種類型的NAT最主要的區別就是把報文中的端口也做映射(轉換),這種應用也是比較常見的。轉換端口的主要原因,個人認爲爲了通過端口來實現多路分解和複用,後面會對這種情景做一個詳細的描述。
1.3 IPsec與NAT
在RFC3715中,已經比較詳細的說明了IPSec與NAT存在的問題。這裏做一個簡單的描述:
IPsec的封裝協議包括AH(認證頭協議)和ESP(封裝安全載荷協議)。
- AH協議由於對整個IP報文進行完整性檢驗,而通過NAT設備時會修改IP地址(可能還有端口),因此修改後的報文在對端解析時會產生錯誤,從而導致協商失敗,這種矛盾是不可調和的;
- ESP協議製作IP數據部分做加密和完整性檢驗,而不包括IP頭部信息,因此ESP協議可以應用在NAT環境中,但是也存在其他的問題:例如傳輸模式下計算傳輸層校驗和時需要僞頭部,這是需要真實的IP地址等,這些問題可以通過特定的方式來解決和克服,後來就出現了一個解決方案:NAT穿越(簡稱NAT-T)。
2. NAT-T環境搭建
關於NAT-T環境的搭建,下面只做原理性介紹,不做具體的配置操作。
下面的拓撲中,兩臺隧道節點均位於NAT設備之後:FW1作爲發起端
上述拓撲中,防火牆FW1和FW2分別位於兩個不同的網絡中,並且都位於企業的NAT網關之後,用來保護不同的子網,通過IPSec協議創建的隧道用來實現主機10.151.18.14和主機172.17.144.129之間的通信。
通訊點:10.151.18.14 和 172.17.144.129
加密點: FW1和FW2
2.1 FW1配置說明
- 首先由於通信點和加密點位於不同的設備上,因此我們使用隧道模式進行通信
- IPsec隧道參數:
對端IP爲:103.22.254.200
本段IP爲:172.21.1.1
說明: 一般情況下通過互聯網建立IPsec隧道,對端的IP地址應該爲對端的公網IP地址,私網地址我們是無法得知的(這邊是NAT用來保護內部網絡地址的情景)。對端的設備可能爲隧道的一個節點,也可能爲一個NAT設備,它在收到報文後通過目的NAT將報文目的地址由公網地址(比如102.22.254.200)轉換爲私網地址(如10.28.1.2),這樣FW2便可以收到並處理響應的IPsec報文。 - 添加到103.22.254.0/24的靜態路由,下一跳爲172.21.1.2; 否則由於缺少下一跳導致報文無法成功發送
2.2 FW2配置說明
FW2的配置於FW1相類似,只是隧道節點不同:
- 首先由於通信點和加密點位於不同的設備上,因此我們使用隧道模式進行通信
- IPsec隧道參數:
對端IP爲:10.28.1.1
本段IP爲:103.22.254.1 - 添加到103.22.254.0/24的靜態路由,下一跳爲10.28.1.1。 否則由於缺少下一跳導致報文無法成功發送
2.3 NAT網關1配置說明
如果只考慮FW1作爲隧道的發起端,那麼只需要配置一個源NAT轉換即可:
操作 | 源IP | 目的IP |
---|---|---|
轉換前 | 172.21.1.1 | 103.22.254.200 |
轉換後 | 103.22.254.1 | 102.22.254.200 |
2.4 NAT網關2配置說明
如果只考慮FW1作爲隧道的發起端,那麼只需要配置一個目的NAT轉換即可:
操作 | 源IP | 目的IP |
---|---|---|
轉換前 | 103.22.254.1 | 102.22.254.200 |
轉換後 | 103.22.254.1 | 10.28.1.2 |
3. NAT-T環境小結
上述NAT-T環境中雖然兩臺FW設備IPsec隧道節點信息配置完全不同,但是通過NAT轉換後就會完成FW1與FW2隧道的建立,這便是NAT存在的結果。關於NAT-T的其他知識後續繼續更新,其中包括端口滑動、NAT-T類型、openswan中NAT-T的協商流程等。