Как отключить 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 локально.

  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

Я отключил IPv6 в свойствах сетевого адаптера Windows, и это позаботилось о проблеме для меня. Мой подсистема Ubuntu начала использовать IPv4.

  1. Панель управления > Центр управления сетями и общим доступом > Изменить настройки адаптера
    или Win + R ncpa.cpl Войти
  2. На вашем адаптере (например, Ethernet) щелкните правой кнопкой мыши> Свойства
    или дважды щелкните> Свойства
    или Alt + Enter
    или измените настройки этого соединения
  3. Снимите флажок Интернет-протокол версии 6 (TCP/IPv6)
  4. Хорошо
  5. Повторите по мере необходимости для других адаптеров, таких как 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

Обратите внимание на двойную обратную косую черту. Очевидно, вам нужно будет заменить местозаполнитель выше фактическим путем.

Другие вопросы по тегам