[T&C] Deploy DNS recursive resolver using Thunder CFW

In this article, we will see you can deploy DNS recursive resolver using Thunder CFW.

Setup

This is what we want to achieve:
By default, the Thunder device should resolve queries starting from the root servers.

  • However, for the domain names ending in a10networks.com, it should use the response from a DNS service-group that is bound to the DNS VIP.

Step-by-Step Configuration

Create a NAT pool:

This NAT pool will be used by the Thunder device to send out DNS queries:

ip nat pool IPv4-DNS 100.64.100.250 100.64.100.250 netmask /32

Specify a class list of domain names:

class-list internal-domains dns
 dns ends-with a10networks.com

Create a DNS template:

slb template dns dns-enable-template
 recursive-dns-resolution
  hostnames internal-domains
  ipv4-nat-pool IPv4-DNS
  default-recursive

Note:
With the “default-recursive” command, the Thunder CFW will by default act as a recursive resolver and try to resolve the DNS queries starting from the root server.
In this case, the domains specified using the class-list specifies an “exception” to this default lookup process – the domains matching the “hostnames ” will be resolved using the service-group that is applied on the VIP (see the next step) instead of the default resolution process (starting from the root server).

Apply the DNS template to a DNS VIP:

slb server RS10 100.64.100.10
  port 53 tcp
  port 53 udp
!
slb server RS11 100.64.100.11
  port 53 tcp
  port 53 udp
!
slb service-group SG-DNS-TCP tcp
  member RS10 53
  member RS11 53
!
slb service-group SG-DNS-UDP udp
  member RS10 53
  member RS11 53
!
slb template dns dns-enable-template
  recursive-dns-resolution
    hostnames internal-domains
    ipv4-nat-pool IPv4-DNS
    default-recursive
!
slb virtual-server DNS-VIP 100.64.1.250
  port 53 dns-udp
    source-nat auto
    service-group SG-DNS-UDP
    template dns dns-enable-template

Verification

You can view the statistics for DNS queries resolved recursively using:

vThunder#sh slb virtual-server DNS-VIP 53 dns-udp application-statistics | include Recursive
Recursive Resolution Started:          525
Recursive Resolution Succeeded:         524
Recursive Resolution Send Failed:        1
Recursive Resolution Timed Out:         7
Recursive Resolution Retransmit Sent:      7

Here is a sample packet capture showing the DNS resolution for a website by the Thunder device starting from the root server (in this case, 192.112.36.4):

By doing a packet capture on the DNS servers making up the service group, we can also confirm that the query for the domain name ending in a10networks.com is resolved using the service-group that is bound to the DNS VIP:

Additional Features

You can additionally configure the following features:
·        Integrated DDoS protection
·        DNS caching
·        DNS Application Firewall (DAF)
·        Filter DNS queries of type ANY

ip anomaly-drop bad-content 24
ip anomaly-drop drop-all
ip anomaly-drop out-of-sequence 24
ip anomaly-drop zero-window 24
!
icmp-rate-limit 2000
!
slb common
 dns-cache-enable
!
slb template dns dns-enable-template
 default-policy cache
 malformed-query drop
 query-type-filter deny
  query-type ANY

You can also apply RPZ policy by importing an RPZ file and specifying it under the DNS template.
For this, import the RPZ file as follows:

vThunder(config)#import rpz a10rpz use-mgmt-port scp://a10tme@10.64.4.130/home/a10tme/a10rpz
Password []?

Done.

vThunder(config)#sh rpz
Name                       DNS template
--------------------------------------------------------------
a10rpz                      No
Total RPZ number: 1

vThunder(config)#

vThunder(config)#sh rpz debug
Total Class-list Set Error:           0
Total RPZ Parse Error:             0

vThunder(config)#

vThunder(config)#sh rpz a10rpz
Name     : a10rpz
DNS template   : No
Content:
$TTL 3H
@  IN SOA @ rname.invalid. (
          0  ; serial
          1D  ; refresh
          1H  ; retry
          1W  ; expire
          3H ) ; minimum
  NS  @
  A  127.0.0.1

AAAA ::1

; PASSTHRU action

www.a10networks.com  IN  CNAME rpz-passthru.

; NXDOMAIN action

www.netflix.com   IN  CNAME .

; NODATA action
www.facebook.com  IN  CNAME *.

32.36.65.13.31.rpz-ip IN  CNAME *.

vThunder(config)#

Now apply this RPZ file under the DNS template:

slb template dns dns-enable-template
 rpz 1 a10rpz
  logging enable

Complete Configuration

Here is the complete configuration for reference:

ip anomaly-drop bad-content 24
ip anomaly-drop drop-all
ip anomaly-drop out-of-sequence 24
ip anomaly-drop zero-window 24
!
ip dns primary 8.8.8.8
!
ip dns secondary 9.9.9.9
!
icmp-rate-limit 2000
!
timezone America/Los_Angeles
!
ntp server time.google.com
  prefer
!
interface management
  ip address 10.64.4.135 255.255.255.0
  ip default-gateway 10.64.4.1
!
interface ethernet 1
  enable
  ip address 100.64.1.253 255.255.255.0
!
interface ethernet 2
  enable
  ip address 100.64.100.253 255.255.255.0
!
!
ip route 0.0.0.0 /0 100.64.100.254
!
ip nat pool IPv4-DNS 100.64.100.250 100.64.100.250 netmask /32
!
slb common
  dns-cache-enable
!
slb server RS10 100.64.100.10
  port 53 tcp
  port 53 udp
!
slb server RS11 100.64.100.11
  port 53 tcp
  port 53 udp
!
slb service-group SG-DNS-TCP tcp
  member RS10 53
  member RS11 53
!
slb service-group SG-DNS-UDP udp
  member RS10 53
  member RS11 53
!
slb template dns dns-enable-template
  default-policy cache
  malformed-query drop
  query-type-filter deny
    query-type ANY
  rpz 1 a10rpz
    logging enable
  recursive-dns-resolution
    hostnames internal-domains
    ipv4-nat-pool IPv4-DNS
    default-recursive
!
slb virtual-server DNS-VIP 100.64.1.250
  port 53 dns-udp
    source-nat auto
    service-group SG-DNS-UDP
    template dns dns-enable-template
!
logging facility local3
!
logging syslog information
!
sflow setting local-collection
!
sflow collector ip 127.0.0.1 6343
!
!
end
!Current config commit point for partition 0 is 0 & config mode is classical-mode

vThunder#