The idea is to use SRV records instead of a dispatcher by setting $rd to a DNS SRV enabled host (with all hosts having the same prio and weight).
Problem is that when authentication is required the flow is as follows (with 2 hosts):
1: UAC INVITE/REGISTER -> LB -> SIP0 SIP0 401 with nonce1 challenge -> LB -> UAC UAC ACK -> LB -> SIP0
2: UAC INVITE/REGISTER with nonce1 response -> LB -> SIP1 SIP1 401 with nonce2 challenge -> LB -> UAC UACK ACK -> LB -> SIP1
3: UAC INVITE/REGISTER with nonce2 response -> LB -> SIP0 SIP0 401 with nonce1 challenge -> LB -> UAC UACK ACK -> LB -> SIP0
4: UAC either gives up or goes to 2
Using the dispatcher module this can be solved by using a hash over either from/to/request URI. I can't find any hints for forcing the dialog to 1 backend.
BTW the idea is to keep the loadbalancing proxy as simple/stupid as possible (no db), the backends have a shared db.