Cisco ASA doble NAT con traducción DNS

11

Estoy tratando de configurar el doble NAT automático con traducción de DNS en Cisco ASA 9.0 (3), y tengo algunos desafíos con la parte de DNS. Obtuve el doble NAT funcionando correctamente, de modo que tengo un servidor en producción y en el laboratorio con la misma dirección IP. Ver b2masd1, nameif INSIDE (producción) y masd1, nameif DMZ (lab).

Cuando haces ping desde DMZ 10.195.18.182 a 1.195.18.182, veo que las traducciones suceden correctamente en ambas direcciones ...

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

Esto es lo que veo en 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$

El problema es que las consultas DNS de DMZ a INSIDE no se traducen. Cuando consulto b2masd1 desde la DMZ, espero que el servidor de nombres en el INTERIOR responda con 10.195.18.182, y luego el ASA debería traducir eso a 1.195.18.182. Sin embargo, eso no está sucediendo; Como puede ver, la entrada DNS no está traducida.

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$

¿Alguien puede explicar lo que debo hacer para que las consultas DNS se traduzcan correctamente? Necesito una consulta para b2masd1 en la DMZ a un servidor de nombres en la interfaz INSIDE para devolver 1.195.18.182 (porque el ASA traduce el registro A INSIDE 10.195.18.182 a la dirección DMZ 1.195.18.182).

He configurado una sala de chat para ayudar con el diagnóstico.


Otra información de depuración

Esta es mi configuración ...

!
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

Mostrar xlate, en caso de que esto ayude ...

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#

Mostrar política de servicio inspeccionar 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#

Capturas que muestran consultas de b2masd1 al servidor de nombres (10.195.18.201). TENGA EN CUENTA las consultas DNS dobles enviadas en la interfaz INTERIOR, pero no parece que las obtengamos en la interfaz 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
Mike Pennington
fuente

Respuestas:

8

Respondiendo mi propia pregunta para ayudar a los futuros googlers. Pasé unas 3 horas al teléfono con TAC; finalmente llegamos a la causa raíz del problema.

La solución es agregar una entrada NAT especial, que coincida con la dirección IP en el Registro A de DNS cuando llegue a la interfaz INTERIOR.

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

Cuando solicité un puntero a la documentación que describe por qué la traducción DNS funciona de esta manera, el líder de TAC dijo que no sabía de ninguno que describiera este comportamiento. El líder del TAC también mencionó que con más código, el ASA sabría traducir automáticamente el Registro A de DNS sin agregarlo explícitamente object network DNS_NAT_masd1; sin embargo, esa no es la forma en que la dnspalabra clave para ASA NAT funciona hoy. Por razones que todavía no están completamente claras, el ASA requiere que la IP de registro A de DNS coincida con la <proxy_addr>de la declaración NAT, utilizando una sintaxis similar a esta ...

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

La dificultad es que esta configuración es exactamente al revés de lo que debe hacer si va a realizar un tráfico IP normal de "plano de datos" a través del firewall.

Esta es toda la configuración que funciona ...

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
Mike Pennington
fuente
1

¡Miguel! ¡Gracias por compartir esto! Utilicé esta solución con dos veces NAT, ¡y también funciona!

Tengo dos veces NAT (ASA OS v 9.5):

fuente nat (exterior, interior) dinámica CUALQUIER X destino GrupoM GrupoN

Por lo tanto, tengo un grupo de servidores "GroupN" en mi interior y los conecto NAT a las direcciones IP externas "GroupM". Los clientes externos (cualquiera) pueden acceder a mis servidores y cuando los clientes externos pasan por ASA, sus fuentes se reemplazan por la dirección IP X.

Aquí no es posible usar la palabra clave dns. Pero con su solución, he creado un conjunto de NAT de objetos auxiliares:

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

Y tengo DNS doctoring funcionando correctamente.

Por cierto, Cisco en su documentación dice que esta tarea es imposible :) http://www.cisco.com/c/en/us/support/docs/security/asa-5500-x-series-next-generation-firewalls/ 115753-dns-doctoring-asa-config.html

Saludos cordiales, Sergey

sergey ivanov
fuente