IPv4 vs IPv6 priority in Windows 7

Solution #1: Add a prefix policy to prefer IPv4 addresses over IPv6

Prefix policy table is similar a routing table, it determines which IP addresses are preferred when making a connection. Note that higher precedence in prefix policies is represented by a higher "precedence" value, exactly opposite to routing table "cost" value.

Default Windows prefix policy table:

C:\> netsh interface ipv6 show prefixpolicies
Querying active state...

Precedence  Label  Prefix
----------  -----  --------------------------------
        50      0  ::1/128
        40      1  ::/0
        30      2  2002::/16
        20      3  ::/96
        10      4  ::ffff:0:0/96
         5      5  2001::/32

Note that IPv6 addresses (::/0) are preferred over IPv4 addresses (::/96, ::ffff:0:0/96).

We can create a policy that will make Hurricane Electric IPv6 tunnel less favorable than any IPv4 address:

netsh interface ipv6 add prefixpolicy 2001:470::/32 3 6

2001:470::/32 is Hurricane Electric's prefix, 3 is a Precedence (very low) and 6 is a Label.

I could have used a more generic prefix, but I wanted to make sure that if and when I get direct IPv6 connectivity from an ISP, it will take precedence over IPv4.

If you adapt this solution, you need to substitute an appropriate IPv6 prefix instead of my Hurricane Electric one.

Solution #2: Tweak registry to make Windows always prefer IPv4 over IPv6

This solution is more generic, but more invasive and less standards-compliant. In the end, Windows will still modify the prefix policy table for you.

  • Open RegEdit, navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • Create DisabledComponents DWORD registry value, set its value to 20 (Hexadecimal). See Microsoft KB 929852 for more info about this registry key, especially if DisabledComponents already exists on your system.
  • Reboot.

If monospace text and tables with strange numbers and symbols scare you, you can do this with Microsoft Fix-its, simple installers from Microsoft which make the configuration changes for you.

These fix its come from KB 2533454, which explains that you would want to do this if your IPv6 connectivity is broken. You need to be an administrator to run the fix its; after downloading, right click and select Run as administrator.

  • Prefer IPv4 over IPv6
  • Prefer IPv6 over IPv4 (restore the default behavior)

The most simple way, and these are always so simple we overlook them...

  1. open Network and Sharing Center.

  2. There click on Change Adapter Settings

  3. On the "Menu Bar" Click on Advanced. **Note..If you only see "Organize" then click that, and then from the drop down choose "Layout - Menu Bar"

  4. After clicking advanced in the previous step, click "Advanced Settings" in this step (A box will open on your screen)

  5. What is displayed is adapters and settings and the adapter you are currently using will already be highlighted on the top half and its representative breakdown below (you should see bindings for that adapter). Highlight any one of the bindings in the list and you should notice the arrows to the right light up, use those arrows to change the binding order to your preference and then choose ok from the bottom.

  6. Note that just like when you install a protocol, service, or client in your adapter properties. Same applies here. which is that you change one adapter, and the rest follow suit. So, for instance, if you choose IPV6 prefer over 4 on your wireless adapter, Your LAN adapter changes also.

It's the easiest way I can think of to do this particular task without having to think too much about, or having too much knowledge about the routing of packets on an inter network.