对于 TCP 和 UDP NAT 用户端口信息。对于像 ICMP 这样的其他协议,它可以使用协议特定的技巧。如果使用了不被迎合或认可的 IP 协议,会发生什么?
这样的数据包甚至可以离开目标接口吗?如果是这样,会发生什么?源IP是否刚刚更改?回来的路上会发生什么?返回数据包是否有可能转到错误的 ip?也许甚至所有可用的ips?
对于 TCP 和 UDP NAT 用户端口信息。对于像 ICMP 这样的其他协议,它可以使用协议特定的技巧。
那么,同样的TCP和UDP是也“特定协议的招数” -他们真的没有什么不同ICMP回显“请求ID”,或IPsec“的SPI”。(NAT 本身就是一个“技巧”。)
这样的数据包甚至可以离开目标接口吗?如果是这样,会发生什么?源IP是否刚刚更改?
通常,是的。即使它们不识别内部协议,大多数 NAT 也会通过此类数据包,因为与“丢弃所有内容”相比,它仍然有更大的工作机会。
回来的路上会发生什么?
取决于 NAT 是否实际跟踪传出数据包。(因人而异。)
即使 NAT 不了解如何从内部协议中提取端口或 ID,它仍然可以跟踪协议类型,这在某些情况下可能就足够了。(每个 IP 数据包都有一个协议类型字段,因此您所说的“原始 IP”只是“未知 IP 协议类型”的一种情况。)
例如,TCP 连接(IP 协议 6)和 ICMP Ping(IP 协议 1,ICMP 类型 8)将被跟踪为:
host 192.168.1.2 (as 42.0.2.1) ? 62.205.132.12, proto 6,port 21445 ? 80host 192.168.1.2 (as 42.0.2.1) ? 62.205.132.12, proto 1,type 8 code 0 id 1227同时,无法识别的协议(例如6in4 隧道)将被跟踪为:
host 192.168.1.2 (as 42.0.2.1) ? 62.205.132.12, proto 41,—因此,所有传入的协议 41 数据包都将转发回192.168.1.2. 这意味着一台计算机仍然可以说协议,但同时两台计算机可能不能。(与 UDP 非常相似,一些NAT 也会检查源 IP 地址,但许多只关心协议和端口。)
虽然我在上面的例子中使用6in4隧道技术,同样也将与发生的所有协议的NAT不明白,即使他们这样做有端口(例如UDP-精简版或SCTP)。
conntrack -L或cat /proc/net/nf_conntrack查看当前正在跟踪的所有状态。一些路由器甚至在他们的 Web UI 中显示了这一点。最后,如果 NAT根本没有保持任何状态,则假定数据包的目的地是路由器本身(与任何其他未跟踪的传入数据包相同),并且通常会被丢弃在地板上。
返回数据包是否有可能转到错误的 ip?
在最简单的情况下,没有。NAT 可以将返回数据包与某个已知状态相关联,或者不能,但它不会随机构成垃圾。(通常。)
但是,如果 LAN 后面的两台计算机试图对同一台远程主机使用相同的协议,则它们的状态可能会发生冲突。哪一个获胜可能会有所不同 - 要么使用最旧的状态直到它到期(因此两台计算机的回复继续转到第一个),或者它们每隔几分钟就会相互覆盖(即它在两者之间翻转)。在这种情况下,动态 NAT 绝对不是为...
也许甚至所有可用的ips?
不。理论上这是可能的——例如,有些人使用局域网唤醒的静态端口转发配置来做到这一点——但默认情况下这样做不会很有用。如果有的话,它会使您的 LAN 更容易受到欺骗数据包的攻击。
(尽管碰巧,这实际上是以太网交换的工作方式——未知 MAC 的数据包通过所有物理端口泛洪。)
作为旁注,这实际上并非特定于 IPv4 NAT。状态跟踪是有状态防火墙的一个组成部分,由 IPv4 和 IPv6 使用。即使没有 NAT/PAT,状态跟踪也允许防火墙自动接受所有已知数据包并拒绝未知数据包。
因此,当人们声称“NAT 增加了安全性”时,他们实际上是在谈论通常随附的防火墙配置(并且在没有 NAT 的情况下也可以很好地使用)。
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |