我在一个简单的家庭设置中拥有几台本地计算机,所有接口都配置了 systemd-networkd(systemd 版本 252),全部在 debian bookworm(12.7)中运行。
每台计算机都有一个 wifi 加密狗来连接到本地网络,并且内置有 wifi 或以太网来连接到 dsl 路由器(非本地 wifi 网络的接入点)。
我希望本地网络专门使用 ipv6 链路本地寻址,而不通过 dsl 路由器。
设置非本地网络很容易,并使用 systemd dhcp 设施和 wpa-supplicant-nl80211@接口.service。
有人能建议如何编写本地.network 文件吗?这样一台本地机器与另一台机器的对话就可以通过 ibss 网络进行简单的点对点连接。
编写一个空的 .network 文件,该文件仅对
[Match]
接口进行 -es 操作(如果接口尚未管理,则导致 networkd 将其启动),而不执行任何其他操作。所有广播接口自动具有 IPv6 链路本地地址,因此不需要地址配置;并且由于套接字 API 已经要求您在向链路本地地址发送数据包时指定输出接口(无论如何在 Linux 上),因此不需要路由配置。
但需要指出的是:这里实际上并不需要使用 IPv6 链路本地地址。同一子网 IP 通信在定义上已经是链路本地的,并且永远不会通过路由器,只是因为其性质是“同一子网”。
换句话说,只要两个主机的(连接)接口配置了同一子网内的地址,它们就会自动获得彼此的“本地子网”路由 - 这些路由更具体,因此比“通过 DSL 的默认网关”路由具有更高的优先级 - 并且这些 IP 地址之间的所有通信将自然使用该直接连接。
这就是 Linux 上 IPv6 链路本地地址的实现方式,但它同样适用于任何 IP 版本和任何地址范围。因此,您可以通过在两台机器上配置例如公共
Address=192.168.5.x/24
(IPv4 私有)或(IPv6 ULA)来实现相同的目标(通过专用链路进行直接通信)。Address=fd01::xxx/64
运行
ip route get 192.168.5.y [fibmatch]
后将显示对等方的地址通过专用接口路由。此方法可能比尝试使用 IPv6 链路本地地址引起的问题更少(因为仍有程序无法解析它们或丢失区域索引字段)。