See bind "view" features at https://ftp.isc.org/isc/bind9/cur/9.18/doc/arm/html/reference.html#view-statement-grammar
You can match a specific zone content to a specific view and you can define a view depending on the destination IP address use, that is your server IP addresses.
view view_name [ class ] {
match-clients { address_match_list } ;
match-destinations { address_match_list } ;
match-recursive-only yes_or_no ;
[ view_option ; ... ]
[ zone_statement ; ... ]
} ;
The view statement is a powerful feature of BIND 9 that lets a name server answer a DNS query differently depending on who is asking. It is particularly useful for implementing split DNS setups without having to run multiple servers.
Each view statement defines a view of the DNS namespace that is seen by a subset of clients. A client matches a view if its source IP address matches the address_match_list of the view’s match-clients clause, and its destination IP address matches the address_match_list of the view’s match-destinations clause.
While this feature exists and is used, note that it makes troubleshooting far more complicated, besides all problems of synchronizing data between various views. So take extra caution.