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

1373
neirbowj

Я думаю, что этот вопрос касается взаимодействия между настраиваемым алгоритмом выбора адреса по умолчанию, определенным в 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. 
6

1 ответ на вопрос

2
Sander Steffann

Это кажется странным местом, но в 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 
Это отличный ответ на немного другой вопрос, поскольку этот подход не зависит от типа адреса (статический, DHCPv6, SLAAC, SLAAC + конфиденциальность и т. Д.). Хотя это может быть лучшее, что я могу сделать, я хочу подождать немного дольше, прежде чем принять ваш ответ. neirbowj 11 лет назад 0
@neirbowj Метод, с помощью которого вы получаете свои адреса, на самом деле не имеет значения. Вот как бы вы это сделали. Кстати, вы также можете добавить это в `/ etc / network / interfaces`, чтобы сделать его постоянным. Michael Hampton 11 лет назад 0
Я не говорил, что не смогу сделать это таким образом, но если вы прочитаете мой вопрос, я надеюсь, вы поймете, почему природа и источник адресов очень актуальны. neirbowj 11 лет назад 0
@neirbowj Ваш вопрос ничего не говорит об этом. Возможно, вы забыли добавить его? Michael Hampton 11 лет назад 1
@MichaelHampton: я заявляю это в трех местах: заголовок («Использовать временные адреса ...»), первое предложение, которое заканчивается на «?» (обычный, не конфиденциальность улучшена против временного), и предложение перед «Возможно ли это, и если да, то как?» («потому что он не помечен ... потому что он помечен ...»). neirbowj 11 лет назад 0
@neirbowj И этот ответ прекрасно это охватывает. В чем проблема? Michael Hampton 11 лет назад 0
Адреса, помеченные как временные, используются по умолчанию. Таким образом, вам нужно только установить записи таблицы маршрутизации, чтобы переопределить это значение по умолчанию. Подходит на ваш вопрос, я думаю. Sander Steffann 11 лет назад 0