Hi Mark
In case it is helpful for your situation what we do is as follows:
We use 1 box as a sort of SBC, where we do all our IP authentication and then we route the call through to various call processing boxes using the kamailio dispatcher module.
On our dispatcher box we test the ip and from uri as a pair of the connecting party via the allow_trusted function and then on the callprocessing boxes we make sure the messages are coming from the dispatcher box via the allow_source_address function. user credentials authentication is passed through from the dispatcher to the callprocessing box in our set up.
Using the dispatcher module all our sip traffic first passes through the dispatcher (which sounds similar to what you want to accomplish I believe).
Here are the 2 modules I mentioned above:
This a fairly basic set up we have so hopefully you can put together something similar if it suits your needs.
All the best.
Will Ferrer