Phone 2.0: DNS Dialing Anyone?

I’m going to make a giant proposal to the web. Identifiers suck. Email, IM, Phone, etc. Most people have more than one of each. Lets fix that. Step by step.

Phone Numbers Suck

Phone numbers suck. Why? Here’s a few of the more obvious ones, and I’m sure if you think about it, you can come up with some more:

  • Hard to remember. The number of easy to remember numbers is limited. The rest is just randomness.
  • Portability. If you move too far, you have to get a new number to be “local”. If a phone number is your identifier in the telecom world, it should stick.
  • Limited. There are only so many numbers. With growing populations, multiple phone lines, and 5 year olds with their own phone, more digits will be needed. Who wants that? I know I don’t.
  • New area codes. Can it be any more painful? Ever have this? Ever live in an are where more than one area

I keep asking myself why we can’t deprecate phone numbers. It seems silly that in 2008 there’s still no better way of doing things. I really don’t understand why VoIP needs to keep these artifact in our lives. VoIP could easily keep compatibility with existing POTS lines and do something better than phone numbers.

Why can’t we have a system based on DNS? So that you can use a domain name (on any TLD) by simply assigning a record (give it a new name, perhaps ‘TEL’). It works great for email. Most people never even realize if I’ve moved my email to a new server. They still send to the same address, and receive from it. Why can’t that abstraction be applied to phones? Considering VoIP works over the internet anyway, it’s an even more obvious solution.

On top of that, it replaces the stupidity we call “extensions”. Why have 1 (212) 555-5555 x1234 when you can have support@mycompany.com?

DNS Based Dialing

Requesting the main number (phone@domain.tld) on POTS:

s1:~ robert$ dig TEL accettura.com

; <<>> DiG 9.3.4-P1 <<>> a accettura.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26161
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;accettura.com.                 IN      TEL

;; ANSWER SECTION:
accettura.com.          3600    IN      TEL      20 "pots=121255551234"

Or try the cell cell@domain.tld on POTS:

s1:~ robert$ dig TEL cell.accettura.com

; <<>> DiG 9.3.4-P1 <<>> a accettura.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26161
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;accettura.com.                 IN      TEL

;; ANSWER SECTION:
accettura.com.          3600    IN      TEL      20 "pots=12125551111"

Or to get another number (work@domain.tld) on POTS:

s1:~ robert$ dig TEL work.accettura.com

; <<>> DiG 9.3.4-P1 <<>> a accettura.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26161
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;accettura.com.                 IN      TEL

;; ANSWER SECTION:
accettura.com.          3600    IN      TEL      20 "pots=12125552222"
accettura.com.          3600    IN      TEL      30 "pots=12125552223"

And yes. There’s a fallback number there. Could be handy.

Ideally for VoIP you could operate more like a mail server:

s1:~ robert$ dig TEL accettura.com

; <<>> DiG 9.3.4-P1 <<>> a accettura.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26161
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;accettura.com.                 IN      TEL

;; ANSWER SECTION:
accettura.com.          3600    IN      TEL      20 "voip=VOIP1.PHONECOMPANY.com."
accettura.com.          3600    IN      TEL      30 "voip=VOIP2.PHONECOMPANY.com."
accettura.com.          3600    IN      TEL      30 "voip=VOIP3.PHONECOMPANY.com."
accettura.com.          3600    IN      TEL      40 "voip=VOIP4.PHONECOMPANY.com."

;; ADDITIONAL SECTION:
VOIP1.PHONECOMPANY.com.  2773    IN      A       192.168.1.1
VOIP2.PHONECOMPANY.com.  2608    IN      A       192.168.1.2
VOIP3.PHONECOMPANY.com.  336     IN      A        10.10.1.1
VOIP4.PHONECOMPANY.com.  2773    IN      A       10.10.1.2

My VoIP provider with multiple servers on 2 ASN’s (private IP’s as an example). Very nice.

More than one way to do this

There are some things to note here. This example is modeled after TXT so both POTS and VoIP can live in the same record and are distinguished by voip= or pots=. Most DNS records like this (A, CNAME, MX) don’t work as a string. There’s several ways one could do something like this. I personally just like this one since it seems pretty flexable for the next best thing. It doesn’t allow for subdomains though, but I don’t think that’s a disadvantage since there’s so many combo’s with new TLD’s coming around every so often. There’s even a perk I’ll mention later.

Theoretically you could have a successor to VoIP as the first response, and the VoIP as a fall back. The user agent would ignore what it can’t connect to and use the next one on the list.

accettura.com.          3600    IN      TEL      20 "vidphone=VIDEOPHONE1.PHONECOMPANY.com."
accettura.com.          3600    IN      TEL      30 "voip=VOIP2.PHONECOMPANY.com."
accettura.com.          3600    IN      TEL      30 "voip=VOIP3.PHONECOMPANY.com."

Smooth transition

That said, this is still pretty workable. Anyone with a domain already could technically set it up to do this. Anyone with a internet connected phone would be able to use it. Old POTS numbers could continue to work, and you could have both. It’s essentially an alias. Thanks to DNS being well designed it could handle things like fall back, and even allow for successor technologies to be gracefully applied.

Your email is now your phone number. With XMPP it’s also used for IM. Now you’ve consolidated your various contacts into one easy to remember identifier.

Now regarding that small perk you’d give up for no subdomains, look at this:

Consolidate Identities with OpenID

Since your using cell.domain.tld as the hostname you lookup already for the TEL record. Why not set the A to point to a webserver hosting your OpenID identity? Now you’ve consolidated your IM, Email, Phone, and various logins all into one easy identifier.

Robert Scoble asked the other day how the web is screwed up. His belief is that it’s because services don’t know about each other. I think this is one giant step. By consolidating identifiers we make a lot of progress. OpenID can then be expanded to not only host your basic “signup information” but to support some standard profiles. For example:

  • Friends – Buddy list, Friend lists, etc. Various attributes. Think vCard for Web 2.0.
  • Media – Photos, Videos, etc. Keep a copy of your data with you online if you want (optional since capacity = cost).
  • Bookmarks – Favorite websites, news stories, digg’s, Videos.

Websites would then keep data in sync between your OpenID and their service. So if you were to add a friend in Facebook, it would be added to your OpenID friends profile. On your next login to LinkedIn, they will know that’s a person to add to your contacts. Obviously users opt to share what info they want with the providers they want. Complete control, standardized, flexible, expandable.

Still Private

No, you don’t have to give up privacy to make this a reality. First of all, nothing forces anyone into this matrix. You could host an OpenID account anywhere that’s in no way linked to your phone. Totally anonymous. And regarding OpenID data profiles, you’d need to explicitly grant a provider access to each profile.

It does however provide an extra layer of protection against spam, and some fraud. Because your OpenID and phone are potentially joined, a website such as an ecommerce, or financial site could use that as an additional identifier.

Worried about spam or telemarketers? Don’t be. No real additional risk today than before with automatic dialers. If anything this is more secure since there’s billions of potential addresses (rather than numbers which you can easily increment through).

Want to change your number? Get a new domain to start a new life, or a new phone (newphone@domain.tld).

Government tracking you? No harder than it is today.

3 thoughts on “Phone 2.0: DNS Dialing Anyone?

  1. Robert, have you considered ENUM? That might by the right solution however, it requires participation on the traditional phone companies side and that’s the bigest hurdle on the road to universal identifier.

  2. What you describe was one of the use cases that led to the development of Light-Weight Identity (LID), the original URL-based digital identity protocol, which is one of the foundations of the OpenID movement:

    The idea was to bookmark URLs instead of typing phone numbers into address books on mobile phones. By “derefernencing” the URL at run-time, different physical endpoint addresses (aka phone numbers) can be found, and I can reach you wherever you happen to be. If it only resolves to an IM handle, well, then I can still reach you but only by IM.

Leave a Reply

Your email address will not be published. Required fields are marked *

Connect with Facebook

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>