带有 DNS 转换的 Cisco ASA 双 NAT

网络工程 思科 思科 防火墙 纳特 域名解析
2021-07-14 17:55:23

我正在尝试在 Cisco ASA 9.0(3) 上设置带有 DNS 转换的双自动 NAT,但我在 DNS 部分遇到了一些挑战。我的双 NAT 工作正常,因此我在生产和实验室中有一台服务器具有相同的 IP 地址。参见 b2masd1,nameif INSIDE(生产)和 masd1,nameif DMZ(实验室)。

当您从 DMZ 10.195.18.182 ping 到 1.195.18.182 时,我看到两个方向的转换都正确发生...

D:10.195.18.182      S:192.168.11.101       D:1.195.18.182   S:10.195.18.182
             <-----------                         <-----------
                                           1) echo-request to 1.195.18.182
                                           nat (INSIDE,DMZ) static 1.195.18.182 dns



  S:10.195.18.182    D:192.168.11.101       S:1.195.18.182   D:10.195.18.182
              ------------>                        ------------>
      2) echo-reply to 192.168.11.101
      nat (DMZ,INSIDE) static 192.168.11.101 dns


 b2masd1                   +-----------+              masd1
 10.195.18.182      INSIDE |           | DMZ          10.195.18.182
 Mfg Server   -------------| Cisco ASA |------------  Devel Server
                           |           |
                           +-----------+

 Manufacturing                                        Development
 Network                                              Network
 Security: 100                                        Security: 50

这是我在masd1上看到的...

masd1$ /usr/sbin/ping 1.195.18.182
PING 1.195.18.182: 64 byte packets
64 bytes from 1.195.18.182: icmp_seq=0. time=0. ms
64 bytes from 1.195.18.182: icmp_seq=1. time=0. ms

----1.195.18.182 PING Statistics----
2 packets transmitted, 2 packets received, 0% packet loss
round-trip (ms)  min/avg/max = 0/0/0
masd1$

问题是从 DMZ 到 INSIDE 的 DNS 查询没有得到转换。当我从 DMZ 查询 b2masd1 时,我希望 INSIDE 上的名称服务器响应 10.195.18.182,然后 ASA 应该将其转换为 1.195.18.182。然而,这并没有发生。如您所见,DNS 条目未转换。

masd1$ nslookup
Using /etc/hosts on:  masd1

> a2mosd1
Using /etc/hosts on:  masd1

looking up FILES
Trying DNS
Name:    b2masd1.domain.local
Address:  10.195.18.182

> exit
masd1$

谁能解释我需要做什么才能正确翻译 DNS 查询?我需要向 INSIDE 接口上的名称服务器查询 DMZ 中的 b2masd1 以返回 1.195.18.182(因为 ASA 将 INSIDE A-Record 10.195.18.182 转换为 DMZ 地址 1.195.18.182)。

我已经建立了一个聊天室来协助诊断


杂项调试信息

这是我的配置...

!
interface GigabitEthernet0/0
 nameif INSIDE
 security-level 100
 ip address 10.195.2.197 255.255.255.248 standby 10.195.2.198
!
interface GigabitEthernet0/1
 nameif DMZ
 security-level 50
 ip address 10.195.2.201 255.255.255.248 standby 10.195.2.202
!
object network DMZ_NAT_masd1
 host 10.195.18.182
 description xlate masd1 NAT DMZ src 10.195.18.182 to INSIDE src 192.168.11.101
object network INSIDE_NAT_masd1
 host 10.195.18.182
 description xlate masd1 NAT INSIDE src 10.195.18.182 to DMZ src 1.195.18.182
!
object network DMZ_NAT_masd1
 nat (DMZ,INSIDE) static 192.168.11.101 dns
object network INSIDE_NAT_masd1
 nat (INSIDE,DMZ) static 1.195.18.182 dns
!
policy-map type inspect dns DNS_INSPECT_MAP
 parameters
  message-length maximum 512
!
policy-map global_policy
 class inspection_default
  inspect dns DNS_INSPECT_MAP
!
service-policy global_policy global

显示 xlate,以防万一这有帮助...

B2-DEV-FW1/DEVELOPMENT# sh xlate local 10.195.18.182
121 in use, 126 most used
Flags: D - DNS, e - extended, I - identity, i - dynamic, r - portmap,
       s - static, T - twice, N - net-to-net
NAT from DMZ:10.195.18.182 to INSIDE:192.168.11.101
    flags sD idle 0:00:01 timeout 0:00:00
NAT from INSIDE:10.195.18.182 to DMZ:1.195.18.182
    flags sD idle 0:03:55 timeout 0:00:00
B2-DEV-FW1/DEVELOPMENT#

显示服务策略检查 dns...

B2-DEV-FW1/DEVELOPMENT# sh service-policy inspect dns

Global policy:
  Service-policy: global_policy
    Class-map: inspection_default
      Inspect: dns DNS_INSPECT_MAP, packet 15302, drop 0, reset-drop 0, v6-fail-close 0
        message-length maximum 512, drop 0
        dns-guard, count 7649
        protocol-enforcement, drop 0
        nat-rewrite, count 139
B2-DEV-FW1/DEVELOPMENT#

捕获显示从 b2masd1 到名称服务器 (10.195.18.201) 的查询。注意在 INSIDE 接口上发送的双 DNS 查询,但我们似乎没有在 DMZ 接口上获得这些查询。

B2-DEV-FW1/DEVELOPMENT# capture FOO interface DMZ real-time match udp host 10.195.18.182 host 10.195.18.201

Warning: using this option with a slow console connection may
         result in an excessive amount of non-displayed packets
         due to performance limitations.

Use ctrl-c to terminate real-time capture


   1: 09:54:35.994730       10.195.18.182.52639 > 10.195.18.201.53:  udp 45
   2: 09:54:35.995218       10.195.18.201.53 > 10.195.18.182.52639:  udp 83
   3: 09:54:47.875076       10.195.18.182.52644 > 10.195.18.201.53:  udp 53
   4: 09:54:47.875549       10.195.18.201.53 > 10.195.18.182.52644:  udp 136
   5: 09:54:47.875854       10.195.18.182.52645 > 10.195.18.201.53:  udp 51
   6: 09:54:47.876297       10.195.18.201.53 > 10.195.18.182.52645:  udp 138
   7: 09:54:47.876648       10.195.18.182.52646 > 10.195.18.201.53:  udp 35
   8: 09:54:47.877075       10.195.18.201.53 > 10.195.18.182.52646:  udp 35

B2-DEV-FW1/DEVELOPMENT# capture FOO interface INSIDE real-time match udp host 192.168.11.101 host 10.195.18.201

Warning: using this option with a slow console connection may
         result in an excessive amount of non-displayed packets
         due to performance limitations.

Use ctrl-c to terminate real-time capture


   1: 09:56:27.282608       10.195.18.182.52742 > 10.195.18.201.53:  udp 43
   2: 09:56:27.282684       192.168.11.101.52742 > 10.195.18.201.53:  udp 43
   3: 09:56:27.283081       10.195.18.201.53 > 192.168.11.101.52742:  udp 59
   4: 09:56:27.283096       10.195.18.201.53 > 10.195.18.182.52742:  udp 59
2个回答

回答我自己的问题以帮助未来的谷歌员工。我花了大约 3 个小时与 TAC 通电话;我们终于找到了问题的根本原因。

解决方案是添加一个特殊的 NAT 条目,当它到达 INSIDE 接口时,它会匹配 DNS A-Record 中的 IP 地址。

object network DNS_NAT_masd1
 description xlate A-Record DMZ src 1.195.18.182 to INSIDE src 10.195.18.182
 host 1.195.18.182
 nat (DMZ,INSIDE) static 10.195.18.182

当我要求提供描述 DNS 转换为何以这种方式工作的文档的指针时,TAC 负责人说他不知道任何描述这种行为的文件。TAC 负责人还提到,使用更多代码,ASA 将知道自动转换 DNS A 记录,而无需明确添加object network DNS_NAT_masd1然而,dns今天 ASA NAT关键字并不是这样工作的。出于目前尚不完全清楚的原因,ASA 要求 DNS A-Record IP 与<proxy_addr>NAT 语句中的匹配,使用类似于此的语法...

object network obj-EXAMPLE
 description NAT object explicitly for translating DNS A-Records
 host <proxy_addr>
 nat (<REAL_INTF>,<PROXY_INTF>) static <real_addr> dns

困难在于,如果您要通过防火墙处理常规的“数据平面”IP 流量,则此配置与您需要执行的操作完全相反。

这是有效的整个配置......

object network DMZ_NAT_masd1
 host 10.195.18.182
 description xlate masd1 NAT DMZ src 10.195.18.182 to INSIDE src 192.168.11.101
object network INSIDE_NAT_masd1
 host 10.195.18.182
 description xlate masd1 NAT INSIDE src 10.195.18.182 to DMZ src 1.195.18.182
!!! DNS_NAT_masd1 is new
object network DNS_NAT_masd1
 host 1.195.18.182
 description xlate A-Record DMZ src 1.195.18.182 to INSIDE src 10.195.18.182
!
object network DMZ_NAT_masd1
 nat (DMZ,INSIDE) static 192.168.11.101
object network INSIDE_NAT_masd1
 nat (INSIDE,DMZ) static 1.195.18.182
!!! DNS_NAT_masd1 is new
object network DNS_NAT_masd1
 nat (DMZ,INSIDE) static 10.195.18.182 dns

麦克风!感谢您分享这个!我将此解决方法与两次 NAT 一起使用,它也有效!

我有两次 NAT(ASA OS v 9.5):

nat (outside,inside) 源动态 ANY X 目的地 GroupM GroupN

所以,我的内部有一组服务器“GroupN”,我将它们 NAT 到外部到 IP 地址“GroupM”。来自外部(任何)的客户端可以访问我的服务器,并且当外部客户端通过 ASA 时,它们的来源被替换为 IP 地址 X。

这里不可能使用 dns 关键字。但是通过您的解决方法,我创建了一组辅助对象 NAT:

object network My_Server1_on_Inside
 host <NATed IP of Server1>
 nat (outside,inside) static <Real IP of server1> dns

而且我的 DNS 修正工作正常。

顺便说一句,思科在它的文档中说这个任务是不可能的:) http://www.cisco.com/c/en/us/support/docs/security/asa-5500-x-series-next-generation-firewalls/ 115753-dns-doctoring-asa-config.html

最好的问候,谢尔盖