Linux가 RA를 캐싱하고 있나요?

Linux가 RA를 캐싱하고 있나요?

때문에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::/64prefix 2a01:e35:8aea:ac42::/64) 만 전송되고주소 삭제해인터페이스에서 내 Linux 상자는 라우터에서 RA를 받을 때마다 잘못된 접두사에서 IPv6을 계속 할당합니다.

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

2개의 접두사만 있는 RA를 볼 수 있으며, neighbor solicitation주소가 "무료"(DAD)인지 확인하는 내 상자인 패킷을 볼 수 있습니다. 그리고 이 접두사는 이 이더넷 링크에서 사용되지 않기 때문에 그렇습니다. 이 주소는 마지막으로 삽입된 주소이므로 나가는 연결의 기본 주소이지만 정의되지 않았기 때문에 라우터는 이 주소를 다시 라우팅할 수 없습니다.

나는 커널(또는 사용자 영역의 무언가)이 어떤 이유로든 이전 RA를 캐시에 유지하고 "라이브" RA 대신 이를 사용하고 있다고 추측할 수 있습니다(또는 병합할 수도 있습니까?)

그렇다면 볼 수 있는 방법이 없을까요? 이 캐시를 플러시하거나 변경하려면? 아마도 상자를 다시 만들 수도 있겠지만, 음... 좋지 않은 것 같습니다.

(커널 4.16.13-1-ARCH)

편집하다:

이 접두사에 대해 수명이 0인 scapy가 포함된 RA를 보냈으며 이후의 각 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

이는 예상된 결과처럼 들립니다.

SLAAC를 사용하면 여러 라우터가 서로 다른 접두사 세트를 광고할 수 있으므로 새로운 RA가하지 마라이전 항목을 무효화하고 점진적으로만 업데이트하세요.

접두사가 구성되면 RA가 아닌 한 "유효한" 수명(새 RA마다 새로 고침) 동안 유지됩니다.명시적으로해당 접두사의 수명을 0으로 설정합니다. (보다RFC 4862.)

관련 정보