What you need is some sort of load balancing system. Load balancing systems can be implemented in several different ways. A few of these are:
- Dedicated load balancing server - this device sits in "front" of your back-end nodes and directs requests to one or more of them depending on whatever conditions you set.
- DNS Failover - automation built into your DNS servers that automatically change the IP associated with a certain hostname again, depending on pre-determined conditions.
- CARP/Virtual IP/etc. - Two or more servers running heartbeat, one of which is able to take over an IP address from the other in case one goes down. This probably wouldn't work in your case due to the fact that your servers are in two different ASes.
Of the two that you have to choose from option #1 would be preferred, due to the fact that clients cache DNS lookups, so in the event of a failover, it's likely some number of clients will see failures until their DNS caches expire and they issue another DNS lookup.
HAProxy is a very capable and widely-used F/OSS load balancer - in fact it is used on all of the SE sites. HAProxy does support FreeBSD.