我尝试通过添加以下内容来禁用 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
- 避免错误,例如,从 rubygems.org 安装 gem 文件
优先使用 IPv4 而不是 IPV6 地址
修改 中的优先级gai.conf
,每次程序getaddrinfo()
调用解析主机名时,Linux 将优先使用 IPv4 地址。当您尝试从 NAT 或路由器后面的机器联系具有 IPv4 和 IPv6 地址的服务器时,这非常有用。此外,您可以在本地使用 IPv6。
- 编辑
/etc/gai.conf
$ sudo vi /etc/gai.conf
- 取消注释最后几行。检查文件是否有接下来未注释的行。
#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。
- 控制面板>网络和共享中心>更改适配器设置
或Win+Rncpa.cpl
Enter - 在您的适配器上(例如以太网),右击 >特性
或双击 >特性
或Alt+Enter
或更改此连接的设置 - 取消选中Internet 协议版本 6 (TCP/IPv6)
- 好的
- 根据需要对其他适配器(如 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
并更改y
为n
。
构建你的内核:
make -j $(nproc)
要安装内核,您需要将其复制到 WSL2 VM 之外的目录,然后.wslconfig
在 Windows 主目录中创建包含以下内容的文件:
[wsl2]
kernel=C:\\Path\\to\\your\\kernel
注意双反斜杠。显然,您需要用实际路径替换上面的占位符。