源 NAT 和目标 NAT

网络工程 纳特
2022-02-16 10:15:50

也许我没有正确理解这两件事,但源 NAT 不是总是需要目标 NAT 才能工作吗?

假设我们有两个站点:

答:192.168.0.10 B:192.168.0.20

还有一个公网 IP 为 10.11.12.13 的路由器正在做源 NAT,因此它将所有数据包的源地址从 A 和 B 更改为 10.11.12.13。

但是他们应该如何得到回应呢?

我的家用路由器不是同时进行源 NAT 和目标 NAT 吗?

2个回答

也许我没有正确理解这两件事,但源 NAT 不是总是需要目标 NAT 才能工作吗?

这取决于您如何定义这些术语。

在 NAT 的数据包级别上,属于特定连接的数据包的转换必须是对称的。如果传出数据包的源地址(和可能的端口)改变了,那么对这些数据包的响应必须改变它们的目标地址(和可能的端口)。

有多种方法可以在管理和状态跟踪级别处理此问题。

linux 上的 iptables(家庭/SMB 路由器以及其他地方使用的常见实现)采用的方法是面向连接的。新连接的第一个数据包通过“nat”表中的链。根据这些表,设置适用于连接的所有数据包的映射。属于该连接的后续数据包不会通过“nat”表中的链。

因此,当您的一台机器连接到 Internet 上的服务器时,会发生以下情况。

  1. 您的客户端发送到初始数据包。
  2. 路由器获取初始数据包,确定它与新连接相关,并通过“nat 表”中的链传递它。数据包与 SNAT 规则匹配。
  3. 路由器修改源地址。如果规则请求随机源端口或需要消除返回流量的歧义,它也可以修改源端口。
  4. 路由器在其连接跟踪表中创建一个条目,描述新连接和在其上执行的转换。
  5. 路由器将数据包向前发送到互联网。
  6. 服务器制作回复,正常交换源和目标 IP 和端口。
  7. 路由器获得回复数据包,在其连接跟踪表中查找它并确定它与现有连接相关。它会更改目标 IP 和可能的端口。
  8. 客户端会收到带有预期地址和端口的回复。
  9. 基于连接跟踪表中的信息继续翻译与连接有关的其他数据包。

一个人的源头是另一个人的目的地。

但严肃地说,源和目标这两个术语是相对于某些参考的,在这种情况下,是设备进行翻译。所以从你的路由器的角度来看,来源是它的内部网络。