Использовать временный адрес IPv6 только с удаленными узлами

6

Я думаю, что этот вопрос касается взаимодействия между настраиваемым алгоритмом выбора адреса по умолчанию, определяемым RFC-3484 и временные адреса, определенные RFC-4941 Хотя решение может потребовать третьего вида функциональности. Моя среда - Linux (версия ядра 3.2.0 в Ubuntu 12.04) с утилитой iproute2 (версия ss111117).

Как я могу настроить свой компьютер для использования обычного адреса без расширенной конфиденциальности для подключения к другим узлам с тем же префиксом, но использовать временный адрес для соединений с узлами вне этого префикса?

Например, скажем, что мой компьютер fuzzyи мой файловый сервер bunny, Где-то в Интернете IPv6 есть сайт, который я хочу посетить, nosey.example.com, Вот адреса, назначенные на fuzzy:

neirbowj@fuzzy:~$ ip -6 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2001:db8:d00d:babe:6d3b:96d0:f584:beb3/64 scope global temporary dynamic 
       valid_lft 599342sec preferred_lft 80342sec
    inet6 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7/64 scope global dynamic 
       valid_lft 2591986sec preferred_lft 604786sec
    inet6 fe80::22fc:11ff:fe53:b2e7/64 scope link 
       valid_lft forever preferred_lft forever

bunny имеет статически настроенный адрес с тем же префиксом.

neirbowj@fuzzy:~$ grep bunny /etc/hosts
2001:db8:d00d:babe::1    bunny

nosey.example.com не на этом префиксе.

neirbowj@fuzzy:~$ host -t aaaa nosey.example.com
nosey.example.com has IPv6 address 2001:db8:b00b:1e5::1

Адресные метки на fuzzy установлены по умолчанию.

neirbowj@fuzzy:~$ ip addrlabel
prefix ::1/128 label 0 
prefix ::/96 label 3 
prefix ::ffff:0.0.0.0/96 label 4 
prefix 2001::/32 label 6 
prefix 2001:10::/28 label 7 
prefix 2002::/16 label 2 
prefix fc00::/7 label 5 
prefix ::/0 label 1 

Когда я подключаюсь к bunnyЯ хочу использовать 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7, потому что это так не помечены temporary ". Когда я подключаюсь к nosey.example.comЯ хочу использовать 2001:db8:d00d:babe:6d3b:96d0:f584:beb3 потому что это является помечен " temporary ". Возможно ли это, и если да, то как?

Я уже прочитал Как работает выбор адреса источника IPv6 в Linux , но я не вижу, как какое-либо из правил повлияет на этот выбор, и даже как temporary флаг информирует о выборе адреса вообще.

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

RFC-4941
Section 3.1 Assumptions

[...]

Finally, this document assumes that when a node initiates outgoing
communication, temporary addresses can be given preference over
public addresses when the device is configured to do so.
[ADDR_SELECT] mandates implementations to provide a mechanism, which
allows an application to configure its preference for temporary
addresses over public addresses.  It also allows for an
implementation to prefer temporary addresses by default, so that the
connections initiated by the node can use temporary addresses without
requiring application-specific enablement.  This document also
assumes that an API will exist that allows individual applications to
indicate whether they prefer to use temporary or public addresses and
override the system defaults.
neirbowj
источник

Ответы:

2

Это кажется странным местом, но в Linux вы можете сделать это в таблице маршрутизации.

Скажите, что ваша таблица маршрутизации в настоящее время выглядит так:

# ip -6 route
2001:db8:d00d:babe::/64 dev eth0  proto kernel  metric 256 
default via 2001:db8:d00d:babe::1 dev eth0  metric 1024 

Вы можете указать маршруты, которые переопределяют исходный адрес. В этом случае вы можете сделать:

# ip -6 route add 2001:db8:d00d:babe::/64 \
                  dev eth0 \
                  src 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7 \
                  metric 128

Поскольку этот маршрут имеет более низкую метрику, чем текущая (которая имеет метрику 256), он переопределит ее. Когда вы теперь подключаетесь к bunny по адресу 2001:db8:d00d:babe::1 этот маршрут будет совпадать, и он будет использовать настроенный адрес источника.

Если вы также хотите использовать определенный адрес источника для других подсетей, вы также можете создать маршрут для этого. Например:

# ip -6 route add 2001:db8:d00d::/48 \
                  via 2001:db8:d00d:babe::1 \
                  dev eth0 \
                  src 2001:db8:d00d:babe:22fc:11ff:fe53:b2e7 \
                  metric 128
Sander Steffann
источник
Это отличный ответ на немного другой вопрос, поскольку этот подход не зависит от типа адреса (статический, DHCPv6, SLAAC, SLAAC + конфиденциальность и т. Д.). Хотя это может быть лучшим, что я могу сделать, я хочу подождать немного дольше, прежде чем принять ваш ответ.
neirbowj
@neirbowj Метод, с помощью которого вы получаете свои адреса, на самом деле не имеет значения. Вот как бы вы это сделали. Кстати, вы также можете бросить это в /etc/network/interfaces сделать его постоянным.
Michael Hampton
Я не говорил, что не смогу сделать это таким образом, но если вы прочитаете мой вопрос, я надеюсь, вы поймете, почему природа и источник адресов очень актуальны.
neirbowj
1
@neirbowj Ваш вопрос ничего не говорит об этом. Возможно, вы забыли добавить это?
Michael Hampton
@MichaelHampton: я заявляю это в трех местах: заголовок («Использовать временные адреса ...»), первое предложение, которое заканчивается на «?» (обычный, не конфиденциальность улучшена против временного), и предложение перед «Возможно ли это, и если да, то как?» («потому что он не помечен ... потому что он помечен ...»).
neirbowj