为什么要猜测我们是否可以检查并看看会发生什么?
我已经准备了一个拓扑,代表我们将用于实验的场景。

请注意,隧道不会神奇地工作,它们需要正确配置底层网络。对于底层网络配置,我在路由器之间设置了 eBGP 会话以使其启动和运行。这个问题无关紧要,所以让我们专注于 NAT 和隧道。
第 1 阶段。没有 NAT,没有隧道。让我们看看数据包在没有 NAT 或隧道的情况下“正常”传输时的样子,如 和 之间的链接cumulus6
所示cumulus5
。

没什么好看的吧?到目前为止,正如人们所期望的那样。
第 2 阶段。添加 NAT。然后让我们配置 NAT 规则。请注意,要设置 NAT,我们需要有两个接口:inside和outside。对于我们的拓扑结构cumulus6
,内部为swp2
,外部为swp1
。

这是Dynamic NAT
使用 Cumulus VX 进行配置的方法。
net add nat dynamic snat icmp source-ip 10.0.0.0/24 out-interface swp1 translate 100.0.0.1-100.0.0.1
它基本上说我们需要根据源地址和出站接口动态转换swp1
为地址100.0.0.1
。请注意协议是如何设置的icmp
——这是为了简单起见。ICMP 如何与 NAT 一起工作这是另一个讨论的主题,但基本上与它对 UDP 和 TCP 的工作方式相同。不过,这对我们的问题无关紧要。
现在让我们看看现在如何在 PC 之间看到相同的 ping!

好的!现在我们翻译了我们的地址。我们的主机 PC 现在看起来像是连接cumulus6
到其他设备的线路。
最后阶段。NAT 和隧道。现在我们准备建造隧道看看!如前所述,隧道依赖于底层网络进行传输。我已经配置了 GRE 隧道,其 IP 端点地址为10.99.99.1
oncumulus6
和10.99.99.2
oncumulus4
拓扑的另一侧和100.0.0.1
/200.0.0.1
用于底层传输。

我还添加了一个静态路由来强制流量192.168.0.2
进入隧道接口,在这里你有它。

如您所见,外部 IP 标头提供 和 之间的cumulus6
传输cumulus4
。
答案。现在,我们已准备好对您的问题做出明智的回答。内部 IP 数据包没有转换源 IP 地址10.0.0.2
。给定 NAT 定义,您甚至可以直观地知道——当我们创建 NAT 转换规则时,我们必须指定出站接口。NAT 仅在我们使用该接口作为流量的出站时才适用(swp1
在我们的例子中),但是,我们的数据包被路由到隧道接口,所以它不适用!
希望这有帮助!至少玩起来很有趣:)