We have two data centers with Oracle SBCs communicating directly with our CVP servers and no SIP proxy in between (as allowed by a Cisco AppNote). The only way this works is to configure the Call Server's SIP service as follows:
Enable outbound proxy: Yes
Use DNS SRV type query: Yes
Resolve SRV records locally: Checked
Outbound SRV domain name/Server group name (FQDN): sip.cvp.com
Then, under the SIP Server Groups (srv.xml), we configure sip.cvp.com with the IP address of the local SBC's SIP interface.
This works perfectly as long as the SBC and CVP servers are in the same data center. However, for high availability / disaster recovery, we also configure the CVP servers in data center #1 as backup session agents in the SBC for data center #2. Thus, if the CVP servers in DC#2 can't answer, the SBC in DC#2 can send the calls to CVP in DC#1.
The routing works properly to get the caller into the IVR's VXML applications. But, when it is time to transfer the caller out of the IVR, the CVP servers in DC#1 send the SIP REFER using domain sip.cvp.com which then resolves locally to the wrong SBC IP address. The SIP REFER message never arrives at the originating SBC in DC#2 and the caller is left hearing silence until they hang up.
I considered adding the IP address for the SBC in DC#2 to the SIP Server Group but I'm pretty sure that would just cause CVP to load balance the outbound messages and blackhole half the calls. I have tried removing the SIP Server Group, configuring the above outbound proxy and DNS SRV settings to No, and using a Local Static Route like this: *, sip.cvp.com. Unfortunately, that just caused the Call Server to stop answering calls altogether. I think this was because it could not resolve sip.cvp.com to an IP address.
I can't seem to think of a way to make CVP conditionally use the appropriate SBC IP address based on the address the INVITE originated from. I'm wondering if using an actual SIP proxy is the only way. Even if we used a different SIP Server Group name for each data center, the CVP servers in each data center can only use one name so they would always send outbound messages to the local SBC instead of the remote one.