IPv6 адресация, динамический префикс, статическая локальная часть


10

Маршрутизатор в моей сети передает префикс IPv6, назначенный моим провайдером. Этот префикс динамический, но «довольно липкий».

Я хотел бы, чтобы мои машины автоматически выбирали префикс, объявленный в RA, но объединяли его с указанной пользователем локальной частью, а не генерировали ее случайно или на основе MAC-адреса. Есть ли простой способ сделать это?


1
Я не видел ни одной операционной системы, которая позволяла бы вам это делать :(
Сандер Штеффанн

@SanderSteffann Никогда не использовал Linux?
Майкл Хэмптон

1
@ Майкл Я никогда не видел ОС, которая позволяла бы вам настраивать токены IID. Технически ядро ​​может это сделать, но ни одна ОС (как в дистрибутиве) не поддерживает это :(
Сандер Штеффанн

Ответы:


11

Есть два способа сделать это. Один - это легкий путь, а другой - трудный.

Самый простой способ - запустить сервер DHCPv6 в своей сети и назначить адреса хостов каждому устройству самостоятельно. Или позвольте серверу выбрать часть хоста; серверы DHCPv6, которые я видел, сохранят ту же часть хоста, даже если префикс изменится.

ip tokenСложный способ - использовать для установки идентификаторов токенизированных интерфейсов. Это описано как:

Поддержка идентификатора интерфейса с токеном IPv6 используется для назначения хорошо известных адресов узловых узлов узлам, в то же время получая префикс глобальной сети из объявлений маршрутизатора. Основной целью для токенизированных идентификаторов являются серверные платформы, где адреса обычно настраиваются вручную, а не с использованием DHCPv6 или SLAAC. Используя идентифицированные по токену идентификаторы, хосты могут по-прежнему определять свой префикс сети с помощью SLAAC, но с большей готовностью будут автоматически перенумерованы при изменении префикса сети. Токенизированные идентификаторы IPv6 описаны в проекте: <draft-chown-6man-tokenised-ipv6-identifiers-02>.

Причина, по которой это сложный путь, заключается в том, что, хотя Linux включает в себя эту функцию, ни в одном из известных мне дистрибутивов Linux нет поддержки для сохранения такой конфигурации и ее применения во время загрузки, как это делается для адресов, настроенных вручную или через DHCP. Так что это, вероятно, не будет работать очень хорошо для вас, пока какой-то дистрибутив не сделает это. Обратите внимание, что теперь можно настроить токены IPv6 в NetworkManager и systemd-networkd; более свежие ответы содержат конкретные инструкции по настройке.


Наконец, если ваш провайдер периодически меняет ваш префикс, рассмотрите возможность использования уникальных локальных адресов в вашей сети. Таким образом, все ваши устройства всегда будут иметь адрес, который никогда не изменится, с которым они могут общаться друг с другом. Некоторые домашние / SOHO-маршрутизаторы с поддержкой IPv6 (такие как OpenWrt) имеют возможность включить ULA во всей домашней сети; если в доме несколько маршрутизаторов, это следует включить на маршрутизаторе, который подключается к провайдеру.


Проблема, которая фактически вызвала вопрос, была в том, что мой маршрутизатор интернет-провайдеров отправляет RA с коротким временем жизни. Это вызывает большие проблемы с адресами конфиденциальности. OTOH Мне не очень нравится идея раскрытия моего MAC-адреса миру.
plugwash

Статическая локальная часть позволяет избежать проблем с адресами конфиденциальности, не раскрывая мой MAC-адрес, спасибо.
plugwash

Знаете ли вы, как добавить несколько токенов в один интерфейс для установки нескольких «динамических статических» адресов IPv6?
Веди

@wedi Linux поддерживает только один токен на интерфейс. Токены IPv6, вероятно, не являются решением вашей проблемы, какой бы она ни была.
Майкл Хэмптон

6

Майкл сделал очень хорошее резюме, и недавний совет plugwash был лучшим, что я смог найти после нескольких часов поиска решения CentOS 7 / RHEL (также systemd и network manager). После привыкания к nmcli (я в основном все еще использовал ifcfg и ip) - я смог успешно применить его.

Но копать глубже в соответствии с https://developer.gnome.org/NetworkManager/stable/settings-ipv6.html NetworkManager напрямую поддерживает идентификаторы интерфейса с токеном IPv6 как свойство (с версии 1.4, август 2016 г. http://news.softpedia.com/ news / networkmanager-1-4-добавления-поддержки-для-установки-ipv6-tokenized-interface-identifiers-507601.shtml ).

Таким образом, вам не нужно настраивать параметры диспетчера сети IPv6 для игнорирования, но вы должны установить параметры

nmcli connection modify eth0 ipv6.method "auto" # if not already
nmcli connection modify eth0 ipv6.addr-gen-mode "eui64" # use interface token
nmcli connection modify eth0 ipv6.token "::2"

который запишет IPV6_TOKEN=::2в / etc / sysconfig / network-scripts / ifcfg-eth0, чтобы пережить перезагрузку. Чтобы немедленно применить это перезагрузите интерфейс

nmcli connection up id eth0  # restart

3

Спасибо Майклу за подтверждение того, что Linux поддерживает эту функцию, и за указание на команду низкого уровня. Этот ответ описывает, как заставить его работать на практике на рабочем столе Debian Stretch (с помощью systemd и network-manager).

Сначала отредактируйте соединение в диспетчере сети и установите игнорирование настроек IPv6.

Теперь создайте файл /etc/NetworkManager/dispatcher.d/pre-up.d/iptoken. Файл должен принадлежать root, права доступа 755 и со следующим содержимым.

#!/bin/sh
ip token set ::2 dev eth0

Замените eth0 на нужное вам устройство и :: 2 на нужный суффикс.


2

Под Linux вы можете использовать systemd-network.

Просто создайте .networkфайл под /etc/systemd/network/somename.network:

[Match]
Name=e*

[Network]
DHCP=yes
IPv6Token=::1

вместо того, e*чтобы соответствовать всем интерфейсам, начиная с e, вы можете ввести полное имя интерфейса. Это включает DHCP {v4, v6} и использует в ::1качестве суффикса. Вы можете выбрать любой адрес IPv6, но первые 64 бита должны быть установлены на ноль.

После этого включите и запустите systemd-networkd.service.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.