Может ли маршрутизатор Linux автоматически настраивать IPv6, если Radvd работает на том же хосте?

У меня есть маршрутизатор шлюза linux, использующий туннель 6to4 и использующий radvd для трансляции префикса IPv6 в локальной подсети. Radvd может быть настроен на автоматическое получение префикса сети с интерфейса 6to4, однако я не могу найти способ автоматически назначить действительный адрес локальному сетевому интерфейсу (eth0).

Например, если мой интерфейс 6to4 это автоконфигурирование 2002:4185:9dd4::1/16тогда eth0 нужен адрес 2002:4185:9dd4:dead:<whatever>/64 (где 'dead' - локальная подсеть, которую я настроил в radvd.conf). Когда Radvd работает на локальной машине, есть ли способ принудительно настроить linux для автоматической настройки eth0?

4 ответа

Краткий ответ: в системе, которую вы используете radvd на, вы хотите настроить интерфейс, используя тот же метод, который вы используете для настройки radvd; если radvd.conf статически генерируется, то так должен статически генерироваться IPv6-адрес вашего локального интерфейса Ethernet. Но еще не все потеряно; читайте дальше для более подробной информации.

Что вы можете сделать, это использовать небольшой сценарий оболочки для настройки обоих. Скажем на минуту, что у вас есть динамически назначаемый глобальный адрес IPv4, и это единственный адрес IPv4 в вашем интерфейсе; Вы можете использовать следующий фрагмент сценария оболочки для получения префикса IPv6 /48 (примечание: код адаптирован из ARIN:

IPV4=$(ip addr ls eth0 | grep 'inet ' | awk '{ print $2 }' | cut -f1 -d/)
PARTS=`echo $IPV4 | tr . ' '`
PREFIX48=`printf "2002:%02x%02x:%02x%02x" $PARTS`

Теперь у вас есть префикс / 48; Получить префикс /64 достаточно просто, так как вы можете просто добавить его к $PREFIX48 переменная.

Теперь все, что вам осталось бы сделать, это написать скрипт, который записывает конфигурацию сетевого интерфейса и конфигурацию radvd (предположительно, из шаблона для каждого из них) и заставить этот сценарий запускаться раньше, чем ваша конфигурация сети. Я не буду включать этот код здесь, так как я не знаю, какой дистрибутив вы используете, и он отличается в зависимости от этого.

Надеюсь это поможет.

Какой у тебя роутер работает? Если это полноценный дистрибутив, такой как Gentoo, у OpenRC есть /etc/conf.d/net:6to4_suffix и если #357929 будет исправлено так, как было предложено, у Debian будет /etc/network/interfaces:6to4subnet настройка тоже.

В противном случае я бы просто установил адрес вручную. Сценарий на моем маршрутизаторе содержит что-то вроде этого:

IDEV = br0
ODEV = VLAN2
WANIP = `ip -4 addr show dev" $ ODEV "| awk '/ inet / {print $ 2}' | cut -d / -f1`
V6PREFIX = `printf '2002:% 02x% 02x:% 02x% 02x' $ {WANIP //./}`
V6NET = 16
GW = 192.88.99.1

ip tunnel добавить режим 6to4 сидеть удаленно любой локальный "$IP" ttl 255 dev "$ODEV"
ip link set 6to4 up
ip addr add "$V6PREFIX::1/$V6NET" dev 6to4
ip addr add "$V6PREFIX:1::1/$((V6NET+48))" dev "$IDEV"
IP-маршрут добавить 2000::/3 через "::$GW" dev 6to4 метрика 1

Я думаю, ты хочешь $V6PREFIX:dead::1/$((V6NET+48)) или что-то типа того.

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

Если ваш MAC-адрес или префикс регулярно меняются, мне интересно знать, что вы делаете.

Просто используйте следующую конфигурацию в файле /etc/network/interfaces на хосте, на котором работает Radvd.

      auto eth0
iface eth0 inet6 auto

«авто» здесь означает использование SLAAC для интерфейса eth0, который будет запрашивать конфигурацию IPv6 от Radvd так же, как и другие клиенты.

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