NAT ASA duplo da Cisco com tradução de DNS

11

Estou tentando configurar o Auto NAT duplo com tradução de DNS no Cisco ASA 9.0 (3) e estou tendo alguns desafios com a parte do DNS. Recebi o dobro do NAT funcionando corretamente, de modo que tenho um servidor em produção e no laboratório com o mesmo endereço IP. Consulte b2masd1, nomeif INSIDE (produção) e masd1, nomeif DMZ (laboratório).

Quando você executa ping do DMZ 10.195.18.182 para 1.195.18.182, vejo as traduções acontecendo corretamente nas duas direções ...

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

É isso que vejo no 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$

O problema é que as consultas DNS da DMZ para INSIDE não estão sendo traduzidas. Quando eu pesquiso b2masd1 da DMZ, espero que o servidor de nomes no INSIDE responda com 10.195.18.182 e, em seguida, o ASA deve traduzir isso para 1.195.18.182. No entanto, isso não está acontecendo; como você pode ver, a entrada DNS não é traduzida.

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$

Alguém pode explicar o que preciso fazer para que as consultas DNS sejam traduzidas corretamente? Preciso de uma consulta para b2masd1 no DMZ para um servidor de nomes na interface INSIDE para retornar 1.195.18.182 (porque o ASA converte o INSIDE A-Record 10.195.18.182 no DMZ addr 1.195.18.182).

Criei uma sala de bate - papo para ajudar no diagnóstico


Informações diversas sobre depuração

Esta é a minha configuração ...

!
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, caso isso ajude ...

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 serviço inspecionar 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#

Captura mostrando consultas de b2masd1 para o servidor de nomes (10.195.18.201). OBSERVE as consultas DNS duplas enviadas na interface INSIDE, mas parece que não as recebemos na interface 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
fonte

Respostas:

8

Respondendo à minha própria pergunta para ajudar futuros googlers. Passei cerca de 3 horas no telefone com o TAC; finalmente chegamos à causa raiz do problema.

A solução é adicionar uma entrada NAT especial, que corresponda ao endereço IP no registro A do DNS quando ele chegar na interface INSIDE.

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

Quando solicitei um ponteiro para a documentação que descreve por que a tradução DNS funciona dessa maneira, o líder do TAC disse que não conhecia ninguém que descrevesse esse comportamento. O líder do TAC também mencionou que, com mais código, o ASA saberia traduzir automaticamente o registro A do DNS sem adicionar explicitamente object network DNS_NAT_masd1; no entanto, não é assim que a dnspalavra - chave para o ASA NAT funciona hoje. Por razões que ainda não estão completamente claras ainda, o ASA exige que o IP do registro A do DNS corresponda ao <proxy_addr>da declaração NAT, usando uma sintaxe semelhante 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

A dificuldade é que essa configuração é exatamente inversa para o que você precisa fazer se quiser acessar o tráfego IP normal do "plano de dados" através do firewall.

Esta é toda a configuração 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
fonte
1

Mike! Obrigado por compartilhar isso! Eu usei essa solução alternativa com duas vezes NAT e funciona também!

Eu tenho duas vezes NAT (ASA OS v 9.5):

origem nat (externa, interna) dinâmica QUALQUER destino X GroupM GroupN

Então, eu tenho um grupo de servidores "GroupN" no meu interior e eu os NAT para fora para endereços IP "GroupM". Clientes de fora (qualquer) podem acessar meus servidores e, quando clientes externos passam pelo ASA, suas fontes são substituídas pelo endereço IP X.

Aqui não é possível usar a palavra-chave dns. Mas, com sua solução alternativa, criei um conjunto de NATs de objetos auxiliares:

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

E eu tenho o DNS DNS funcionando corretamente.

BTW, a Cisco em sua documentação diz que esta tarefa é impossível :) http://www.cisco.com/c/en/us/support/docs/security/asa-5500-x-series-next-generation-firewalls/ 115753-dns-doctoring-asa-config.html

Atenciosamente, Sergey

sergey ivanov
fonte