我目前正在调查一个奇怪的网络问题。
考虑以下 IPv6 路由器通告(注意前缀生命周期,分别为 5400 和 2700。):
$ rdisc6 -1 wlan0
Soliciting ff02::2 (ff02::2) on wlan0...
Hop limit : 64 ( 0x40)
Stateful address conf. : Yes
Stateful other conf. : Yes
Mobile home agent : No
Router preference : medium
Neighbor discovery proxy : No
Router lifetime : 1800 (0x00000708) seconds
Reachable time : 3600000 (0x0036ee80) milliseconds
Retransmit time : unspecified (0x00000000)
Recursive DNS server : 2a02:####:####:####:f2af:85ff:fe11:70d
DNS server lifetime : 300 (0x0000012c) seconds
Prefix : 2a02:####:####:####::/64
On-link : Yes
Autonomous address conf.: Yes
Valid time : 5400 (0x00001518) seconds
Pref. time : 2700 (0x00000a8c) seconds
Route : 2a02:####:####:####::/62
Route preference : medium
Route lifetime : 5400 (0x00001518) seconds
Route : ::/0
Route preference : medium
Route lifetime : 1800 (0x00000708) seconds
Source link-layer address: ##:##:##:##:##:##
from fe80::f2af:85ff:fe11:70d
我观察到,某个特定地址报告的生命周期有时会略有偏差更高比路由器通告中的值。
inet6 2a02:####:####:####:2f89:f9d2:504f:595d/64 (...)
valid_lft 5401sec preferred_lft 2701sec
(这个输出是手工制作的。由于我最终试图解决的网络问题,我现在无法获得实时捕获,但它代表了生命周期的方式更高一秒左右比 RA 值。)
为什么会这样呢?
我目前正在考虑这是否是 Debian (12) 中使用的网络堆栈中可能存在的错误,因为我还观察到以下情况:
这是一个两个前缀生命周期都设置为 0 的路由器通告,据我了解,这不是一个错误,但路由器故意尝试使该前缀无效。
$ rdisc6 -1 wlan0
Soliciting ff02::2 (ff02::2) on wlan0...
Hop limit : 64 ( 0x40)
Stateful address conf. : Yes
Stateful other conf. : Yes
Mobile home agent : No
Router preference : medium
Neighbor discovery proxy : No
Router lifetime : 1800 (0x00000708) seconds
Reachable time : 3600000 (0x0036ee80) milliseconds
Retransmit time : unspecified (0x00000000)
Recursive DNS server : 2a02:####:####:####:f2af:85ff:fe11:70d
DNS server lifetime : 300 (0x0000012c) seconds
Prefix : 2a02:####:####:####::/64
On-link : Yes
Autonomous address conf.: Yes
Valid time : 0 (0x00000000) seconds
Pref. time : 0 (0x00000000) seconds
Route : ::/0
Route preference : medium
Route lifetime : 1800 (0x00000708) seconds
Source link-layer address: ##:##:##:##:##:##
from fe80::f2af:85ff:fe11:70d
在这种情况下,preferred_lft
报告者ip address
还变化 1 秒(而valid_lft
实时似乎通常从 5400 秒开始下降)。实际上,当我发送垃圾邮件时ip address
,preferred_lft
会定期在 1 和 0 之间切换。
此外,ip monitor
大约每隔几秒输出一次:
2: wlan0 inet6 2a02:####:####:####:2f89:f9d2:504f:595d/64 scope global dynamic noprefixroute
valid_lft 4916sec preferred_lft 1sec
2: wlan0 inet6 2a02:####:####:####:2f89:f9d2:504f:595d/64 scope global deprecated dynamic noprefixroute
valid_lft 4915sec preferred_lft 0sec
2: wlan0 inet6 2a02:####:####:####:2f89:f9d2:504f:595d/64 scope global dynamic noprefixroute
valid_lft 4913sec preferred_lft 1sec
2: wlan0 inet6 2a02:####:####:####:2f89:f9d2:504f:595d/64 scope global deprecated dynamic noprefixroute
valid_lft 4912sec preferred_lft 0sec
(and so on)
这也会导致严重的/var/log/syslog
垃圾邮件:
2023-12-19T19:22:15.143458+01:00 ... avahi-daemon[458]: Registering new address record for 2a02:####:####:####:2f89:f9d2:504f:595d on wlan0.*.
2023-12-19T19:22:16.181261+01:00 ... avahi-daemon[458]: Withdrawing address record for 2a02:####:####:####:2f89:f9d2:504f:595d on wlan0.
2023-12-19T19:22:18.011506+01:00 ... avahi-daemon[458]: Registering new address record for 2a02:####:####:####:2f89:f9d2:504f:595d on wlan0.*.
2023-12-19T19:22:19.240632+01:00 ... avahi-daemon[458]: Withdrawing address record for 2a02:####:####:####:2f89:f9d2:504f:595d on wlan0.
(and so on)
这种行为肯定是不受欢迎的。在路由器通告中向首选生命周期任意添加一个小值可以部分解释这一点。
我能够在 Debian 12 和 Raspberry Pi 操作系统上观察到这一点。
我曾是不是能够在 Arch Linux 和 Lubuntu 上观察到这一点。
在 3 种不同的设备上进行了测试。
然而,测试可能并不能得出结论因为我无法控制我的路由器,并且它并不总是发送相同的路由器通告,而且我没有隔离的测试环境。