[Dundi] iDUNDi
John Todd
jtodd at loligo.com
Sun Oct 24 14:38:32 CDT 2004
The use of DUNDi for number lookup is a good start in the global
scheme of route lookups. I'm not convinced it's the last, best, or
only protocol to do such lookups, but I'm pleased so far with most of
the concepts that the system uses, insofar as it's actually getting
people to think about VoIP interconnection protocols. "Running code
and rough consensus."
What is one of the most concerning issues about VoIP interconnection
is authentication of origin, or at least the ability to reliably
associate a call with an origin and then filter appropriately. We're
still woefully incapable of taking calls from the "wide open
Internet" and ensuring that they are originating from a server that
is at least in some minimal way "allowed" to send those calls.
It seems natural to me that a DUNDi speaker is well-placed to do
inverse queries on the e.164 ANI of inbound calls, and choose to
handle those calls based on the results. For lack of a better term,
I call it "inverse DUNDi", or "iDUNDi". This is similar to RPF with
some routers, or similar (but nowhere near equivalent) to SPF for
email.
The tagging of outbound calls with DUNDi keys is an excellent method
that provides some verification of origin, but it doesn't say
anything about the origin ANI to my knowledge. The GPA states that
the sender must have accurate ANI, as stated in section 10. This
simply turns "good faith" into "must have" in circumstances where the
receiver tries to verify the origin.
This would mean creating a new DUNDi object type, which I describe
incompletely below:
Key in request: e.164 number request
Reply:
- EID
- host identification (some or all could be returned):
- IP address list (CIDR notation)
- domain list (regexps allowed, or specific host entries)
- port (integer, or range)
- protocol (integer)
So, a typical process would look like this:
Ast1: (via DUNDi) "I have a call coming in from 448451249068. Who
claims responsibility for that number?"
Ast2: (via DUNDi) "I do. The only hosts that should be originating
call requests using that number as an ANI should have a hostname of
proxy1.example.com or asterisk.example.com. The calls should be IAX
on port 5036 or SIP on port 5060 only."
Ast1: (to itself): "Hmm... I see this call request is coming in from
10.10.33.12, which has reverses that map to asterisk.example.com, and
the forwards then also map to asterisk.example.com, so I'll let the
call proceed. I'm configured to not really care what port or
protocol it came in on, so I'll ignore those bits of data."
These replies would be cached, just like the forward DUNDi lookups.
There would be more data involved in caching these replies, which is
a downside.
In Asterisk, at least, this could be done I think without too much
difficulty, and could be used as a front-end for SIP proxies that
didn't have DUNDi capability. This is a separate process than an
outbound call, and could be easily used to backwards-verify calls
that perhaps didn't even originate from a DUNDi query. I don't quite
have an answer on how SIP would integrate into this - the trick is
that originating IP address of the query might not be the originating
domain inside of the SIP message, but perhaps they'd both have to be
in the DUNDi reply.
Who knows? Maybe DUNDi will see just as much (exactly as much?)
use as a distributed filter for inbound calls as much as it is used
for a routing protocol for forward lookups.
This concept may have already been discussed off-line (nobody ever
has an original idea with Asterisk, eh?) but I didn't see anything in
public so I'll mention it here for overview and comments.
JT
More information about the Dundi
mailing list