What is FCrDNS (forward-confirmed reverse DNS)?
FCrDNS (forward-confirmed reverse DNS) verifies an IP by making two DNS records agree. You look up the IP's PTR record to get a hostname, check the hostname belongs to the operator, then look up that hostname and confirm it returns the original IP. The forward record is controlled by the real domain owner, so a forged PTR record cannot pass.
At a glance
- Steps
- Reverse lookup (PTR), domain suffix check, forward lookup (A or AAAA) back to the same IP
- Documented by
- Google for its crawlers, Bing for Bingbot
- Accepted domains (Googlebot)
- googlebot.com or google.com
- Accepted domain (Bingbot)
- search.msn.com
- Why it works
- The IP owner sets the PTR. Only the domain owner can make the forward record match.
- Limit
- Only works for operators that publish reverse DNS for a domain they own
How to run it
- Reverse: resolve the IP to a hostname. No PTR record means FCrDNS cannot vouch for it.
- Match: the hostname must end in an accepted domain for that operator. Compare the end of the string, so
googlebot.com.example.netfails. - Forward: resolve the hostname and confirm the original IP is in the answer. A different IP means the PTR record was forged.
host 66.249.66.1
# 1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
host crawl-66-249-66-1.googlebot.com
# crawl-66-249-66-1.googlebot.com has address 66.249.66.1 (match: verified) Other ways to verify a bot
Quick answers
Should I accept googleusercontent.com hostnames?
Not for Googlebot. Google uses that domain for some user-triggered fetchers, but ordinary Google Cloud machines also resolve under it and forward-confirm.
Is FCrDNS slow?
It costs two DNS queries per new IP. Cache results, or use the operator's published IP ranges, to keep it off the hot path.
What if the reverse lookup returns nothing?
FCrDNS cannot verify that IP. It is not proof of a fake. Fall back to published IP ranges or a signature.