3
RFC 5508
—
dbasnett 2010年
Answers:
对于诸如回声(ping)之类的ICMP查询/回复类型消息,NAPT使用ICMP查询ID(有时也称为ICMP ID)的方式与使用TCP或UDP端口号的方式相同。
对于诸如目的地不可到达之类的ICMP错误消息,它使用导致错误的帧头的ICMP数据包的内部副本来确定要使用NAT表中的哪个映射来转换它。
在一些与NAT相关的RFC中简要引用了这些过程,但是我很难找到一个明确说明该过程的过程。请参阅“传统NAT”,RFC3022,第4.1节。
这与任何TCP或UDP映射都没有冲突,因为在良好的NAPT实现中,协议是NAT表条目中保留的使其唯一的信息之一。
我做了一个小模拟(基于GSN3 Kali Linux CLI设备),以检查ICMP冲突时会发生什么(显然,这可能是特定于供应商的):
关于ICMP请求/响应在显示NAT之前,当来自2个设备(分别为IP 10.0.0.1和10.0.0.2)的ICMP请求的标识符相等时。
在同时进行ICMP请求/响应NAT之后,显示冲突的ICMP会话的标识符被NAT更改为0,并从此开始递增。
综上所述,可以说Linux NAT在其开启时处理了ICMP标识符的冲突(因为ICMP标识符在NAT之前没有更改)。