我们有一台 Cisco 2800(实际上是两台,带有 HSRP),配置为服务 LAN 中的多台主机,以及用于配置它们的 VPN。该设备有 2 个接口,一个为内部网络中的多个 VLAN 提供服务,一个连接到 ISP 并使用 HSRP 托管大量公共 IP 地址,并配置了默认网关。ISP 接口标记为外部,LAN 接口标记为内部。我的目标是限制某个主机的端口暴露,转换方式如下:
ip nat inside source static LAN_IP OUTSIDE_IP route-map RM-NOVPN
据我所知,这相当于主机对任何外部连接开放,并允许它通过相同的全局 IP 地址 OUTSIDE_IP 进行连接和可见。我尝试使用如下语句将暴露给外部连接的端口数量限制为最低限度:
ip nat inside source static tcp LAN_IP PORT1 OUTSIDE_IP PORT1 route-map RM-NOVPN
这可行,但如果我禁用总 NAT 转换,主机将失去启动 Internet 连接的能力。我尝试创建具有过载的动态转换,如下所示:
ip nat pool HOSTPOOL OUTSIDE_IP OUTSIDE_IP mask 255.255.255.224
ip nat inside source route-map RM_NOVPN2 pool HOSTPOOL overload
route-map RM_NOVPN2 deny 10
match ip address AL-CRYPTOMAP-VPN
!
route-map RM_NOVPN2 permit 20
match ip address AL-HOST
!
ip access-list standard AL-HOST
permit LAN_IP
!
AL-CRYPTOMAP-VPN
是 VPN 流量的加密映射访问列表。RM_NOVPN 中使用相同的列表来防止来自 VPN 的流量被 NAT。
此配置不起作用,因为主机无法发起与 Internet 的连接。原因未知,因为主机正在使用静态全端口 NAT 进行通信。问题是,这项任务是否只能通过巧妙使用 NAT 来完成?目前,我们无法为外部接口上的入站流量建立完整的 ACL。
请注意,这不是 ASA,因此我无法使用高级 GUI 和数据包跟踪器来调试数据包流或其他内容。Cisco IOS 版本报告为 12.4。
答案1
不幸的是,我的配置无法实现纯 NAT 解决方案。原因如下这里:
问:是否可以构建同时具有静态和动态 NAT 转换的配置?
答:可以。但是,同一个 IP 地址不能用于 NAT 静态配置,也不能用于 NAT 动态配置的池中。所有公用 IP 地址都必须是唯一的。请注意,静态转换中使用的全局地址不会自动被包含相同全局地址的动态池排除。必须创建动态池以排除静态条目分配的地址。
显然,如果 Cisco 为目标 IP 地址配置了静态 NAT(即使是基于端口的),它根本无法支持到同一 IP 地址的动态 NAT。那里还说“如果出现与静态 NAT 不匹配的数据包,则无需 NAT 即可传输”。因此,当 LAN_IP 尝试使用静态上未列出的端口进行外部 NAT 时,数据包将取消 NAT,然后在外部接口上被丢弃为欺骗数据包,或者至少连接永远不会建立,因为源地址是 LAN_IP 而不是 OUTSIDE_IP。真遗憾。
直接对接口进行 NAT 将导致服务器以 OUTSIDE_IP 以外的其他 IP 发送数据,并且由于该服务器是邮件服务器,因此由于 SPF/DKIM 保护,从错误 IP 发送的邮件将在目的地被拒绝。