Following an upgrade to Windows 10, some users have reported that their free Gogo6 IPv6 tunneling client won’t work.
I have solved this problem, and posted the answer here:
http://www.gogo6.com/xn/detail/3731159:Comment:1045040
Perhaps that might help someone.
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.
Hi,
The link to the gogo6.com isn’t working anymore.
Is this solution available from another site?
Thanks
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."
}