IPv6 (Русский) - ArchWiki

# IPv6 (Русский)

Ссылки по теме

- IPv6 tunnel broker setup

По умолчанию в Arch Linux включена поддержка IPv6. Если вы ищете информацию о туннелировании IPv6 через брокера, смотрите IPv6 tunnel broker setup.

## Privacy Extensions

В этом разделе описано, как включить Privacy Extensions для stateless-автонастройки адресов IPv6 в соответствии с RFC 4941.

Добавьте следующие строки в `/etc/sysctl.d/40-ipv6.conf`:

    # Enable IPv6 Privacy Extensions
    net.ipv6.conf.all.use_tempaddr = 2
    net.ipv6.conf.default.use_tempaddr = 2
    net.ipv6.conf.nic0.use_tempaddr = 2
    ...
    net.ipv6.conf.nicN.use_tempaddr = 2

Где `nic0`...`nicN` — имена ваших сетевых интерфейсов (параметры `all.use_tempaddr` и `default.use_tempaddr` не будут применены к сетевым интерфейсам, которые уже определены в системе на момент выполнения файла настроек sysctl).

После перезагрузки Privacy Extensions будут включены, а сетевым интерфейсам будут присваиваться дополнительные временные адреса IPv6.

### dhcpcd

С версии dhcpcd 6.4.0 добавлена опция `slaac private`, которая включает функцию присвоения стабильных частных адресов вместо адресов, основанных на MAC-адресе интерфейса, реализуя RFC 7217 (коммит). Дополнительная настройка не требуется, если, конечно, вы не хотите изменять адрес IPv6 при каждом новом подключении к сети.

### NetworkManager

NetworkManager не учитывает настройки, размещенные в `/etc/sysctl.d/40-ipv6.conf`. Вы можете убедиться в этом, выполнив `$ ip -6 addr show имя_интерфейса` после перезагрузки: вы увидите, что кроме обычного адреса временный адрес `scope global temporary` не отображается.

Как это исправить смотрите на странице NetworkManager#Enable IPv6 Privacy Extensions.

Обратите внимание: Может показаться, что временный адрес IPv6, созданный при включении Privacy Extensions, никогда не обновляется (он не переходит в статус `deprecated` после истечения времени жизни `valid_lft`). На самом деле это не совсем так: через больший промежуток времени адрес рано или поздно изменится.

## Сетевое обнаружение

Пинг по мультивещательному адресу `ff02::1` заставит все хосты в локальной сети ответить. При этом должен быть указан конкретный сетевой интерфейс:

    $ ping6 ff02::1%eth0

Аналогично, если сделать пинг по адресу `ff02::2`, то вам ответят только маршрутизаторы, которые присутствуют в локальной сети.

Если вы добавите опцию `-I your-global-ipv6` в пинг-запрос, локальные хосты ответят с использованием локальных же адресов. При этом вы можете не указывать сетевой интерфейс:

    $ ping6 -I 2001:4f8:fff6::21 ff02::1

## Статический адрес

Иногда использование статического адреса может быть применено в качестве одной из мер обеспечения безопасности. Например, если ваш локальный маршрутизатор использует сетевое обнаружение или radvd (RFC 2461), вашему интерфейсу будет автоматически присвоен адрес, который содержит часть MAC-адреса сетевого интерфейса (используя stateless-автонастройку IPv6). Это может быть не слишком хорошо для безопасности, так как позволяет без труда отслеживать систему даже если часть IPv6-адреса сменилась.

Чтобы присвоить статический IP-адрес при помощи netctl, используйте шаблон профиля `/etc/netctl/examples/ethernet-static`. Следующие строки особенно важны:

    # For IPv6 static address configuration
    IP6=static
    Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96')
    Routes6=('abcd::1234')
    Gateway6='1234:0:123::abcd'

## IPv6 и Comcast

`dhcpcd -4` и `dhcpcd -6` работают с Motorola SURFBoard 6141 и Realtek RTL8168d/8111d, но не одновременно для каждого интерфейса. Запуск с ключом `-6` не станет работать, если клиент уже был запущен с опцией `-4`, даже после сброса сетевого интерфейса. И, когда это произойдет, интерфейсу будет присвоен адрес с маской /128. Используйте следующие команды:

    dhclient -4 enp3s0
    dhclient -P -v enp3s0

Опция `-P` получает аренду только префикса IPv6. С опцией `-v` содержимое `/var/lib/dhclient/dhclient6.leases` будет выведено в стандартный поток вывода:

    Bound to *:546
    Listening on Socket/enp3s0
    Sending on   Socket/enp3s0
    PRC: Confirming active lease (INIT-REBOOT).
    XMT: Forming Rebind, 0 ms elapsed.
    XMT:  X-- IA_PD a1:b2:cd:e2
    XMT:  | X-- Requested renew  +3600
    XMT:  | X-- Requested rebind +5400
    XMT:  | | X-- IAPREFIX 1234:5:6700:890::/64

IAPREFIX является необходимым значением. Подставьте `1` перед слэшем, чтобы адрес стал корректным:

    ip -6 addr add 1234:5:6700:890::1/64 dev enp3s0

## Отключение IPv6

Обратите внимание: Сборка ядра Linux в Arch поддерживает IPv6 напрямую, поэтому вы не можете отключить модуль, просто добавив его в черный список.

Эта статья или раздел нуждается в расширении

Причина: Добавить объяснение, зачем может понадобиться отключение IPv6 (например, из-за сетевых экранов или некачественных DNS). (обсуждение: Talk:IPv6 (Русский)#)

### Отключение функциональности

Добавление опции `ipv6.disable=1` в параметрах ядра отключает весь стек IPv6, что в большинстве случаев помогает добиться желаемого результата. Смотрите параметры ядра для получения дополнительной информации.

Добавив вместо этого `ipv6.disable_ipv6=1`, вы оставите стек IPv6 работающим, но при этом адреса IPv6 просто не будут присваиваться сетевым интерфейсам.

Также вы можете отключить присвоение адреса IPv6 конкретным сетевым интерфейсам, добавив следующие строки в файл настроек sysctl `/etc/sysctl.d/40-ipv6.conf`:

    # Disable IPv6
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.nic0.disable_ipv6 = 1
    ...
    net.ipv6.conf.nicN.disable_ipv6 = 1

Вы должны явно перечислить здесь все сетевые интерфейсы, для которых требуется отключить IPv6, так как опция `all.disable_ipv6` не будет применена к сетевым интерфейсам, которые уже включены на момент выполнения инструкций из файла настроек.

Обратите также внимание, что при отключении IPv6 таким образом, вы должны закомментировать все хосты IPv6 в вашем файле `/etc/hosts`:

    #<ip-address> <hostname.domain.org> <hostname>
    127.0.0.1 localhost.localdomain localhost
    #::1 localhost.localdomain localhost

В противном случае могут появляться ошибки подключения, если при определении адреса произошло разрешение на адрес IPv6, который недоступен.

### Другие программы

Отключение IPv6 в ядре не предотвращает другие программы от попытки использования версии IPv6. В большинстве случаев это не приводит к проблемам, однако, если они все-таки появляются, вам остается лишь искать в man-страницах или на просторах сети способ отключить эту функциональность.

#### dhcpcd

Например, dhcpcd будет продолжать пытаться запрашивать настройки сети у маршрутизаторов IPv6 (т. н. Router solicitation). Чтобы отключить это, добавьте следующие строки в `/etc/dhcpcd.conf`, как указано в man-странице `dhcpcd.conf (5)`:

    noipv6rs
    noipv6

#### NetworkManager

Эта статья или раздел нуждаются в улучшении грамматики, форматирования или стиля.

Причина: Нужен способ отключения без графического интерфейса. (обсуждение: Talk:IPv6 (Русский)#)

Чтобы отключить IPv6 в NetworkManager, вызовите контекстное меню значка статуса сети и перейдите в Edit Connections > Wired > Network name > Edit > IPv6 Settings > Method, затем выберите Method как Ignore/Disabled.

#### ntpd

Следуя совету из раздела Systemd#Drop-in snippets, измените способ запуска `ntpd.service`:

    # systemctl edit ntpd.service

Это создаст drop-in сниппет, который будет запускаться вместо стандартного `ntpd.service`. Флаг `-4` отключает использование IPv6 демоном ntp. Поместите следующее в drop-in сниппет:

    [Service]
    ExecStart=
    ExecStart=/usr/bin/ntpd -4 -g -u ntp:ntp

Здесь сначала очищается значение `ExecStart`, а затем устанавливается новая команда.

## Смотрите также

- IPv6 — документация на kernel.org
- IPv6 temporary addresses — временные адреса и расширения приватности
- IPv6 prefixes — о типах префиксов
- net.ipv6 options — настройка параметров ядра

Categories:

- Networking (Русский)
- Русский