3 thoughts on “Gogo6 Freenet IPv6 tunnels in Windows 10”

  1. Good morning, Mr. John.
    I’m from Brazil and I am beginner in IPv6 research.
    Could help me with a more detailed tutorial on installation and gogo6 software configuration in Windows 10 system?
    Thank you very much in advance.

    1. Thank you for asking. I now use the service from Hurricane Electric. The set-up isn’t so easy but here’s a script I use in Powershell to connect a Windows machine. One disadvantage is that the HE service can only deal with one account per IPv4 endpoint, unlike gogo6 which allowed a login procedure to permit multiple accounts (and, thereby, IPv6 addresses) to be tunneled into the one IPv4 endpoint.

      This is my script. It complains most of the time and I haven’t the time to re-write it, but it DOES connect. Adjust variables as you wish.


      [CmdletBinding()]
      param()
      # Script to connect dynamic IPv4 address to Hurricane Electric IPv6 in IPv4 tunnel
      # A few useful values.

      # [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }

      $interfaceName = "IP6Tunnel"
      $username = "YOUR-HE-USERNAME";
      $tunnel_key = "YOUR-HE-TUNNEL-KEY";
      $tunnel_id = "YOUR-HE-TUNNEL-ID";
      $heIPv4Address = "216.66.80.26"
      $heIPv6Address = "THE-HE-ENDPOINT-IPv6-ADDRESS";
      $myIPv6Address = "YOUR-HE-ENDPOINT-IPv6-ADDRESS-ON-YOUR-MACHINE";
      $googleDNS1 = "2001:4860:4860::8888";
      $googleDNS2 = "2001:4860:4860::8844";

      # Function to detect that we're connected

      function fastpingtest {
      $ping = New-Object System.Net.NetworkInformation.Ping;
      $ping.Send("8.8.8.8", 1000).status -eq "success";
      Write-Verbose "PINGED";
      }

      $endtime = [datetime]::Now.AddMinutes(1);
      $mapipv6 = $false;

      # Loop, but break out when we're connected

      while([datetime]::Now -lt $endtime) {
      if(fastpingtest)
      { $mapipv6 = $true; Write-Verbose "BREAKING"; break; }
      }

      # When a connection is discovered after a disconnection or from cold,
      # determine our proper IPv4 address, let the Hurricane Electric tunnelbroker
      # server register it (automatically), and then create the v6 in v4 tunnel

      if($mapipv6) {
      $wc = New-Object net.webclient;
      $url= "https://ipv4.tunnelbroker.net/nic/update?username={0}&password={1}&hostname={2}";

      $fullstring = $url -f $($username, $tunnel_key, $tunnel_id);
      Write-Verbose "fullstring is $fullstring";

      $wc.Credentials = new-object System.Net.NetworkCredential($username, $tunnel_key, "");
      $wc.DownloadString($fullstring);

      Write-Verbose "This came back:";
      Write-Verbose $wc;

      # get connected interface

      $ipv4_address = (Get-NetIPAddress -AddressState Preferred -AddressFamily IPv4 -SkipAsSource $False).IPv4Address[1];

      Write-Verbose $wc.ResponseHeaders;
      Write-Verbose "Expect an error if teredo is disabled. Disregard it.";

      netsh interface teredo set state disabled;

      Write-Verbose "First, delete all IP addresses and routes associated with interfaces named ${interfaceName}:";

      $tunnelInterface = Get-NetIPInterface -InterfaceAlias $interfaceName;

      $tunnelInterface.InterfaceIndex | ForEach-Object { $workingIndex = $_;
      $tunnelIP = (Get-NetIPConfiguration -InterfaceIndex $_).IPv6Address.IPAddress;
      $tunnelGateway = (Get-NetIPConfiguration -InterfaceIndex $_).IPv6DefaultGateway.NextHop;
      $tunnelDNS = (Get-NetIPConfiguration -InterfaceIndex $_).DNSServer.ServerAddresses;

      $tunnelDNS | ForEach-Object {Write-Verbose "netsh interface ipv6 delete dnsservers $workingIndex $_";
      netsh interface ipv6 delete dnsservers $workingIndex $_}
      $tunnelGateway | ForEach-Object {Write-Verbose "netsh interface ipv6 delete route ::/0 $workingIndex $tunnelGateway";
      netsh interface ipv6 delete route ::/0 $workingIndex $tunnelGateway}
      $tunnelIP | ForEach-Object {Write-Verbose "netsh interface ipv6 delete address $workingIndex $tunnelIP";
      netsh interface ipv6 delete address $workingIndex $tunnelIP}

      Write-Verbose "netsh interface ipv6 delete interface $_";
      netsh interface ipv6 delete interface $_
      }

      # $(Get-NetIPConfiguration -InterfaceAlias $interfaceName).IPv6Address.IPAdddress | ForEach-Object {netsh interface ipv6 delete address $_};

      Write-Verbose "Going to run:";
      Write-Output "netsh interface ipv6 add v6v4tunnel $interfaceName $ipv4_address $heIPv4Address ";

      netsh interface ipv6 add v6v4tunnel $interfaceName $ipv4_address $heIPv4Address ;

      Write-Verbose "To adjust this interface, overcoming a bug in Windows 10, we will address";
      Write-Verbose "the interface by its index number, not by its name.";

      $tunnelInterface = Get-NetIPInterface -InterfaceAlias $interfaceName;
      $tunnelIndex = $tunnelInterface.ifIndex

      Write-Output "netsh interface ipv6 add address $tunnelIndex $myIPv6Address";
      netsh interface ipv6 add address $tunnelIndex $myIPv6Address;

      Write-Output "netsh interface ipv6 add route prefix=::/0 interface=$tunnelIndex nexthop=$heIPv6Address";
      netsh interface ipv6 add route prefix=::/0 interface=$tunnelIndex nexthop=$heIPv6Address;

      # Add the DNS manually

      Write-Verbose "Adding Google's IPv6 DNS:"
      Write-Output "netsh interface ipv6 add dnsservers $tunnelIndex $googleDNS1";
      Write-Output "netsh interface ipv6 add dnsservers $tunnelIndex $googleDNS2";
      netsh interface ipv6 add dnsservers $tunnelIndex $googleDNS1;
      netsh interface ipv6 add dnsservers $tunnelIndex $googleDNS2;
      Write-Output "I don't know why my IPv4 address needs to see an IPv6 DNS server.";
      netsh interface ipv6 add dnsservers Ethernet $googleDNS2;
      Write-Output "IPv6 in IPv4 tunnel now added."
      }

Leave a Reply

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