How to disable IPv6 on Windows Subsystem for Linux?

17,550

Solution 1

Instead of disabling IPv6 completely, you can instruct Ubuntu to prefer IPv4 connections to IPv6 by editing the precedence blocks in /etc/gai.conf.

Using this solution:

  • You may access servers in Internet with IPv4 an IPv6 servers through a NAT or a router that only understand IPv4
  • Use IPv4 and IPv6 in the local network
  • Avoid errors, for instance, installing gem files from rubygems.org

Preferring IPv4 over IPV6 addresses

Modifying the precedences in the gai.conf, every time a program calls getaddrinfo() for resolving host names, Linux will prefer the IPv4 addreses. This is very useful when you try to contact a server with both IPv4 and IPv6 addresses from a machine behind a NAT or a router. In addition, you may use IPv6 locally.

  1. Edit the /etc/gai.conf
$ sudo vi /etc/gai.conf
  1. Uncomment the last lines. Check that file has the next uncommented lines.
#For sites which prefer IPv4 connections change the last line to
precedence ::ffff:0:0/96 100
...
#    For sites which use site-local IPv4 addresses behind NAT there is
#    the problem that even if IPv4 addresses are preferred they do not
#    have the same scope and are therefore not sorted first.  To change
#    this use only these rules:
#
scopev4 ::ffff:169.254.0.0/112  2
scopev4 ::ffff:127.0.0.0/104    2
scopev4 ::ffff:0.0.0.0/96       14

Solution 2

I disabled IPv6 in the Windows network adapter properties and that took care of the problem for me. My Ubuntu subsytem started using IPv4 instead.

  1. Control Panel > Network and Sharing Center > Change adapter settings
    or Win+R ncpa.cpl Enter
  2. On your adapter (e.g. Ethernet), right-click > Properties
    or double-click > Properties
    or Alt+Enter
    or Change settings of this connection
  3. Uncheck Internet Protocol Version 6 (TCP/IPv6)
  4. OK
  5. Repeat as necessary for other adapters, like WiFi

Note that this will disable IPv6 for all of Windows (when using that adapter), not just WSL.

Share:
17,550

Related videos on Youtube

Răzvan Flavius Panda
Author by

Răzvan Flavius Panda

LinkedIn Twitter

Updated on September 18, 2022

Comments

  • Răzvan Flavius Panda
    Răzvan Flavius Panda over 1 year

    I tried to disable IPv6 by adding in /etc/sysctl.conf:

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
    

    and then running sudo sysctl -p to reload the /etc/sysctl.conf settings - but that threw the error:

    sysctl: cannot stat /proc/sys/net/ipv6/conf/all/disable_ipv6: No such file or directory
    

    I tried to also disable it by changing grub configuration /etc/default/grub.d/50-cloudimg-settings.cfg to:

    GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 console=tty1 console=ttyS0"
    

    and then run sudo update-grub but there is no update-grub installed:

    sudo: update-grub: command not found
    

    So I am not sure if it is even possible to update grub, but the fact there is a specific configuration located there makes me thing there is.

    WSL version:

    Description:    Ubuntu 16.04.2 LTS
    Release:        16.04
    Codename:       xenial
    
    • Charles Green
      Charles Green over 6 years
      The update-grub command is in the package grub2-common, and generally I make changes to /etc/default/grub. In a straight Ubuntu installation, I don't seem to have the directory that you specify for grub.
    • muru
      muru over 6 years
      There's no point to GRUB or doing core network related changes - booting and networking are in the hands of Windows. As for the config file, there's no reason for it to not exist; the files come from the unmodified Ubuntu packages that WSL uses.
    • WinEunuuchs2Unix
      WinEunuuchs2Unix over 6 years
      Echoing what @muru says there is no point in using grub anymore for dual booting. Indeed you can quadruple use Windows, Ubuntu, Suse and Fedora concurrently with low disk and memory requirements because not needing VM. Historically you would figuratively "bash on windows" but now you can literally run "bash on windows".
    • Jacktose
      Jacktose about 6 years
      I also got the cannot stat error when running sudo sysctl -p, but it seemed to work anyway. At least, apt is not throwing IPv6 errors anymore. Edit: Yes it is, sometimes. Still looking for a solid fix.
    • wjandrea
      wjandrea about 6 years
      @muru Could you add that as answer? This question is getting flagged as "off-topic" but it's not really off-topic if the answer is "it's not possible".
  • stumblebee
    stumblebee about 6 years
    Can you give instructions on how to disable IPv6?
  • Jacktose
    Jacktose about 6 years
    @stumblebee Instructions added. It would be really nice to have a way to do it just in WSL, though.
  • apokaliptis
    apokaliptis over 4 years
    I have IPv6 disabled on windows because I don't have IPv6 with my ISP, but WSL still has an inet6 (IPv6) loopback interface, which I believe is preventing certain domains from resolving properly for me. The URLs, sh.rustup.rs and static.rust-lang.org (for installing rust build tools), wont resolve in WSL unless I use -4 flag in curl or wget.
  • TracKer
    TracKer about 4 years
    Something in Windows keeps enabling it each time WSL is running.
  • Stéphane
    Stéphane about 4 years
    Amazing, I had no idea this file even exist ! What stands for gai ??
  • Yvon
    Yvon almost 3 years
    @Stéphane Get Address Information
  • Admin
    Admin almost 2 years
    this fixed npm install under WSL2 - stackoverflow.com/a/72564257/555451