可选 DNS 服务器
可选 DNS 服务器
网络需求
FortiGate 配置 DNS 为公网的 DNS 服务器,同时 FortiGate 作为内网 PC 的 DNS 服务器。客户端 PC 无法通过 FortiGate 解析内网服务器的域名,只有内网的 DNS 服务器可以解析内网域名。需要 FortiGate 能够解析公共 DNS 服务器无法解析的内部域名。
在 FortiGate 上的“主 DNS 服务器”和“备用 DNS 服务器”均为公网的 DNS 服务器,如下所示。
config system dns set primary 223.5.5.5 set secondary 114.114.114.114 endFortiGate 作为内部网络的 DNS 服务器(递归方式),未配置 DNS 数据库。内网 PC 的 DNS 服务器均设定为 FortiGate 的内网口 IP 192.168.100.99,通过 FortiGate 来解析域名。
config system interface edit "lan" set ip 192.168.100.99 255.255.255.0 next end config system dns-server edit "lan" next end在此配置下,客户端 PC 访问域名时,会向 FortiGate 的内网口 192.168.100.99 发起 DNS 解析请求,默认配置(
set server-select-method)下,FortiGate 会选择延迟最小的服务器转发 DNS 请求,此例中 223.5.5.5 的延迟更低。客户端 PC 有访问内网服务器域名的需求,如
www.fortidocs.com,这种域名通过公网的 DNS 服务器是无法解析的,会直接返回 DNS NXDOMAIN,导致客户端 PC 无法通过域名访问内网服务器。::: important nslookup www.fortidocs.com 192.168.100.99 ::: Server: 192.168.100.99 Address: 192.168.100.99#53 ** server can't find www.fortidocs.com: NXDOMAIN只有内网的 DNS 服务器可以解析这些内网服务器的域名,需要 FortiGate 在解析域名失败后,将解析请求转发至内网 DNS 服务器。
内网 DNS 服务器中的 DNS 条目较多或没有权限访问,无法通过在 FortiGate 上配置 DNS Database 来解决此问题。
解决方法
配置可选 DNS(Alt-DNS)服务器。当 FortiGate 的主 DNS 服务器/备用 DNS 服务器返回 DNS 的名称解析错误(NXDOMAIN)时,FortiGate 会查询配置的 Alt-DNS 服务器。可选 DNS 服务器的常见用途是解析公共 DNS 服务器无法解析的内部域名。
配置方法(只能通过 CLI 配置),与 DNS 服务器一样,可以配置主 Alt-DNS 和备用 Alt-DNS,默认配置(
set server-select-method)下,FortiGate 会选择延迟最小的 Alt-DNS 服务器转发 DNS 请求:重要
使用条件:
- FortiGate 的主 DNS 服务器/备用 DNS 服务器返回 DNS 的错误类型为 NXDOMAIN 时,FortiGate 才会查询配置的 Alt-DNS 服务器。
- 没有在 DNS Database 中配置对应内网域名的条目。
config system dns set alt-primary {ipv4-address} set alt-secondary {ipv4-address} end在以上场景的配置基础上,增加 Alt-DNS 服务器的配置 10.10.12.1 和 10.10.12.3。
config system dns set primary 223.5.5.5 set secondary 114.114.114.114 set alt-primary 10.10.12.1 set alt-secondary 10.10.12.3 end使用 PC 客户端指定 FortiGate 内网口来解析公网 DNS 服务器可以解析的域名(这里以
handbook.fortinet.com.cn为例),FortiGate 将 DNS 请求递归到主 DNS 服务器查询,主 DNS 服务器返回解析结果(A 记录),FortiGate 将解析结果以自身内网口为源 IP 返回给 PC 客户端。
使用 PC 客户端指定 FortiGate 内网口来解析公网 DNS 服务器无法解析的域名(这里以
www.fortidocs.com为例),FortiGate 将 DNS 请求递归到主 DNS 服务器查询,主 DNS 服务器返回无法解析的结果(NXDOMAIN),FortiGate 不会将此 DNS NXDOMAIN 返回给客户端 PC,随后使用位于内网的主 Alt-DNS 服务器(10.10.12.1)进行查询,主 Alt-DNS 服务器(10.10.12.1)返回解析结果(A 记录)给 FortiGate,FortiGate 将解析结果返回给 PC 客户端。
::: important nslookup www.fortidocs.com 192.168.100.99 ::: Server: 192.168.100.99 Address: 192.168.100.99#53 Non-authoritative answer: Name: www.fortidocs.com Address: 172.22.6.1查看 Alt-DNS 整个过程的 dnsproxy debug 信息。
diagnose debug application dnsproxy -1 diagnose debug enable [worker 0] udp_receive_request()-3144 [worker 0] udp_receive_request()-3194: vd=0, vrf=0, intf=46, len=35, alen=16, 192.168.100.177:64454=>192.168.100.99 [worker 0] handle_dns_request()-2489: vfid=0 real_vfid=0 id=0xe5ae pktlen=35 qr=0 req_type=3 [worker 0] get_intf_policy()-1469: ifindex=46 [worker 0] dns_local_lookup_common()-2553: vfid=0, real_vfid=0, view=2, qname=www.fortidocs.com, qtype=1, qclass=1, offset=35, map#=3 max_sz=512 [worker 0] dns_lookup_aa_zone()-608: vfid=0, fqdn=www.fortidocs.com [worker 0] dns_send_request()-1490 [worker 0] dns_send_resol_request()-1344: orig id: 0xe5ae local id: 0xe5ae domain=www.fortidocs.com [worker 0] dns_find_best_server()-652: found server: 223.5.5.5 (vfid=0 vrf=0) [worker 0] dns_udp_forward_request()-1089: vdom=root req_type=3 domain=www.fortidocs.com oif=0 [worker 0] dns_udp_forward_request()-1210: Send 35B to [223.5.5.5]:53 via fd=20 request:1 [worker 0] udp_receive_request()-3144 [worker 0] batch_on_read()-3555 [worker 0] _udp_receive_response()-3406: vd-0: len=108, addr=223.5.5.5:53, rating=0 [worker 0] dns_query_handle_response()-2743: vfid=0 real_vfid=0 vrf=0 id=0xe5ae domain=www.fortidocs.com pktlen=108 [worker 0] dns_retransmit_func()-1763: jiffies=183874965 created=183874965 wait_cat=0 wait_res=1 profile= last_tx=183874964 ftg_last_tx=0 domain=www.fortidocs.com (orig id: 0xe5ae local id:0xe5ae active) [worker 0] dns_send_request()-1490 [worker 0] dns_send_resol_request()-1344: orig id: 0xe5ae local id: 0xe5ae domain=www.fortidocs.com [worker 0] dns_find_best_server()-652: found server: 10.10.12.1 (vfid=0 vrf=0) [worker 0] dns_udp_forward_request()-1089: vdom=root req_type=3 domain=www.fortidocs.com oif=0 [worker 0] dns_udp_forward_request()-1210: Send 35B to [10.10.12.1]:53 via fd=20 request:1 [worker 0] batch_on_read()-3555 [worker 0] _udp_receive_response()-3406: vd-0: len=51, addr=10.10.12.1:53, rating=0 [worker 0] dns_query_handle_response()-2743: vfid=0 real_vfid=0 vrf=0 id=0xe5ae domain=www.fortidocs.com pktlen=51 [worker 0] dns_query_save_response()-2724: domain=www.fortidocs.com pktlen=51 [worker 0] dns_set_min_ttl()-190: QR: www.fortidocs.com [worker 0] dns_set_min_ttl()-197: Offset of 1st RR: 35 Number of RR's: 1 [worker 0] dns_set_min_ttl()-218: RR TTL: 86400, RR type: 1 [worker 0] dns_cache_response()-329: Min ttl = 86400 [worker 0] dns_forward_response()-1720 [worker 0] dns_secure_forward_response()-1676: category=255 profile=none [worker 0] dns_visibility_log_hostname()-241: vd=0 pktlen=51 [worker 0] wildcard_fqdn_response_cb()-965: vd=0 pktlen=51 [worker 0] hostname_entry_insert()-143: af=2 domain=www.fortidocs.com [worker 0] dns_send_response()-1645: domain=www.fortidocs.com reslen=51 [worker 0] __dns_udp_forward_response()-1522 [worker 0] __dns_udp_forward_response()-1533: vd-0 Send 51B via fd=7, family=2 [worker 0] __dns_udp_forward_response()-1537: set svf of fd to 0 [worker 0] __dns_udp_forward_response()-1587: vd=0 send 51B response 192.168.100.99:53=>192.168.100.177:64454 [worker 0] dns_query_delete()-585: orig id:0xe5ae local id:0xe5ae domain=www.fortidocs.com use=7 active