内部服务器无法在其公共 IPs 上与静态双向 NAT 相互联系
Resolution
问题
当内部服务器使用静态双向 NAT 地址配置时, 某些服务器无法通过其公用 IP 地址彼此通信。由于在帕洛阿尔托网络设备上评估策略的方式, 这是预期的行为。本文档提出替代配置作为变通办法。
原因
帕洛阿尔托网络防火墙以自上而下的方式评估 NAT 策略。当匹配规则时, 将选择该规则来处理数据包, 并且不执行进一步的查找。要了解此行为如何影响与服务器的连接, 请考虑下面的方案:

Srv A: 私有 ip = 192.168.89.206, 公共 ip = 10.66.25.101, FQDN = myserverA.com
Srv B: 私有 ip = 192.168.89.210, 公共 ip = 10.66.25.102, FQDN = myserverB.com
Srv C: 私有 ip = 192.168.89.209, 公共 ip = 10.66.25.103, FQDN = myserverC.com
如果三服务器通过各自的专用 IP 地址进行通信, 则通讯不应成为问题。如果每个服务器只知道其他服务器的公共 IP 地址或 FQDN 名称, 并且每个服务器都有静态双向 NAT 策略, 则会出现此问题。
对于编写的每个双向 NAT 语句, 在 dataplane 中创建了2个策略:
- 一个用于源 NAT
- 一个用于目标 NAT
这些 NAT 策略按您配置它们的顺序排列, 因此为三服务器配置 bi-NAT1、bi-NAT2 和 bi-NAT3 将以下列顺序显示在运行配置中:
双 NAT1 (s_NAT1)
双 NAT1 (dNAT1)
双 NAT2 (s_NAT2)
双 NAT2 (dNAT2)
双 NAT3 (s_NAT3)
双 NAT3 (dNAT3)
下面是 GUI 上配置的 NAT 策略的代码段, 以及 bi-NAT1 在 CLI 中的显示方式。
注意: bi-NAT2 和 bi-NAT3 CLI 输出进一步低于此示例, 但未显示. 要查看 dataplane 中的完整 NAT 策略, 请在 CLI 中发出 "显示正在运行的 nat 策略" 命令。
使用此配置, 当通信来自 Srv_A (192.168.89.206) 时, 前往目标 myserverB.com (10.66.25.102) 时, 双 NAT1 (s_NAT1) 由于自上而下的策略评估而得到匹配, 但通信从来不起作用。生成的通信量显示如下:
但是, 当来自 Srv_C (192.168.89.209) 的通信来自于相同的目标 myserverB.com (10.66.25.102) 时, 请注意, 由于正确的目标 NAT 双 NAT2 (dNAT2) 得到匹配, 通信成功。该逻辑查找目标 ip 的匹配项, 并且只有该 ip 被转换。生成的通信量显示如下:
还请注意, 对于工作翻译, 从区域和到区域都是 trust-L3 (这是正确的)。但是, 对于非工作的翻译, 从区域是 trust-L3 的, 对区域是 untrust-L3 的, Srv_B 永远不会收到 ping 数据包。
解决办法
为了确保服务器通过其公共 IP 地址相互通信, 我们需要为每个服务器编写不同的目标和源 NAT 语句, 然后将这些目标 NATs 放在源 NATs 之上。请注意, 目标 NAT 语句应将源区域设置为 "任意", 以允许来自任何区域的传入通信。
下面是 NAT 语句在重新配置后的外观:
另外, 请验证 Srv_A 是否可以与所有内部服务器成功通信。
所有者: tasonibare