> For the complete documentation index, see [llms.txt](https://docs.console.zenlayer.com/welcome/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.console.zenlayer.com/welcome/cn/elastic-compute/networking/network-interface.md).

# 网卡

\*\*虚拟网卡（vNIC）\*\*是将 Zenlayer 弹性算力（ZEC）实例接入其 VPC 的网络接口。每个 vNIC 都以宿主机物理网卡上的一个 [**SR-IOV**](https://en.wikipedia.org/wiki/Single-root_input/output_virtualization) \*\*虚拟功能（VF）\*\*形式实现——客户机操作系统直接拥有一个硬件隔离的 PCIe 功能，收发数据包无需经过 Hypervisor 中的软件路径。平台负责控制平面（绑定/解绑、MAC 分配、QoS、流量镜像），数据平面则以硬件速度运行。

每个 vNIC 在创建时即绑定到唯一一个子网，并通过该子网绑定到某个区域内的唯一一个 VPC。该归属关系在 vNIC 的整个生命周期内固定不变。

***

## vNIC 如何映射到宿主机

![vNIC 是宿主机网卡上的一个 SR-IOV 虚拟功能](/files/OC2f6aS1AlJfvHU4hvl8)

* 宿主机的物理网卡对外呈现为一个**物理功能（PF）以及一组虚拟功能（VF）**。
* 当您将 vNIC 绑定到实例时，平台会把其中一个 VF 交给客户机。这个 VF 就是该 vNIC。
* 数据包直接在客户机驱动与 VF 的硬件队列之间传递——Hypervisor 不在快速路径上复制数据。
* PF 仅归宿主机私有使用。它负责实施各 VF 的 QoS、应用 MAC 与 VLAN 策略，并控制流量镜像。

正是这一底层实现决定了实例规格会限制 vNIC 数量、队列深度和每个 vNIC 的 IP 数量（参见下文〈不同实例规格的 vNIC 容量〉）——每个 vNIC 都会占用宿主机网卡上的一个 VF 和一组队列，而这两者的数量都是有限的。

***

## 主网卡与弹性网卡

ZEC 区分两类 vNIC。二者共用同一数据平面，区别在于生命周期。

![主网卡与实例共存亡；弹性网卡可在其所属子网内迁移](/files/njapJyLp3xGocLfOqVOB)

| 属性         | 主网卡                 | 弹性网卡                     |
| ---------- | ------------------- | ------------------------ |
| 随实例一同创建？   | 是，自动创建。             | 否——单独创建，按需绑定。            |
| 可以从实例解绑？   | 不可以。主网卡在实例存续期间一直存在。 | 可以——可解绑后重新绑定到同一子网内的其他实例。 |
| 归属于唯一一个子网？ | 是，即实例所在的子网。         | 是，即创建 vNIC 时选定的子网。       |
| 承载实例的默认路由？ | 是。                  | 通常不承载——它是提供额外连通性的辅助网卡。   |

### 主网卡

创建实例时，ZEC 会在实例所在子网中创建并绑定一个主网卡。它持有实例的主私有 IPv4 地址、MAC 地址，以及实例的主 IPv6 地址（前提是子网已开启 IPv6 且实例已启用 IPv6）。主网卡不能解绑，会随实例一并释放。

### 弹性网卡

除主网卡之外，您还可以单独创建**弹性网卡**，并作为独立步骤将其绑定到实例。弹性网卡拥有自己的私有 IP、自己的 MAC 地址、自己的安全身份，以及绑定到这些私有 IP 上的 EIP。解绑再重新绑定，即可把这整套身份从一台实例迁移到另一台实例。

弹性网卡可以解绑后重新绑定到**同一子网内**的其他实例，但不能跨子网、跨 VPC、跨可用区或跨区域迁移。

***

## 弹性网卡使用场景

当网络身份（私有 IP、绑定的 EIP、安全组边界）需要**比单台实例存活得更久**，或者单台实例需要**同时接入多个网络**时，弹性网卡的价值就体现出来了。下面三种模式覆盖了绝大多数实际部署。

![弹性网卡的三种模式：管理平面分离、多子网网络设备、IP 可迁移的工作节点](/files/3YOkESDqXZ6u5YiAL8uD)

### 场景 1 — 管理平面与数据平面分离

\*\*您要做的事：\*\*一台实例同时承载两类流量——运维/管理流量（SSH、指标采集、备份）和高速率的业务流量——而您希望把它们放在不同的网卡上，以便独立施加安全组、QoS 和监控策略。

**部署方式：**

1. 位于业务子网中的主网卡承载业务流量，并对服务端口配置较为宽松的安全组。
2. 在专用的管理子网中绑定一块弹性网卡，并配置严格的安全组——例如仅放通跳板机 CIDR。
3. 在操作系统层面将出向管理流量路由到管理网卡。

\*\*为什么用两块 vNIC，而不是在一块 vNIC 上配两个 IP：\*\*每块 vNIC 都是独立的安全、QoS 与审计边界——拥有各自的安全组、各自的链路状态监控数据和各自的 MAC 地址。仅靠私有 IP 区分做不到这一点。

### 场景 2 — 多子网网络设备

\*\*您要做的事：\*\*防火墙、反向代理、NAT 辅助节点或 VPN 集中器需要横跨两个子网，并在它们之间转发数据包。

**部署方式：**

1. 网络设备需要接入的每个子网各绑定一块弹性网卡——一块位于非信任/DMZ 子网，一块位于信任/内部子网。
2. 关闭该设备各 vNIC 的源/目的地址检查，使实例能够转发源地址或目的地址不属于自身的数据包。
3. 在客户机操作系统中配置各网卡之间的路由。

\*\*权衡：\*\*vNIC 数量受实例规格限制（参见下文〈不同实例规格的 vNIC 容量〉）。需要多条链路的网络设备会占用大量 vNIC 槽位。

### 场景 3 — IP 可迁移的工作节点

\*\*您要做的事：\*\*某个工作进程持有一个被外部系统引用的私有 IP——用于白名单、会话保持或节点绑定式许可授权。该进程可能在维护期间被调度到另一台实例上，但其私有 IP 不能变化。

**部署方式：**

1. 把工作节点的"身份"IP 设为一块弹性网卡的主 IP，而不是设在实例主网卡上。
2. 迁移时，将该弹性网卡从原实例解绑并绑定到替换实例；工作节点会以相同的私有 IP 重新上线。

\*\*为什么只能用 vNIC 实现：\*\*主网卡的私有 IP 无法在实例之间迁移。弹性网卡是让*私有* IP 在实例更替后保持不变的唯一方式。

***

## 私有 IP 地址

![vNIC 上的主私有 IP 与辅助私有 IP；EIP 与私有 IP 一一绑定](/files/xhIMNed7pT9JO7XF4wml)

### 主私有 IPv4

每块 vNIC 有且仅有一个主私有 IPv4 地址。该地址在创建 vNIC 时分配，可以由平台从子网 CIDR 中自动选取，也可以由您指定（前提是该地址未被占用）。主私有 IPv4 不能从 vNIC 上移除。

### 辅助私有 IPv4

您可以为一块 vNIC 分配额外的私有 IPv4 地址，上限见每个 vNIC 的配额（参见下文〈不同实例规格的 vNIC 容量〉）。辅助 IP 适用于以下情形：

* 在单台实例上承载多个服务，每个服务由各自的 IP 标识。
* 为同一块 vNIC 绑定多个 EIP——每个 EIP 与一个私有 IP 一一配对。
* 为服务保留一个稳定地址，使其不依赖于当前承载它的实例。

分配方式可以是自动（指定数量，由平台选取）或手动（指定具体 IP，且这些 IP 在子网内未被占用）。

### IPv6

如果子网已开启 IPv6，每块 vNIC 可以持有一个 IPv6 地址，在创建 vNIC 时或在 vNIC 上启用 IPv6 时从子网的 IPv6 CIDR 中分配。默认情况下，平台会将**子网 /96 网段的第一个地址**分配为该 vNIC 的 IPv6 地址。

> \*\*vNIC 上的 IPv6 一旦启用便无法关闭。\*\*启用 IPv6 是单向操作。如需为某个工作负载移除 IPv6，请更换 vNIC。

使用公网 IPv6 时，地址直接下发到客户机，不经过 NAT。详见 EIP 文档中的[公网 IPv6](/welcome/cn/elastic-compute/networking/standard-vs-bypass-eip.md#ipv6)。

***

## 绑定弹性 IP

弹性 IP（EIP）绑定到**vNIC 上的某个具体私有 IP**，而不是绑定到整块 vNIC。绑定关系是一对一的——一个 EIP 对应一个私有 IP。

如果要把一块 vNIC 上的多个私有 IP 都暴露到公网，请为每个私有 IP 各分配一个 EIP。绑定到同一块 vNIC 上的所有 EIP 必须使用相同的转发模式（普通模式或 Bypass 模式），请勿在同一块 vNIC 上混用两种模式。

两种转发模式及客户机内的配置方法，详见[**普通模式 EIP 与 Bypass EIP**](/welcome/cn/elastic-compute/networking/standard-vs-bypass-eip.md)。

***

## 不同实例规格的 vNIC 容量

实例可持有的 vNIC 数量、每块 vNIC 的硬件队列数量，以及每块 vNIC 的私有 IPv4 地址数量，均随实例的 vCPU 数量扩展。该扩展规则对所有实例族（[z2a、z4a、z2i、z3a、z4i](/welcome/cn/elastic-compute/instance-specification.md)）一致。

| vCPU 数量 | 最大 vNIC 数 | vNIC 多队列 | 每个 vNIC 的私有 IPv4 |
| ------- | --------- | -------- | ---------------- |
| 1–2     | 2         | 1        | 6–10             |
| 4–8     | 2         | 2–4      | 15               |
| 16      | 4         | 8        | 30               |
| 32      | 8         | 16       | 30               |
| 64      | 16        | 32       | 30               |

* **最大 vNIC 数**——绑定到实例上的 vNIC 总数，包含主网卡。弹性网卡仅在绑定期间占用配额，解绑后即释放槽位。
* **vNIC 多队列**——每块 vNIC 的发送（Tx）和接收（Rx）队列数量。多队列使客户机能够将数据包处理分散到多个 CPU 上；队列数越高，吞吐量越高，数据包密集型工作负载的资源争用越少。
* **每个 vNIC 的私有 IPv4**——单块 vNIC 可分配的 IPv4 地址数量上限（主 IP + 辅助 IP）。

***

***

## 进阶：net\_failover 与热迁移

ZEC 实例运行在宿主机上，这些宿主机可能因维护而进行热迁移——即在不关机的情况下将运行中的虚拟机从一台宿主机迁移到另一台。由于 vNIC 的 SR-IOV VF 与当前宿主机的物理网卡是硬件绑定的，VF 无法跟随虚拟机跨宿主机迁移。如果不做处理，这种解绑会导致网络在整个迁移过程中中断。

为消除这一中断，ZEC 实例使用 Linux 内核的 [**net\_failover**](https://www.kernel.org/doc/html/latest/networking/net_failover.html) 驱动。每块 vNIC 会向客户机呈现**三个**逻辑网络设备，它们协同工作，共同构成一条绑定链路。

![net\_failover 为客户机提供一个主设备加上 VF 和 virtio 两个从设备](/files/XEEzM6v0fbNiaOr3aR7x)

| 设备                      | 角色       | 行为                                         |
| ----------------------- | -------- | ------------------------------------------ |
| Failover 主设备（例如 `eth0`） | 您实际配置的网卡 | 持有 IP 地址、MAC 地址、路由和防火墙规则。应用和配置工具应只针对该设备操作。 |
| SR-IOV VF（主从设备）         | 快速路径     | 稳态下以线速承载流量。迁移期间被解绑，并在新宿主机上重新绑定。            |
| virtio-net（备用从设备）       | 慢速路径兜底   | 稳态下处于空闲。仅在迁移期间 VF 缺失的短暂窗口内承载流量。            |

正常运行时，数据包经由 VF 转发——virtio 设备虽已加入绑定但不承载流量。当宿主机开始热迁移时，VF 被解绑，内核会透明地把流量切换到 virtio 备用设备。迁移在新宿主机上完成后，新的 VF 会被热插入，流量随即切回。应用不会感知到 IP 变化，主设备也不会出现链路抖动。

这对您意味着：

* 在 ZEC 实例上执行 `ip link`（或 `ip addr`）会看到每块 vNIC 对应三个设备。这是正常现象——大多数用户只需与其中一个交互。
* \*\*只配置 failover 主设备。\*\*若将应用、防火墙规则或静态路由绑定到底层的 VF 或 virtio 设备，迁移时该设备消失会导致故障。
* 大多数现代发行版的 udev / systemd-networkd 规则已会自动选用 failover 主设备，并对默认配置工具隐藏从设备。如果您的发行版没有这样做，主设备就是持有 IP 地址、且链路状态中带有 `failover` 标记的那个设备。

***

## 延伸阅读

* [**弹性 IP：普通模式 EIP 与 Bypass EIP**](/welcome/cn/elastic-compute/networking/standard-vs-bypass-eip.md)——EIP 如何绑定到 vNIC 上的私有 IP，以及两种按 vNIC 生效的转发模式。
* [**实例规格**](/welcome/cn/elastic-compute/instance-specification.md)——vCPU 数量如何决定 vNIC、队列与 IP 的限制。
* [**NAT 网关**](/welcome/cn/elastic-compute/networking/01-overview-3.md)——为不持有自身 EIP 的实例提供出向地址转换。
* [**跨区域网络**](/welcome/cn/elastic-compute/networking/01-overview-1.md)——同一 VPC 内位于不同区域的子网如何互通。
