Teredo and the PNRP Global Cloud


Most applications that use the Windows Peer-to-Peer applications require use the global cloud for most scenarios.  However I have found that occasionally the global cloud is not present on some machines.  Here is some troubleshooting tips you can perform to get the global cloud up and running.


First of all, a brief review on what the global cloud is.  It is nothing more than access to public IPv6 addresses.  In theory if your windows machine has a Global IPv6 address your p2p applications can communicate with any other windows machine with Global IPv6 connective.  Chances are you do not yet have Native IPv6 connectivity and so you are using a transition technology like Teredo.  Teredo is available on both Vista and XP. 


It tries to send IPv4 UDP packets to a teredo server (by default Teredo.ipv6.microsoft.com).  The server in turn will send back a teredo address for the client to use.  The address it sends back is a Global IPv6 address with a prefix of 2001:0::/32.  When the application sends a packet from the teredo address to another IPv6 address it will be sent to the destination or to a Teredo relay service to route to the correct address.


How do you check to see if you have access to the global cloud?  The simplest way is to run “NETSH P2P PNRP CL SH ST *”.    This will enumerate what clouds are available.  You will probably see a link local cloud that looks something like this: “LinkLocal_2001:4898:28:3::/64”  That cloud will let you communicate with those on your same subnet.  The global cloud is named “Global_”.  If it is not there then we need to find out why.


Take a look at your teredo state.  On vista the command is “Netsh int teredo sh st”  On XP it is “Netsh interface ipv6 show teredo”.  The state value will tell us if it is working or not.  The Error value will tell us why it is not working.  If the state is probe that means it is still trying to communicate with the teredo server.  You need to give it another minute.  If it says dormant or qualified that means it is working.  If it says offline then we need to examine the error state.


Sometimes it is clear what the error is.  If it says the teredo server is unreachable over UDP then you need to check if it is blocked by a firewall.  If you are using the windows firewall the port should have been opened for you.  Check any 3rd party firewalls or your edge firewalls to make sure the traffic is not being blocked.  By default Teredo uses a random port.  You can set which port you want it to use with the “netsh int ter set state clientport=port” command.  You may try to do a regular ping to the teredo server.  However the error may not be as clear.  If it says “Client is in a managed Network” it means teredo has detected that you are in a corperate environment.  If that is the case you need to set the Teredo type to Enterprise client “Netsh int ter set state enterpriseclient”.


Another thing to note is on Vista a IPv6 firewall is required for Teredo to operate.   If windows detects there is no IPv6 firewall, teredo will not function.  If you use the windows firewall, turn it on.  If you use a 3rd party firewall check with the manufacturer to make sure it reports to windows if it is on or not, and that it covers IPv6.


For more information about Teredo, read the overview at http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/teredo.mspx.


-Travis

Comments (5)

  1. houghtoa says:

    In the article it says that you can check the Teredo state on XP with the NETSH command "Netsh int ipv6 teredo sh st".  This must be a typo, since I get the following message "The following command was not found: int ipv6 teredo sh st".

    I have noticed that the NETSH commands for XP are sometimes different than Vista.  Unfortunately, the pages on the Web don’t explain why there are differences nor the format for each and a decent explaination of what each P2P NETSH command does.

    Perhaps future articles could address these issues. Since we are on the issue of trying to figure out why things don’t work, perhaps you might address how one could go about determining:

    1) Global_ exists, but

    2) cannot connect to nodes on the Global_

    3) cannot connect to nodes on Site_

    4) can connect to nodes on Local_ when they are on the same computer

    Are there any tools that would allow one to graphically see the cloud and intergate nodes?

    Keep them articles coming!

  2. tylbart says:

    Thanks houghtoa!

    I’m sorry about the XP netsh command.  I’ve corrected the command in the article.

    I appreciate the feedback – this is great stuff!  I’ll get this information together asap.

    Cheers!

    Tyler

  3. sumeetpk says:

    When I try to sync seed server by using

    netsh>p2p>pnrp>cloud>sync seed Global_.Some time I do get an error saying

    "Error:Encountered issues with the PNRP cache.<error 0x8098090d>"

    Why do we get such erro?

    Also I encountered an error which says

    "SOLICIT sent to address: [2002:0000:…..]:3540

    Destination did not respond <error 0x80980800>"

    Here

    1>What is the meaning of "SOLICIT sent to address…" statement.

    2>What is this error all about?

  4. tylbart says:

    Follow up with Sumeet is available in our msdn forum:

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1501670&SiteID=1

  5. melmasry says:

    When i tried to run "netsh p2p pnrp cl sh st *" i did not get neither local nor global clouds in the list .. instead i got an error "no more endpoints available from this endpoint"

    how can i fix this?

    thank you