Finding IPv6 from IPv4 address of a host

One of my friend asked me an interesting question about relating IPv4 with IPv6. His question was: in dual stack setup, if we have IPv4 of a router/host, how can we find IPv6 associated with it?

Well, as far as I know there’s no direct way to relate IPv4 with IPv6 but there’s a nice trick out. Say e.g we have Google Public DNS operating at IPv4 - 8.8.8.8. To find IPv6 address of same server (if it exists at all), we can lookup for reverse DNS to get hostname, 

anurag@laptop:~$ dig -x 8.8.8.8 +short  
google-public-dns-a.google.com.

Next, we can lookup for AAAA record associated with that hostname.

anurag@laptop:~$ dig google-public-dns-a.google.com. AAAA +short  
2001:4860:4860::8888

Simple, isn’t it? :)

This actually works. Here’s a pure IPv6  DNS lookup:

anurag@server7:~$ dig @2001:4860:4860::8888 he.net aaaa

; <<>> DiG 9.7.1-P2 <<>> @2001:4860:4860::8888 he.net aaaa  
; (1 server found)  
;; global options: +cmd  
;; Got answer:  
;; ->>HEADER<;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:  
;he.net. IN AAAA

;; ANSWER SECTION:  
he.net. 63215 IN AAAA 2001:470:0:76::2

;; Query time: 35 msec  
;; SERVER: 2001:4860:4860::8888#53(2001:4860:4860::8888)  
;; WHEN: Mon Jan 2 17:58:38 2012  
;; MSG SIZE rcvd: 52

Have a rocking IPv6 year ahead! :)