Как отключить IPv6 в подсистеме Windows для Linux?
Я пытался отключить 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
но не установлено обновление-grub:
sudo: update-grub: command not found
Так что я не уверен, возможно ли вообще обновить grub, но тот факт, что там находится определенная конфигурация, делает меня существующим.
Версия WSL:
Description: Ubuntu 16.04.2 LTS
Release: 16.04
Codename: xenial
3 ответа
Вместо того, чтобы полностью отключать IPv6, вы можете указать Ubuntu предпочесть подключения IPv4 к IPv6, отредактировав блоки приоритета в/etc/gai.conf
.
Используя это решение:
- Вы можете получить доступ к серверам в Интернете с IPv4 и серверам IPv6 через NAT или маршрутизатор, который понимает только IPv4.
- Используйте IPv4 и IPv6 в локальной сети
- Избегайте ошибок, например, при установке гем-файлов с rubygems.org
Предпочтение IPv4 адресам IPV6
Изменение приоритетов в gai.conf
, каждый раз, когда программа вызывает getaddrinfo()
для разрешения имен хостов Linux предпочтет адреса IPv4. Это очень полезно, когда вы пытаетесь связаться с сервером с адресами IPv4 и IPv6 с машины за NAT или маршрутизатором. Кроме того, вы можете использовать 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
Я отключил IPv6 в свойствах сетевого адаптера Windows, и это позаботилось о проблеме для меня. Мой подсистема Ubuntu начала использовать IPv4.
- Панель управления > Центр управления сетями и общим доступом > Изменить настройки адаптера
или Win + Rncpa.cpl
Войти - На вашем адаптере (например, Ethernet) щелкните правой кнопкой мыши> Свойства
или дважды щелкните> Свойства
или Alt + Enter
или измените настройки этого соединения - Снимите флажок Интернет-протокол версии 6 (TCP/IPv6)
- Хорошо
- Повторите по мере необходимости для других адаптеров, таких как WiFi
Обратите внимание, что это отключит IPv6 для всех Windows (при использовании этого адаптера), а не только для WSL.
Если вы используете 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, а затем создать файл
.wslconfig
в вашем домашнем каталоге Windows со следующим содержимым:
[wsl2]
kernel=C:\\Path\\to\\your\\kernel
Обратите внимание на двойную обратную косую черту. Очевидно, вам нужно будет заменить местозаполнитель выше фактическим путем.