Назад | Перейти на главную страницу

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

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

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

Краткий ответ: в системе, в которой вы работаете 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 add 6to4 mode sit remote any local "$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 route add 2000::/3 via "::$GW" dev 6to4 metric 1

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

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

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