在语法上,以下一组语句是有效的(至少从 8.3 开始):
interface Ethernet0/0
nameif OUTSIDE
ip address 192.0.2.1 255.255.255.0
interface Ethernet0/1
nameif INSIDE
ip address 10.1.1.1 255.255.255.0
object network O_N_EXAMPLE1
host 10.1.1.2
object network O_N_EXAMPLE2
host 10.1.1.3
object service O_S_EXAMPLE1
service tcp destination eq 60001
object service O_S_EXAMPLE2
service tcp destination eq 60002
object-group network OG_N_EXAMPLEHOSTS
network-object object O_N_EXAMPLE1
network-object object O_N_EXAMPLE2
nat (OUTSIDE,INSIDE) source static any any destination static interface OG_N_EXAMPLEHOSTS service O_S_EXAMPLE1 O_S_EXAMPLE2
nat (INSIDE,OUTSIDE) after-auto source dynamic any interface
第二个nat
语句相当明显——在典型的隐藏 NAT/LAN 到 WAN 场景中,它只是将出站的所有内容都转换为 WAN IP。
但是,第一个 nat
定义了一个(可能是无效的)规则,该规则将任何通过 TCP/60001 的 WAN IP 的入站请求发送到 192.0.2.1:60002 或 192.0.2.2:60002 中的任何一个。
ASA 命令行允许您输入它而不会出错。
packet-tracer
毫不犹豫(至少,假设access-group
允许):
packet-tracer input OUTSIDE tcp 192.0.2.100 12345 192.0.2.1 60001
“成功”,因为它表示最终操作是允许,并且在此过程中它未转换为 10.1.1.2 并将输出接口标识为INSIDE
.packet-tracer input INSIDE tcp 10.1.1.1 60002 192.0.2.1 60002
“成功”,因为它说最后的操作是允许,并且在此过程中它转换为 192.0.2.1,但不指示输出接口。
它没有做的(我认为可能是最初的意图)是在两个目标 IP 之间分配,也不跟踪两个主机中的哪一个启动并建立到可用节点的转换。我不相信ASA 有任何功能(尽管我很高兴被证明是错误的!)除了跟踪路由,这更多地与出站、LAN 到多 WAN 流量有关。
在实践中,我希望它接受入站并丢弃回复流量,从而导致 TCP 握手失败。
我注意到将nat
语句分成两个语句会导致重叠 [原文] 警告:
# nat (OUTSIDE,INSIDE) source static any any destination static interface O_N_EXAMPLE1 service O_S_EXAMPLE1 O_S_EXAMPLE2
# nat (OUTSIDE,INSIDE) source static any any destination static interface O_N_EXAMPLE2 service O_S_EXAMPLE1 O_S_EXAMPLE2
WARNING: mapped-address 192.0.2.2/60002-0 ovelap with existing static NAT.
所以我想知道,ASA 如何解释第一个nat
语句,特别是在什么情况下它实际上会尝试转换为 10.1.1.3?
我知道如果 NAT 是destination static
在两个object
对象之间(从第一个对象到第二个对象的简单转换)或者甚至是object-group
具有相同条目数的两个对象(从第一个中的第n个条目network-object
的一对一转换)会发生什么组到第二组中的第n个条目),但在这种情况下不是,具有一对多定义。
它只是在接口地址和第一个之间转换network-object
,而丢弃第二个吗?或者对于可用的临时端口(例如,第一个 64K 连接到 192.0.2.1,第二个连接到 192.0.2.2)是否有效?它是否将流量复制到两者?还是完全不同的东西?