如果有問題的NAT設備重寫出站ICMP數據包,ICMP NAT穿越應該如何工作?ICMP打孔缺陷?
圖
=========================================================================================
| CLIENT | <---> | NAT-C | <---> { internet } <---> | NAT-S | <---> | SERVER |
=========================================================================================
19.19.19.19 (external addresses) 72.72.72.72
192.168.0.2 192.168.0.1 (internal addresses) 172.16.0.1 172.16.0.2
力學
如pwnat
描述ICMP holepunching的快速概覽:
SERVER
發送ICMP迴應請求包(ping),以一些其它宿主(例如3.3.3.3
)至在NAT-S
打開一個洞。當CLIENT
想要連接時,它發送一個ICMP Time Exceeded數據包到NAT-S
,這應該被路由到SERVER
。爲了使所述路由工作,CLIENT
通過在其中嵌入相同的數據包(ICMP回聲到3.3.3.3
)來構造ICMP超時數據包,它期望SERVER
首先發送。
問題
如果CLIENT
需求,從而嵌入在其ICMP超時回覆留下NAT-S
相同(ICMP迴應請求)數據包,它必須知道包的查詢ID。 但是它如何知道這個查詢ID?
據RFC 3022 Section 2.2,當NAT-S
遇到出站ICMP迴應請求,重寫數據包的查詢ID字段以獨特的外部查詢ID,以便它可以路由未來ICMP回聲相同的查詢ID,以SERVER
回覆。
鑑於上述問題,似乎背後pwnat
和ICMP holepunching背後的前提是無效的,它從來沒有工作。我在這裏錯過了什麼嗎?
在此先感謝:)