通过 SLAAC 在 OpenBSD 中配置 IPv6 ULA 地址

通过 SLAAC 在 OpenBSD 中配置 IPv6 ULA 地址

我想让我的网络上的设备自动配置 ULA 地址,其前缀为由https://www.unique-local-ipv6.com/在我的网络上,该网络主要仅支持 IPv6。

我的主路由器正在运行 OpenBSD 7.4 并且我正在运行rad具有以下配置:

dns {
  nameserver {
    fdd0:c720:85fa:100::1
  }
}

interface igc1 {
  prefix fdd0:c720:85fa:100::/64
}

interface igc3 {
  prefix fdd0:c720:85fa:100::/64
}

我已经使用额外的 IPv6 ULA 地址设置了主接口,如下所示 (/etc/hostname.igc0):

inet autoconf
inet6 autoconf
inet6 alias fdd0:c720:85fa:100::1 64

我的客户端计算机(也是 OpenBSD 7.4)也设置为使用inet6 autoconf.它在 fdd0:c720:85fa:100::/64 中获取 IPv6 ULA 地址,但在向 fdd0:c720:85fa:100::1 发送邻居请求时从未收到邻居通告:

router# tcpdump -i igc3 ip6
10:02:52.296838 fe80::6af7:28ff:fe64:348d > ff02::1:ff00:1: icmp6: neighbor sol: who has fdd0:c720:85fa:100::1
10:02:53.296831 fe80::6af7:28ff:fe64:348d > ff02::1:ff00:1: icmp6: neighbor sol: who has fdd0:c720:85fa:100::1
10:02:54.296897 fe80::6af7:28ff:fe64:348d > ff02::1:ff00:1: icmp6: neighbor sol: who has fdd0:c720:85fa:100::1
10:02:55.306817 fe80::6af7:28ff:fe64:348d > ff02::1:ff00:1: icmp6: neighbor sol: who has fdd0:c720:85fa:100::1
10:02:56.306761 fe80::6af7:28ff:fe64:348d > ff02::1:ff00:1: icmp6: neighbor sol: who has fdd0:c720:85fa:100::1

fdd0:c720:85fa:100::/64 中的地址当前不可路由。我认为ndp -a证实了这一点(在路由器上运行时):

Neighbor                                Linklayer Address   Netif Expire    S Flags
...
fdd0:c720:85fa:100::1                   a8:b8:e0:01:d0:51    igc0 permanent R l
fdd0:c720:85fa:100:222b:20ff:fef7:a413  (incomplete)         igc0 expired   N 
fdd0:c720:85fa:100:6094:e251:66e6:7bc9  (incomplete)         igc0 expired   N 
fdd0:c720:85fa:100:6754:e5:a200:1d9c    (incomplete)         igc0 expired   N 
fdd0:c720:85fa:100:bfbf:5645:c950:385f  (incomplete)         igc0 expired   N

我相当确信我错过了一些简单的东西,但我不明白是什么。我尝试在两台机器上禁用 pf ,但没有效果。我已经阅读了 slaacd(8)、hostname.if(5)、ifconfig(8)、rad(8) 和 rad.conf(5) 的手册页,但没有找到任何看起来(对我来说)的内容具有相关性。

我的 ISP 返回的来自我的前缀委托的 GUA IPv6 地址在我的所有设备上都能正常工作。我想使用 ULA 进行内部寻址,因为我的 ISP 的前缀委托不是静态的,并且已经更改了两次。

更多详细信息(附加配置文件、dmesg 等)可以在OpenBSD 其他邮件列表存档,因为我也在那里寻求帮助。

我在这里做错了什么?

答案1

(转自我的 OpenBSD 邮件列表回复)

好吧,我想我已经明白了。

我的核心问题是我在 rad.conf 中手动分配前缀,然后为每个接口分配一个地址在相同的前缀中。这造成了某种冲突——我仍然不完全理解其本质。

这是我在 rad.conf(5) 中错过的关键行:

默认情况下,通过检查接口上配置的 IPv6 地址来发现要通告的前缀。

因此,只要我的接口在各自的前缀中分配了两个地址,rad 就可以为这些地址提供服务,而无需任何额外的配置。

这是我的最终 /etc/hostname.igc1:

inet 192.168.1.1 255.255.255.0 NONE
inet6 autoconf
inet6 alias fdd0:c720:85fa:100::1 64

我的最终 /etc/rad.conf:

interface igc1 {
  dns {
    nameserver {
      fdd0:c720:85fa:100::1
    }
  }
}

现在,我网络上的设备将通过 SLAAC 自动分配 GUA 和 ULA 地址。

相关内容