Teredo at the Library

Last week I took my vista laptop to the library to catch up on some work.  I discovered two more roadblocks to getting a public cloud.  I found when I first connected to the public network that local library offers I had a 6to4 address.  I thought that was odd so I took a closer look.  It turns out the library gave me a public IPv4 address, but I did not have global connectivity.  The address that was assigned to me was 198.104.24.200.  But I couldn’t ping any external resources.  I opened my web browser and found that I needed to accept their local policy before I was given real public access.  At this point I could ping external resources and browse the internet.  Although I was assigned a public address I was still behind some sort of NAT.  But the network stack thought that I was on the actual public IPv4 network so it assigned me a 6to4 address.  This was bad because I could not ping IPv6 resources from this address since 6to4 does not traverse NATs.  I figured the best way to get around this problem was to disable 6to4 by running NETSH INT 6to4 set state state=disabled.

At this point I noticed that I did not have a Teredo address.  I ran NETSH INT TEREDO SH ST to figure out what was wrong.  The error indicated that the Teredo server was unreachable over UDP.  At this point I released what had really happened.  For the first 30 seconds after connecting to the wireless network the Teredo client was trying to reach the Teredo server.  But because I was slow about opening up the web browser and accepting their user agreement the Teredo service gave up.  It determined that the Teredo server was unavailable and would no longer try.  So to fix this I restarted the Teredo client by stopping and starting the IPHLPSVC service.  Within a few seconds the Teredo client reported that it found the Teredo server and gave me a IPv6 address.  At this point I had a global cloud in PNRP, I could ping the PNRP seed server, and my P2P apps started working.

So next time you don’t get a global cloud try checking to see if you have incorrectly been given a public IPv4 address.  Also, if you need to logon, create a user, or eat a bagel within the first 30 seconds of connection to your network try restarting the IPHLPSVC service manually.

-Travis