IPSec NAT 穿越概述
欲了解關(guān)于The Cable Guy的所有專欄的的列表和更多信息,請(qǐng)點(diǎn)擊此處。
由于歷史的原因,部署帶 Internet 協(xié)議安全的第二層隧道協(xié)議(L2TP/IPSec)的問題之一在于無(wú)法定位網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)之后的 IPSec 對(duì)話方。 Internet 服務(wù)提供商和小型辦公/家庭辦公(SOHO)網(wǎng)絡(luò)通常使用 NAT 來(lái)共享單個(gè)公共 IP 地址。 雖然 NAT 有助于節(jié)省剩余的 IP 地址空間,但是它們也給諸如 IPSec 之類的端對(duì)端協(xié)議帶來(lái)了問題。
一種稱為 IPSec NAT 穿越(NAT-T)的新技術(shù)正在由 Internet 工程任務(wù)組的IPSec 網(wǎng)絡(luò)工作組標(biāo)準(zhǔn)化。 IPSec NAT-T 是在標(biāo)題為 “UOSec 包的 UDP 封裝”(draft-ietf-ipsec-udp-encaps-02.txt)和“IKE中的 NAT 穿越協(xié)商”(draft-ietf-ipsec-nat-t-ike-02.txt)的 Internet 草案中描述的。 IPSec NAT-T 對(duì)協(xié)商過程進(jìn)行了修改,并且定義了發(fā)送受 IPSec 保護(hù)的數(shù)據(jù)的不同方法。
在 IPSec 協(xié)商過程中,支持 IPSec NAT-T的對(duì)話雙方會(huì)自動(dòng)確定:
• | 發(fā)起 IPSec 對(duì)話的一方(通常是一個(gè)客戶端計(jì)算機(jī))和響應(yīng) IPSec 對(duì)話的一方(通常是一個(gè)服務(wù)器)是否都能執(zhí)行 IPSec NAT-T。 |
• | 它們之間的路徑中是否存在任何 NAT。 |
如果這兩個(gè)條件同時(shí)為真,那么雙方將使用 IPSec NAT-T 來(lái)通過 NAT 發(fā)送受 IPSec 保護(hù)的流量。 如果其中一方不支持 IPSec NAT-T,則執(zhí)行常規(guī)的 IPSec 協(xié)商(在前兩個(gè)消息之后)和 IPSec 保護(hù)。 如果雙方都支持 IPSec NAT-T,但是它們之間不存在 NAT,則執(zhí)行常規(guī)的 IPSec 保護(hù)。
IPSec NAT-T 受Windows Server 2003、Microsoft L2TP/IPSec VPN Client(一個(gè)免費(fèi)的 Web 下載組件,它支持運(yùn)行 Windows 98、Windows Millennium Edition 和 Windows NT 4.0 Workstation 的計(jì)算機(jī)創(chuàng)建 L2TP/IPSec 連接)以及L2TP/IPSec NAT-T Update for Windows XP and Windows 2000(一個(gè)免費(fèi)的 Web下載組件,它支持運(yùn)行Windows 2000和Windows XP的計(jì)算機(jī)創(chuàng)建 L2TP/IPSec 連接)的支持。
本專欄研究與通過 NAT 使用 IPSec 相關(guān)聯(lián)的問題,以及這些問題如何通過 IPSec NAT-T 來(lái)得到解決,以及用于快速模式和主模式的 Internet 密鑰交換(IKE)協(xié)商中的結(jié)果變更。
注意: IPSec NAT-T 是僅為 ESP 流量定義的。
![]() | 與通過 NAT 使用 IPSec 相關(guān)的問題 |
![]() | 對(duì) IPSec 的 NAT-T 修改概述 |
![]() | 通過 NAT 使用 IPSec 的問題的 IPSec NAT-T 解決辦法 |
![]() | 使用 IPSec NAT-T 的主模式和快速模式 SA 的 IKE 協(xié)商例子 |
![]() | 更多信息 |
與通過 NAT 使用 IPSec 相關(guān)的問題如下:
• | NAT 無(wú)法更新上層校驗(yàn)和。 TCP 和 UDP 報(bào)頭包含一個(gè)校驗(yàn)和,它整合了源和目標(biāo) IP 地址和端口號(hào)的值。 當(dāng) NAT 改變了某個(gè)包的 IP 地址和(或)端口號(hào)時(shí),它通常要更新 TCP 或 UDP 校驗(yàn)和。 當(dāng) TCP 或 UDP 校驗(yàn)和使用了 ESP 來(lái)加密時(shí),它就無(wú)法更新這個(gè)校驗(yàn)和。 由于地址或端口已經(jīng)被 NAT 更改,目的地的校驗(yàn)和檢驗(yàn)就會(huì)失敗。 雖然 UDP 校驗(yàn)和是可選的,但是 TCP 校驗(yàn)和卻是必需的。 |
• | NAT 無(wú)法多路傳輸 IPSec 數(shù)據(jù)流。 ESP 保護(hù)的 IPSec 流量沒有包含可見的 TCP 或 UDP 報(bào)頭。 ESP 報(bào)頭位于 IP 報(bào)頭和加密的 TCP 或 UDP 報(bào)頭之間,并且使用 IP 協(xié)議號(hào) 50。 因此,TCP 或 UDP 端口號(hào)就無(wú)法將流量多路傳輸?shù)讲煌膶S镁W(wǎng)主機(jī)。 ESP 報(bào)頭包含一個(gè)名為 Security Parameters Index(安全參數(shù)索引,SPI)的字段。 SPI 與明文(plaintext)IP報(bào)頭中的目標(biāo) IP 地址和 IPSec 安全協(xié)議(ESP 或 AH)結(jié)合起來(lái)用于識(shí)別 IPSec 安全關(guān)聯(lián)(SA)。 對(duì)于到 NAT 的傳入流量,目標(biāo) IP 地址必須映射到一個(gè)專用 IP 地址。 對(duì)于 NAT 專用端的多個(gè) IPSec 對(duì)話方,多個(gè) IPSec ESP 數(shù)據(jù)流的傳入流量的目標(biāo) IP 地址是同一個(gè)地址。 為了將一個(gè) IPSec ESP 數(shù)據(jù)流與另一個(gè)區(qū)分開,目標(biāo) IP 地址和 SPI 必須得到跟蹤并映射到某個(gè)專用目標(biāo) IP 地址和 SPI。 由于 SPI 是一個(gè) 32 位的數(shù)字,多個(gè)專用網(wǎng)客戶端使用相同 SPI 值的概率很低。 問題在于,您很難確定哪個(gè)傳出 SPI 值對(duì)應(yīng)于哪個(gè)傳入 SPI 值。 NAT 無(wú)法映射 SPI,因?yàn)镋SP尾部包含一個(gè)消息驗(yàn)證散列碼(hashed message authentication code,HMAC),它檢驗(yàn) ESP 協(xié)議數(shù)據(jù)單元(PDU)的完整性(ESP PDU 包含 ESP 報(bào)頭、ESP 有效載荷和 ESP 尾部),SPI 無(wú)法在 HMAC 值失效之前改變。 |
• | 無(wú)法改變 IKE UDP 端口號(hào)。 IPSec 的某些實(shí)現(xiàn)同時(shí)使用 UDP 端口 500 來(lái)作為源和目標(biāo) UDP 端口號(hào)。 然而,對(duì)于一個(gè)位于 NAT 之后的 IPSec 對(duì)話方,NAT 會(huì)改變初始 IKE 主模式包的源地址。根據(jù)具體的實(shí)現(xiàn)方式,來(lái)自 500 之外的其他端口的 IKE 流量可能會(huì)被丟棄。 |
• | IKE UDP 端口映射的 NAT 超時(shí)可能導(dǎo)致問題。 NAT 中的 UDP 映射通常會(huì)很快被刪除。 發(fā)起者的 IKE 流量在 NAT 中創(chuàng)建了一個(gè) UDP 端口映射,它在初始主模式和快速模式 IKE 協(xié)商期間使用。 然而,如果響應(yīng)者隨后向發(fā)起者發(fā)送 IKE 消息卻沒有提供 UDP 端口映射,那么這些消息將被 NAT 丟棄。 |
• | Identification IKE 有效載荷包含嵌入的 IP 地址。 對(duì)于主模式和快速模式協(xié)商,每個(gè) IPSec 對(duì)話方發(fā)送一個(gè) Identification IKE 有效載荷,其中包括發(fā)送對(duì)話方的嵌入 IP 地址。 由于發(fā)送節(jié)點(diǎn)的源地址已經(jīng)被 NAT 改變,該嵌入地址和 IKE 包中的 IP 地址不匹配。 驗(yàn)證 Identification IKE 有效載荷的 IP 地址的 IPSec 對(duì)話方將丟棄該包,并放棄 IKE 協(xié)商。 |
NAT-T 對(duì) IPSec 的修改如下:
• | ESP 的 UDP 封裝 UDP 報(bào)頭置于外層 IP 報(bào)頭和 ESP 報(bào)頭之間,用于封裝 ESP PDU。 用于 UDP 封裝的 ESP 流量的端口和用于 IKE 的端口相同。 |
• | 修改過的 IKE 報(bào)頭格式 IPSec NAT-T IKE 報(bào)頭包含一個(gè)新的 Non-ESP Marker 字段,它允許接收方區(qū)分 UDP 封裝的 ESP PDU 和 IKE 消息。 在確定存在一個(gè)中間 NAT 之后,支持 IPSec NAT-T 的對(duì)話方開始使用新的 IKE 報(bào)頭。 |
• | 新的 NAT-Keepalive 包 這是一個(gè)和 IKE 流量使用相同端口的 UDP 消息,它包含單個(gè)字節(jié)(0xFF),用于為發(fā)送到某個(gè)專用網(wǎng)主機(jī)的 IKE 和 UDP 封裝的 ESP 流量刷新 NAT 中的 UDP 端口映射。 |
• | 新的 Vendor ID IKE 有效載荷 這個(gè)新的有效載荷包含一個(gè)眾所周知的散列值,它表明這個(gè)對(duì)話方能夠執(zhí)行 IPSec NAT-T。 |
• | 新的 NAT-Discovery (NAT-D) IKE 有效載荷 這個(gè)新的有效載荷包含一個(gè)散列值,它整合了一個(gè)地址和端口號(hào)。 在主模式協(xié)商期間,IPSec 對(duì)話方包括兩個(gè) NAT-Discovery 有效載荷——一個(gè)用于目標(biāo)地址和端口,另一個(gè)用于源地址和端口。 接收方使用 NAT-Discovery 有效載荷來(lái)發(fā)現(xiàn) NAT 之后是否存在一個(gè)經(jīng) NAT 轉(zhuǎn)換過的地址或端口號(hào),并基于被改變的地址和端口號(hào)來(lái)確定是否有對(duì)話方位于NAT之后。 |
• | 用于UDP封裝的ESP傳輸模式和隧道模式的新的封裝模式 這兩種新的封裝模式是在快速模式協(xié)商期間指定的,用于通知 IPSec 對(duì)話方應(yīng)該對(duì) ESP PDU 使用 UDP 封裝。 |
• | 新的NAT-Original Address (NAT-OA) IKE 有效載荷 這個(gè)新的有效載荷包含 IPSec 對(duì)話方的原始(未轉(zhuǎn)換的)地址。 對(duì)于 UDP 封裝的 ESP 傳輸模式,每個(gè)對(duì)話方在快速模式協(xié)商期間發(fā)送 NAT-OA IKE 有效載荷。 接收方將這個(gè)地址存儲(chǔ)在用于 SA 的參數(shù)中。 |
IPSec NAT-T 通過以下方式解決了通過 NAT 使用 IPSec 的問題:
• | 問題: NAT 無(wú)法更新上層校驗(yàn)和。 解決辦法: 通過在 NAT-OA IKE 有效載荷中發(fā)送原始地址,接收方擁有檢驗(yàn)解密之后的上層校驗(yàn)和(源和目標(biāo) IP 地址和端口)所需的所有信息。 |
• | 問題: NAT 無(wú)法多路傳輸 IPSec 數(shù)據(jù)流。 解決辦法: 通過使用 UDP 報(bào)頭封裝 ESP PDU,NAT 能夠使用 UDP 端口來(lái)多路傳輸 IPSec 數(shù)據(jù)流。 跟蹤 ESP 報(bào)頭中的 SPI 就不再必要了。 |
• | 問題: 無(wú)法改變 IKE UDP 端口號(hào)。 解決辦法: IPSec NAT-T對(duì)話方能夠接受來(lái)自 500 之外的端口的 IKE 消息。 此外,為了防止 IKE 敏感(IKE-aware)的 NAT 修改 IKE 包,IPSec NAT-T 對(duì)話方在主模式協(xié)商期間把 IKE UDP 端口 500 改為 UDP 端口 4500。 為了允許IKE流量使用這個(gè)新的 UDP 端口,您可能必須配置防火墻以允許 UDP 端口 4500。 |
• | 問題: Identification IKE有效載荷包含嵌入的 IP 地址。 解決辦法: 通過在 NAT-OA IKE 有效載荷中發(fā)送原始地址,接收方擁有了可用來(lái)在快速模式協(xié)商期間檢驗(yàn) Identification IKE 有效載荷內(nèi)容的原始地址。 由于NAT-OA IKE 有效載荷在快速模式協(xié)商發(fā)生之前沒有發(fā)送,對(duì)于驗(yàn)證主模式期間發(fā)送的 Identification IKE 有效載荷中的 IP 地址的 IPSec 實(shí)現(xiàn),它要么一定不會(huì)執(zhí)行這個(gè)驗(yàn)證,要么通過使用另一種機(jī)制(比如名稱檢驗(yàn))來(lái)驗(yàn)證對(duì)話方。 |
• | 問題: IKE UDP 端口映射的 NAT 超時(shí)可能導(dǎo)致問題。 解決辦法: 通過定期發(fā)送 NAT Keepalive 包,用于后續(xù) IKE 協(xié)商和 UDP 封裝的 ESP PDU 的 UDP 端口映射同時(shí)在 NAT 中得到刷新。 |
增添新的 NAT-D 和 NAT-OA 有效載荷和 UDP 通道類型將修改主模式和快速模式 IKE 協(xié)商。 例如,下表顯示了快速模式協(xié)商期間,一個(gè)使用 Kerberos 身份驗(yàn)證的基于 Windows 的 IPSec 對(duì)話方使用 Vendor-ID 和 NAT-D IKE 有效載荷的情況。 其中用于 IPSec NAT-T 的附加 IKE 有效載荷和消息變更以粗體顯示。
用于 Kerberos 身份驗(yàn)證方法的主模式消息
主模式消息 | 發(fā)送者 | 有效載荷 |
1 | 發(fā)起者 | Security Association(包含提議)、Vendor ID、Vendor ID(NAT-T功能) |
2 | 響應(yīng)者 | Security Association(包含一個(gè)選定的提議)、Vendor ID、Vendor ID(NAT-T 功能) |
3 | 發(fā)起者 | Key Exchange(包含 Diffie-Hellman 公開密鑰)、Nonce、Kerberos Token(發(fā)起者)、NAT-D(目標(biāo)地址和端口), NAT-D(源地址和端口) |
4 | 響應(yīng)者 | Key Exchange (包含 Diffie-Hellman 公開密鑰)、Nonce、Kerberos Token(響應(yīng)者)、NAT-D(目標(biāo)地址和端口), NAT-D(源地址和端口) |
5(已加密) | 發(fā)起者 | Identification、Hash(發(fā)起者) |
6(已加密) | 響應(yīng)者 | Identification、Hash(響應(yīng)者) |
如果兩個(gè)節(jié)點(diǎn)都支持 IPSec NAT-T,并且它們之間至少存在一個(gè) NAT,那么它們將在快速模式協(xié)商期間使用 IPSec NAT-T 選項(xiàng)。 假設(shè)這兩個(gè)對(duì)話方之間至少存在一個(gè)NAT,結(jié)果快速模式協(xié)商將如下表所示。
快速模式消息
快速模式消息 | 發(fā)送者 | 有效載荷 |
1 (已加密) | 發(fā)起者 | Security Association (包含建議,包括對(duì)“UDP 封裝的隧道”或“UDP 封裝的傳輸隧道”模式的選擇)、Identification(包含安全流量描述)、Nonce、NAT-OA |
2 (已加密) | 響應(yīng)者 | Security Association(包含一個(gè)選定的建議)、Identification(包含安全流量描述)、Nonce、NAT-OA |
3 (已加密) | 發(fā)起者 | Hash |
4 (已加密) | 響應(yīng)者 | Notification(通知) |
在快速模式協(xié)商結(jié)束時(shí),兩個(gè) IPSec 對(duì)話方都擁有彼此的原始地址,并根據(jù)需要定期發(fā)送 NAT-Keepalive 包,同時(shí)對(duì) ESP PDU 使用 UDP 封裝。
聯(lián)系客服