Из- за ошибки в OpenBSD rtadvd мой маршрутизатор иногда отправляет RA с неверным префиксом

prefix 2001:41d0:fe4b:ecf1::/64
prefix 2001:41d0:fe4b:ec42::/64
prefix 2a01:e35:8aea:ac42::/64

Но если я исправлю это так, он только отправляет правильные префиксы (2001:41d0:fe4b:ec42::/64 и prefix 2a01:e35:8aea:ac42::/64) и удаляет адрес из интерфейса, мой ящик с Linux продолжает назначать IPv6 из ошибочного префикса каждый раз, когда он получает RA от маршрутизатора.

15:46:44.138257 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 136) fe80::8621:df60:6d70:8da > ff02::1: [icmp6 sum ok] ICMP6, router advertisement, length 136
    hop limit 64, Flags [none], pref medium, router lifetime 1800s, reachable time 0s, retrans time 0s
      source link-address option (1), length 8 (1): 00:00:24:d1:42:0d
        0x0000:  0000 24d1 420d
      prefix info option (3), length 32 (4): 2a01:e35:8aea:ac42::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
        0x0000:  40c0 0027 8d00 0009 3a80 0000 0000 2a01
        0x0010:  0e35 8aea ac42 0000 0000 0000 0000
      prefix info option (3), length 32 (4): 2001:41d0:fe4b:ec42::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
        0x0000:  40c0 0027 8d00 0009 3a80 0000 0000 2001
        0x0010:  41d0 fe4b ec42 0000 0000 0000 0000
      rdnss option (25), length 24 (3):  lifetime 900s, addr: 2a01:e35:8aea:ac42::10
        0x0000:  0000 0000 0384 2a01 0e35 8aea ac42 0000
        0x0010:  0000 0000 0010
      dnssl option (31), length 24 (3):  lifetime 900s, domain(s): geekwu.org.
        0x0000:  0000 0000 0384 0667 6565 6b77 7503 6f72
        0x0010:  6700 0000 0000
15:46:44.553069 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) :: > ff02::1:ffd1:28d4: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has 2001:41d0:fe4b:ecf1:8581:1b57:b9d1:28d4
      unknown option (14), length 8 (1): 
        0x0000:  1d76 c406 8db8

Вы можете видеть RA только с 2 префиксами, а затем с пакетом neighbor solicitation , который является моей коробкой, проверяющей, что адрес "свободен" (DAD) ... и это так, поскольку этот префикс не используется в этом соединении Ethernet , Поскольку этот адрес вставлен последним, он является адресом по умолчанию для исходящих соединений, но маршрутизатор не может перенаправить его обратно, поскольку он не определен.

Я могу только догадываться, что ядро - или что-то в пользовательском пространстве - по какой-то причине хранит старый RA в кеше и использует его вместо "живого" RA (или, может быть, объединяет их?)

Если так, есть ли способ увидеть это? очистить или изменить этот кеш? Я, вероятно, могу перезагрузить свою коробку, но, ну ... кажется, плохо.

(ядро 4.16.13-1-ARCH)

РЕДАКТИРОВАТЬ:

Я послал RA со scapy для этого префикса с 0 временем жизни, и адрес перестает добавляться для каждого последующего RA.

Welcome to Scapy (unknown.version)
>>> a = IPv6()
>>> a.dst = "ff02::1"
>>> b = ICMPv6ND_RA()
>>> b.display()
>>> c = ICMPv6NDOptSrcLLAddr()
>>> c.lladdr = "00:00:24:d1:42:0d"
>>> d = ICMPv6NDOptMTU()
>>> e = ICMPv6NDOptPrefixInfo()
>>> e.prefixlen = 64
>>> e.prefix = "2001:41d0:fe4b:ecf1::"
>>> e.preferredlifetime=0
>>> e.validlifetime=0
>>> send(a/b/c/d/e)

NetworkManager (1.10.8) работает в этом окне с конфигурацией по умолчанию

1 ответ1

0

Это звучит как ожидаемый результат.

SLAAC позволяет нескольким маршрутизаторам объявлять разные наборы префиксов, поэтому новые RA не делают недействительными предыдущие, а только обновляют их постепенно.

Как только префикс настроен, он остается в течение его "действительного" времени жизни (обновляется каждым новым RA), если RA явно не устанавливает время жизни этого префикса равным нулю. (См. RFC 4862. )

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .