First, when doing routing, it's usually not necessary to also use
iptables, unless you want to do something complicated for some reason.
You didn't say if you are splitting the traffic based on a list of complete addresses, or if you are splitting by prefixes etc. So please edit your question and provide this information.
If you split based on complete addresses, the simplest solution is to just add names for those addresses to
/etc/hosts. Lookup in this file takes precedence over DNS lookup (unless configured otherwise in
nssswitch.conf). Of course, both the IP addresses in this file and in your routing file need to be updated if changed.
Another option is to use
man 5 resovler:
nameserver Name server IP address
Internet address of a name server that the resolver should
query [...] Up to MAXNS (currently 3, see ) name servers may be
listed, one per keyword. If there are multiple servers, the
resolver library queries them in the order listed.
However, this file is usually automatically generated by various other parts of the system, and the details differ from Linux distribution to Linux distribution. So you must find out which scripts are executed for your DHCP client and/or OpenVPN to update this file with the received nameserver information, and then modify those scripts so both
nameserver entries end up in
resolv.conf in the correct order.
In this form, it will only work if the Chinese DNS server fails to return an IP address for blocked domains. If the Chinese DNS server behaves differently, e.g. if you have to test the IP returned to find out if it's blocked or not, or if you need different kind of tests, it will even get more difficult: You'll have to use some kind of local DNS proxy that does those tests, and probably modify the code of an existing proxy software.
I would assume other people in China who have used VPNs already have run into the same problem, so possibly there's also some ready-made solution out there, but the international community likely doesn't know about those.