如果有问题的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背后的前提是无效的,它从来没有工作。我在这里错过了什么吗?
在此先感谢:)