排查网络连接问题:接口配置

诊断 Fuchsia 设备网络连接问题时,请先检查并确保以下各项:

  • 宿主机正在正确枚举所连接的 Fuchsia CDC 设备。
  • 宿主机已配置正确。

主机是否能看到设备?

确定主机的 USB 堆栈是否知道 Fuchsia 设备。如果没有,则没有要配置的网络接口。

例如,Google 的公共 USB 供应商标识符 (VID) 为 0x18d1,所有 Fuchsia USB 设备(CDC 或其他)都使用该标识符。Fuchsia 设备的商品标识符 (PID) 范围为0xa000-0xafff

使用 lsusb 命令确定主机是否检测到任何通过 USB 连接的 Fuchsia 设备,该命令会针对任何连接的设备报告 VID:PID 元组:

lsusb

在输出中查找提及 Google Inc. CDC Ethernet 的条目。

您可能会看到其他结果,这些结果对应于 PID 不在 Fuchsia PID 范围内的其他 Google 产品。

注意事项:PID=0xa025

某些产品配置不会在枚举的 Fuchsia USB 设备中公开 CDC 接口。 仅限 adb 的配置的 PID 为 0xa025。如果您看到 PID 为 0xa025 的 Fuchsia 设备,则表示该设备有意不包含 CDC 接口,因此没有相应的网络接口可供配置。

CDC 接口的命名是否正确?

Fuchsia CDC 网络接口的命名方式与 zx-XXXXXXXXXXXX 类似,实际接口名称表示接口的 MAC 地址。

您必须拥有能够正确检测并命名 Fuchsia CDC 接口的设置。目前,Fuchsia 源代码树包含一个 Puppet 脚本,该脚本可针对支持它的机器运行。运行此脚本需要您使用 NetworkManager、Puppet 和类似 Debian 的 Linux 发行版。如果以上所有情况都适用于您,您可以使用以下命令运行此 Pupptet 脚本:

curl -s 'https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/scripts/puppet/networkmanager-cfg.pp?format=TEXT' | base64 -d | sudo puppet apply

然后,您可以使用以下命令检查接口:

ip -6 --oneline addr | grep 'zx-'

此命令会查找以 zx- 为前缀命名的 IPv6 接口,并输出类似如下内容:

$ ip -6 --oneline addr | grep 'zx-'
7: zx-c863147051da    inet6 fe80::ca63:14ff:fe70:51da/64 <snip>

接口是否已分配 Fuchsia CDC 配置文件?

简而言之,本地 NetworkManager 服务需要使用链路本地 IPv6 地址配置接口,并且不尝试获取 DHCP 租约。该配置存在于 Fuchsia CDC NetworkManager 连接配置文件中。这意味着我们需要确保 CDC 接口正在应用相应配置文件。

使用 nmcli conn show 命令验证是否已分配正确的配置文件:

nmcli conn show

在 Fuchsia-CDC 配置文件行中,检查 CDC 接口:

$ nmcli conn show
NAME         UUID                                  TYPE      DEVICE
...
Fuchsia CDC  25b512f5-70e0-4fd3-9bc2-34432a01bc80  ethernet  zx-c863147051da
...

您可以忽略 UUID 字段,因为它是一个不重要的不透明标识符。

Fuchsia CDC 配置文件使用 IPv6 链路本地地址配置主机端接口,这些地址位于 fe80::/10 网络上。使用以下 ip 命令进行验证:

$ ip -6 --oneline addr | grep 'zx-'
7: zx-c863147051da    inet6 fe80::ca63:14ff:fe70:51da/64 <snip>

其中,地址 fe80::ca63:14ff:fe70:51da 是主机端网络接口的链路本地地址。需要注意的是,它不是所连接的 Fuchsia CDC 设备的地址。