Apakah Linux caching RAS?


0

Disebabkan oleh sebuah bug di rtadvd OpenBSD , router saya terkadang mengirim RA dengan awalan yang salah

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

Tetapi jika saya memperbaikinya maka itu hanya mengirimkan awalan yang benar ( 2001:41d0:fe4b:ec42::/64 dan prefix 2a01:e35:8aea:ac42::/64 ), dan hapus alamatnya dari antarmuka, kotak Linux saya terus menetapkan IPv6 dari awalan yang keliru setiap kali mendapat RA dari router.

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

Anda dapat melihat RA dengan hanya 2 awalan, dan kemudian neighbor solicitation paket, yang merupakan kotak saya memeriksa alamatnya adalah "bebas" (DAD) ... dan itu, karena awalan ini tidak digunakan pada tautan ethernet ini. Karena alamat ini adalah yang terakhir dimasukkan, itu adalah alamat default untuk koneksi keluar, tetapi router tidak dapat merutekannya kembali, karena tidak ditentukan.

Saya hanya bisa menebak kernel - atau sesuatu di userland - menyimpan RA lama dalam cache, untuk alasan apa pun, dan menggunakannya sebagai ganti RA "live" (atau mungkin menggabungkannya?)

Jika demikian, apakah ada cara untuk melihatnya? untuk menyiram atau mengubah cache ini? Saya mungkin bisa rebbot kotak saya, tapi, well ... tampaknya buruk.

(kernel 4.16.13-1-ARCH)

EDIT:

Saya mengirim RA dengan scapy untuk awalan ini, dengan 0 seumur hidup, dan alamat berhenti beeing ditambahkan untuk setiap RA berikutnya.

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) berjalan pada kotak ini, dengan konfigurasi default


Apa klien SLAAC yang Anda gunakan - dhcpcd, NetworkManager, networkd, atau kernel itu sendiri?
grawity

Sudahkah Anda mencoba menarik awalan secara eksplisit (beriklan dengan 0 yang valid, lebih disukai 0, dll.)?
grawity

NetworkManager sedang berjalan, tapi saya tidak tahu apakah itu klien SLAAC. mengirim penarikan RA menghilangkan alamat untuk selamanya
Bastien Durel

Jawaban:


0

Ini terdengar seperti hasil yang diharapkan.

SLAAC memungkinkan beberapa router untuk mengiklankan berbagai set awalan, oleh karena itu RA baru tidak membatalkan yang sebelumnya, hanya memperbaruinya secara bertahap.

Setelah awalan dikonfigurasikan, ia akan tetap selama masa hidup "valid" (disegarkan oleh setiap RA baru), kecuali jika RA secara eksplisit menetapkan masa hidup awalan itu menjadi nol. (Lihat RFC 4862 .)


bahkan jika Anda menghapus alamat yang ditugaskan?
Bastien Durel

RFC mengatakan "Untuk setiap opsi Informasi Awalan dalam Iklan Router:" tidak "Untuk setiap opsi Informasi Awalan dalam Iklan Router yang pernah kami terima"
Bastien Durel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.