透明DNS转发器

此功能在FortiOS 7.4.0及更新版本上支持。

功能介绍

FortiGate可以使用透明条件DNS转发器(Transparent conditional DNS forwarder)拦截特定域名的DNS查询并转发到特定DNS服务器,或是直接替换查询结果并回复给客户端。例如当客户端配置的DNS服务器位于公网时,为了将目标地址解析到本地的服务器IP,FortiGate可以拦截请求并将其重新路由到本地DNS服务器进行解析(如果配置了DNS数据库条目,也可以直接返回DNS结果)。

这样可以更好地控制DNS请求,尤其是管理员无法管理客户端设置的DNS服务器配置时。通过解析服务器的本地IP而不是公网IP来提高网络效率,也可以用于特定域名在公网DNS服务器的解析结果不符合用户预期的情况。

网络拓扑

image-20240207101605435

  1. 内网PC填写的DNS服务器均为公网DNS服务器的IP223.5.5.5
  2. FortiGate通过VIP将Web Server的端口映射到WAN1(port1)上。
  3. Web Server的域名为www.fortinet.com.cn,通过公网DNS服务器解析的结果为FortiGate配置的VIP地址。
  4. 需要实现的效果:
    • 外网客户端访问Web Server时,直接通过www.fortinet.com.cn解析到FortiGate配置的VIP IP,通过FortiGate的VIP映射访问即可。
    • 内网客户端访问Server时:
      • 通过公网的DNS服务器223.5.5.5解析www.fortinet.com.cn的IP地址时,FortiGate拦截DNS请求,并直接回复DNS结果为Web Server的内网IP10.10.2.100,内网客户端直接通过解析到的Server内网IP访问服务器。
      • 其他fortinet.com.cn域的主机名(如support.fortinet.com.cn)的DNS请求也会被FortiGate拦截,但转发到内网DNS Server10.10.2.200进行解析,不直接回复DNS请求,也不通过外网的DNS服务器解析。

配置步骤

  1. 基础网络配置、上网策略、与Server的VIP配置(略)。

  2. 在FortiGate上配置DNS数据库(需要先在“系统管理→可见功能”中开启“DNS数据库”)。进入“网络→DNS数据库”页面,新建DNS数据库。

    image-20240207111121493

  3. 在弹出的新建窗口中,配置区域名称,域名填写为fortinet.com.cn.com,关闭“权威”选项,DNS转发器填写内网的DNS服务器10.10.2.200(没有匹配上DNS数据库条目的主机名会被转发至此DNS服务器进行解析)。

    image-20240207111300625

  4. 在DNS条目中点击新建按钮,配置主机名为www,IP地址为Web Server的内网IP10.10.2.100

    image-20240207111754411

  5. 点击确认按钮下发DNS数据库配置。

    image-20240207112038752

    config system dns-database
        edit "fortinet.com.cn"
            set domain "fortinet.com.cn"
            set authoritative disable
            set forwarder "10.10.2.200" 
            config dns-entry
                edit 1
                    set hostname "www"
                    set ip 10.10.2.100
                next
            end
        next
    end
    
    FortiGate # diagnose test application dnsproxy 8    //查看DNS数据库信息//
    worker idx: 0
    vfid=0 name=fortinet.com.cn domain=fortinet.com.cn ttl=86400 authoritative=0 view=shadow type=primary serial=172498465 refresh=0
    forwarder(s): 10.10.2.200
    source-ip(s): 0.0.0.0 ::
        SOA: fortinet.com.cn (primary: dns.fortinet.com.cn, contact: host@fortinet.com.cn, serial: 172498465)(86400)
          A: www.fortinet.com.cn-->10.10.2.100(86400)
    
  6. 如果需要指定DNS Database使用的源IP,例如在IPSec环境中,需要指定DNS的源IP为Tunnel接口的IP,需要在CLI中加入如下配置(此例中不需要配置)。

    config system dns-database
        edit "fortinet.com.cn"
            set source-ip <IPv4_address>
        next
    end
    
  7. 新建DNS Filter配置文件,并通过transparent-dns-database功能引用上述配置的DNS Database(在此例中,我们仅使用transparent-dns-database功能,所以关闭了DNS Filter的其他过滤功能)。

    DNS Filter配置文件中的`transparent-dns-database`可以引用多个DNS Database。后续删除DNS Database时,需要先取消此处的引用。
    config dnsfilter profile
        edit "fortinet.com.cn"
            config ftgd-dns
                set options ftgd-disable
            end
            set transparent-dns-database "fortinet.com.cn"
        next
    end
    
  8. 在FortiGate上新建防火墙策略,源地址为内网PC网段,服务为DNS流量,检查模式需要配置为“基于代理”,DNS过滤器选择上步配置的DNS Filter配置文件,SSL检查选择“certificate-inspection”。注意此条策略放置在上网策略之前)。

    image-20240207113540167

    config firewall policy
        edit 1
            set name "Conditional_Dns_Forwarder"
            set srcintf "port2"
            set dstintf "port1"
            set action accept
            set srcaddr "10.10.1.0/24"
            set dstaddr "all"
            set schedule "always"
            set service "DNS"
            set utm-status enable
            set inspection-mode proxy
            set ssl-ssh-profile "certificate-inspection"
            set dnsfilter-profile "fortinet.com.cn"
            set nat enable
        next
    end
    

    image-20240207114218658

结果验证

  1. 公网客户端PC使用DNS服务器223.5.5.5解析Web Server的域名www.fortinet.com.cn(流量不经过FortiGate),得到结果为Server对应的VIP地址39.105.115.226

     nslookup www.fortinet.com.cn
    Server:        223.5.5.5
    Address:    223.5.5.5#53
    
    Non-authoritative answer:
    Name:    www.fortinet.com.cn
    Address: 39.105.115.226
    
  2. 内网客户端PC使用DNS服务器223.5.5.5解析www.fortinet.com.cn的域名(流量经过FortiGate),得到结果为Web Server内网IP10.10.2.100。DNS流量被FortiGate拦截,由FortiGate代替公网DNS服务器回复DNS查询结果,这个过程对于客户端是透明的。

    C:\Users\Administrator.SUMMERICE2019>nslookup -type=a www.fortinet.com.cn 223.5.5.5
    服务器:  public1.alidns.com
    Address:  223.5.5.5
    
    非权威应答:
    名称:    www.fortinet.com.cn
    Address:  10.10.2.100
    
  3. 内网客户端PC使用DNS服务器223.5.5.5解析support.fortinet.com.cn的域名(DNS数据库条目中不存在的主机名):

    • DNS流量被FortiGate拦截,由FortiGate转发至内网DNS服务器10.10.2.200进行解析,这个过程对于客户端是透明的。

      FortiGate # diagnose sniffer packet any 'host 223.5.5.5 or host 10.10.2.200' 4
      Using Original Sniffing Mode
      interfaces=[any]
      filters=[host 223.5.5.5 or host 10.10.2.200]
      ...
      7.354793 port2 in 10.10.1.100.65195 -> 223.5.5.5.53: udp 41
      7.355069 port3 out 10.10.2.1.3313 -> 10.10.2.200.53: udp 41
      7.355655 port3 in 10.10.2.200.53 -> 10.10.2.1.3313: udp 57
      7.355764 port2 out 223.5.5.5.53 -> 10.10.1.100.65195: udp 57
      ...
      
    • 解析结果为内网DNS服务器返回的结果10.10.2.130,这个结果是内网DNS服务器返回的。

      C:\Users\Administrator.SUMMERICE2019>nslookup -type=a support.fortinet.com.cn
      服务器:  public1.alidns.com
      Address:  223.5.5.5
      
      名称:    support.fortinet.com.cn
      Address:  10.10.2.130
      
    • 查看FortiGate的DNS缓存,已经记录了support.fortinet.com.cn的DNS缓存信息,在TTL(最后一个:符号后的数字)结束前,客户端再次请求该域名时,FortiGate会直接响应DNS请求。

      FortiGate # diagnose test application dnsproxy 7
      worker idx: 0
      ...
      vfid=0, name=support.fortinet.com.cn, ttl=86400:86250:1650
               10.10.2.130 (ttl=86400)
      ...
      

Copyright © 2024 Fortinet Inc. All rights reserved. Powered by Fortinet TAC Team.
📲扫描下方二维码分享此页面👇
该页面修订于: 2024-02-07 16:29:19

results matching ""

    No results matching ""