如何在 Windows 的 Linux 子系统上禁用 IPv6?

如何在 Windows 的 Linux 子系统上禁用 IPv6?

我尝试通过添加以下内容来禁用 IPv6 /etc/sysctl.conf

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

然后运行sudo sysctl -p重新加载/etc/sysctl.conf设置 - 但引发了错误:

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

我还尝试通过将 grub 配置更改/etc/default/grub.d/50-cloudimg-settings.cfg为来禁用它:

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

然后运行sudo update-grub,但是没有安装 update-grub:

sudo: update-grub: command not found

所以我不确定是否有可能更新 grub,但事实上那里有一个特定的配置,这让我认为可以。

WSL 版本:

Description:    Ubuntu 16.04.2 LTS
Release:        16.04
Codename:       xenial

答案1

你可以指示 Ubuntu 来优先选择 IPv4 连接而不是 IPv6通过编辑 中的优先块/etc/gai.conf

使用此解决方案:

  • 您可以通过 NAT 或仅识别 IPv4 的路由器访问 Internet 上的 IPv4 服务器和 IPv6 服务器
  • 在本地网络中使用 IPv4 和 IPv6
  • 避免错误,例如,从 ruby​​gems.org 安装 gem 文件

优先使用 IPv4 而不是 IPV6 地址

修改 中的优先级gai.conf,每次程序getaddrinfo()调用解析主机名时,Linux 将优先使用 IPv4 地址。当您尝试从 NAT 或路由器后面的机器联系具有 IPv4 和 IPv6 地址的服务器时,这非常有用。此外,您可以在本地使用 IPv6。

  1. 编辑/etc/gai.conf
$ sudo vi /etc/gai.conf
  1. 取消注释最后几行。检查文件是否有接下来未注释的行。
#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

答案2

我在 Windows 网络适配器属性中禁用了 IPv6,这帮我解决了问题。我的 Ubuntu 子系统开始改用 IPv4。

  1. 控制面板>网络和共享中心>更改适配器设置
    Win+R ncpa.cpl Enter
  2. 在您的适配器上(例如以太网),右击 >特性
    或双击 >特性
    Alt+Enter
    更改此连接的设置
  3. 取消选中Internet 协议版本 6 (TCP/IPv6)
  4. 好的
  5. 根据需要对其他适配器(如 WiFi)重复上述操作

请注意,这将禁用所有 Windows 的 IPv6(使用该适配器时),而不仅仅是 WSL。

答案3

如果您使用的是 WSL2,则可以选择构建自己的内核,而无需 IPv6 支持。WSL2 内核的源代码以及构建说明如下可在 GitHub 上获取

为了节省您的时间,以下是说明:

sudo apt install build-essential flex bison libssl-dev libelf-dev git dwarves python3 bc

git clone https://github.com/microsoft/WSL2-Linux-Kernel.git

cd WSL2-Linux-Kernel/

cp Microsoft/config-wsl .config

现在打开.config,找到行CONFIG_IPV6=y并更改yn

构建你的内核:

make -j $(nproc)

要安装内核,您需要将其复制到 WSL2 VM 之外的目录,然后.wslconfig在 Windows 主目录中创建包含以下内容的文件:

[wsl2]
kernel=C:\\Path\\to\\your\\kernel

注意双反斜杠。显然,您需要用实际路径替换上面的占位符。

相关内容