是否可以使用 Route Advertisement *without* default-route 进行 SLAAC?

网络工程 IPv6
2022-02-08 19:32:37

我有一个带有 IPv6-ULA 网络的路由器。如果这很重要,它正在运行带有 Systemd-networkd 的 Linux。

现在我想在一个网络中自动配置客户端,以便它们在 ULA 前缀之一中有一个地址。我在那个局域网上有这样的配置:

[Network]
Description=My IPv6 local-only LAN, no internet access here!
VLAN=myvlan
LinkLocalAddressing=ipv6
LLDP=no
EmitLLDP=no
IPv6AcceptRA=no
IPv6SendRA=yes

[Address]
# For IPv4 local-only connectivity
Address=10.1.2.1/24

[IPv6SendRA]
EmitDNS=no
EmitDomains=no

[IPv6Prefix]
# Prefix 1337 from my random ULA prefix announced here
Prefix=fd58:22a0:d6b5:1337::/64

它运行良好,除了一件事......客户端在链接本地地址上设置了默认路由。😕

所以,在客户身上,我看到了:

# ip -6 route
[...]
fd58:22a0:d6b5:1337::/64 dev wlp2s0 proto kernel metric 256 expires 2591901sec pref medium
fe80::/64 dev wlp2s0 proto kernel metric 256 pref medium
default via fe80::36e6:d7ff:fe1b:48fe dev wlp2s0 proto ra metric 1024 expires 1701sec pref medium

最后一行是我没想到的,它破坏了一些东西,因为这些主机现在认为他们可以通过这个链接到达整个 IPv6 互联网,但他们不能。

在我开始研究特定于 Systemd 的事情之前,更笼统地说,这是我的主要问题:根据 IPv6 规范,是否甚至可以在没有默认路由的情况下进行 Route-Advertisement?

在 Wireshark 中,我将 Route-Announces 与我的 ISP 路由器发送给客户端的那些(应该添加默认路由)进行了比较,我只注意到托管标志的差异(因为它也支持 DHCPv6)和一些 Prf - 优先级由 Systemd 设置为高而不是中。这让我相信客户在这里隐式设置了默认路由。没有全局地址,只有一个 ULA,这听起来不像是您想要隐式执行的操作,尤其是在多宿主场景中(一个支持 Internet 的网络,一个仅限私有网络)。

1个回答

我不确定 systemD(或 netplan)如何处理这个问题。radvd支持设置默认生命周期值:

   AdvDefaultLifetime seconds

          The lifetime associated with the default router in units of sec-
          onds.  The maximum value corresponds to 18.2 hours.  A  lifetime
          of  0  indicates  that  the  router  is not a default router and
          should not appear on the default router list.  The router  life-
          time  applies  only  to  the  router's  usefulness  as a default
          router; it does not apply to information contained in other mes-
          sage fields or options.  Options that need time limits for their
          information include their own lifetime fields.

          Must be either zero or between MaxRtrAdvInterval and  9000  sec-
          onds.

          Default: 3 * MaxRtrAdvInterval (Minimum 1 second).