混合非键合模式
在混合非绑定模式下,一个网络接口将从三层绑定中移除,并置于二层模式。然后可以将 VLAN 分配给此接口以进行二层连接,同时保留三层连接,这样服务器仍然可以通过其公网 IP 地址访问。

虽然在某些情况下这是可取的,但它会在上游交换机或网络接口上引入单点故障。任何一个交换机发生故障、维护或重启都会导致网络中断。
如果您有高可用性方面的顾虑,混合绑定模式同时支持第 2 层和第 3 层,同时保持跨越 2 个不同上游交换机的高可用性“绑定”网络接口。
总体概述
- 混合非绑定模式将
eth1从绑定中分离出来,第 3 层流量将不再通过eth1流动。 - 然后您可以将 VLAN 添加到
eth1以用于二层流量。如果您只向eth1添加一个 VLAN,则流量绝对不能被标记。 - 如果要向
eth1添加多个 VLAN,则需要为每个 VLAN 创建子接口来处理标记流量,和/或需要设置一个本地 VLAN 来处理未标记流量。 bond0will continue to handle your Layer 3 traffic, and Internet access is preserved through your Equinix Metal assigned public IP address.- 如果向
bond0添加 VLAN,则需要为每个 VLAN 创建子接口来处理带标签的流量。bond0不支持未标记的二层流量或设置本地 VLAN。
转换为混合非粘合模式
混合非绑定模式从 LACP 绑定中移除 eth1 接口,允许您向 eth1 添加 2 层 VLAN,同时保留分配给绑定 3 层接口的弹性 IP。
- Console
- CLI
- API
要使用混合非绑定模式,您必须先将网络配置更改为混合模式。在控制台中,导航到服务器的“网络”选项卡,单击“转换为其他网络类型”,选择“混合”,然后选择“非绑定”。单击“转换为混合”以应用更改。

然后,从服务器的“网络”页面,单击“添加新 VLAN”。选择 eth1 作为接口,然后选择要使用的虚拟网络 ID(VNID 或 VLAN ID)。

要一次性分配多个 VLAN,请从下拉菜单中不断添加 VLAN。请注意,如果您一次性分配多个 VLAN,系统会通过异步批处理过程添加它们,该过程会立即开始,但可能需要一些时间才能完成。
首先,使用 metal port convert 命令从绑定网络接口中移除 eth1 端口。然后,使用 eth1 端口的 UUID 作为 --port-id,并将其 --bonded 状态设置为 false。
metal port convert --port-id <eth1_id> --bonded=false
然后,使用 metal port vlan 命令为 eth1 分配一个 VLAN。为 --port-id 指定 eth1 的 UUID,并将要分配给 --assign 的 VLAN 指定为 eth1。
metal port vlan --port-id <eth1_id> --assign <VLAN_id>
VLAN_id 可以是 VLAN 的 UUID 或控制台中显示的 VLAN ID 号。
首先,您需要从债券中移除 eth1。向 /ports/{id}/disbond 端点发送 POST 请求。
您必须在路径中指定端口 ID eth1,并且它必须是 /devices/{id} 端点返回的该端口的 UUID。
将请求正文中的 bulk_disable 字段设置为 false。
curl -X POST \
-H "Content-Type: application/json" \
-H "X-Auth-Token: <API_TOKEN>" \
"https://api.equinix.com/metal/v1/ports/{id}/disbond" \
-d '{
"bulk_disable": false
}'
然后,您需要将 VLAN 分配给 eth1。向 /ports/{id}/assign 端点发送 POST 请求。
curl -X POST \
-H "Content-Type: application/json" \
-H "X-Auth-Token: <API_TOKEN>" \
"https://api.equinix.com/metal/v1/ports/{id}/assign" \
-d '{
"vnid": "<vlan_ID>"
}'
'vnid' 是请求正文中发送的 VLAN ID。该 ID 可以是 /projects/{id}/virtual-networks 端点返回的 VLAN UUID,也可以是控制台中显示的 VLAN ID。
也可以通过异步批处理方式批量为端口分配 VLAN。向 /ports/{id}/vlan-assignments/batches 端点发送 POST 请求,并在请求正文中传入 VLAN 分配数组。
curl -X POST \
-H "Content-Type: application/json" \
-H "X-Auth-Token: <API_TOKEN> " \
"https://api.equinix.com/metal/v1/ports/{id}/vlan-assignments/batches" \
-d '{
"vlan_assignments": [
{
"vlan": "string",
"state": "assigned"
},
{
"vlan": "string",
"state": "assigned"
},
]
}'
配置您的服务器
将服务器转换为混合非绑定模式并将 VLAN 分配给 eth1 后,您需要在服务器的操作系统上配置网络,并为其分配 VLAN 上的 IP 地址。
**注意:**不建议使用以 10.x.x.x 开头的子网进行 VLAN 流量传输,因为我们将其用于服务器的私有网络,如果您使用相同的子网,可能会发生冲突。
这里有两个配置示例,第一个示例是将单个 VLAN 分配给 eth1 的配置,第二个示例是将多个 VLAN 分配给 eth1 和/或将 VLAN 分配给 bond0 的配置。
对于 eth1 上的单个 VLAN
如果您只有一个 VLAN,请不要标记流量,并将 VLAN IP 地址直接分配给接口。
以下示例使用 VLAN ID 为 1036、子网为 198.51.100.0/24 的 VLAN。
- iproute2
- nmcli
iproute2 是 Linux 内核中用于管理网络配置的实用程序。它包含在大多数 Linux 操作系统发行版中。
在我们的操作系统镜像中,接口没有别名化为 eth1 和 eth0。在本例中,控制台中的 eth1 对应于操作系统中的 enp1s0f1。
-
关闭
enp1s0f1接口。ip link set down enp1s0f1 -
请确保已从
bond0中移除enp1s0f1。ip -d link show enp1s0f1如果尚未删除,请将其删除。
ip link set enp1s0f1 nomaster -
为 VLAN 配置 IP 地址
enp1s0f1。示例中使用的是 IP 地址198.51.100.4/24。ip addr add 198.51.100.4/24 dev enp1s0f1 -
启动接口并检查其是否已恢复。
ip link set dev enp1s0f1 upip -d link show enp1s0f1
-
可选:要使网络配置永久生效并在服务器重启后仍然有效,请编辑
/etc/network/interfaces文件中的enp1s0f1。auto enp1s0f1iface enp1s0f1 inet manualaddress 192.168.1.2netmask 255.255.255.248pre-up sleep 4另外,请记住从
bond0中移除enp1s0f1(截断示例)。auto bond0iface bond0 inet static...bond-slaves enp1s0f0dns-nameservers 147.75.207.207 147.75.207.208...
nmcli 是 Network Manager 的 CLI 工具,Network Manager 是一个用于管理 Rocky Linux、RHEL 和 CentOS Streams 中网络配置的实用程序。
在我们的操作系统中,镜像接口没有别名化为eth1和eth0。在本例中,控制台中的eth1对应于操作系统中的enp1s0f1。
-
从
bond0中移除enp1s0f1。nmcli connection delete "System enp1s0f1" -
为
ethernet类型的enp1s0f1接口创建一个新连接。为了方便起见,示例中使用了名称“vlan-enp1s0f1”。nmcli connection add con-name vlan-enp1s0f1 type ethernet ifname enp1s0f1 -
为 VLAN 配置 IP 地址连接。示例中使用 IP 地址
198.51.100.5/24。nmcli connection modify vlan-enp1s0f1 ipv4.addresses 198.51.100.5/24nmcli connection modify vlan-enp1s0f1 ipv4.method manual -
建立连接。
nmcli connection up vlan-enp1s0f1
您需要在想要连接到 VLAN 的所有服务器上运行相同的步骤,为每个服务器分配不同的 IP 地址。
对于 eth1 上的多个 VLAN 或 bond0 上的 VLAN
如果您在 eth1 上使用多个 VLAN,或者向 bond0 添加 VLAN,则 IP 数据包将被标记,您需要设置子接口来接收发往每个 VLAN 的数据包。如果您需要支持未标记的数据包,请将处理未标记数据包的 VLAN 设置为 Native VLAN。
以下示例使用 eth1 和:
- VLAN ID 为
1036,子网为198.51.100.0/24的 VLAN。 - VLAN ID 为
2025,子网为203.0.113.0/24的 VLAN。
- iproute2
- nmcli
iproute2 是 Linux 内核中用于管理网络配置的实用程序。它包含在大多数 Linux 操作系统发行版中。
在我们的操作系统镜像中,接口没有别名化为 eth1 和 eth0。在本例中,控制台中的 eth1 对应于操作系统中的 enp1s0f1。
-
如果尚未安装并配置 VLAN,请先安装并配置 VLAN 的先决条件。
apt-get install vlanmodprobe 8021qecho "8021q" >> /etc/modules -
请确保已从
bond0中移除enp1s0f1。ip -d link show enp1s0f1如果尚未删除,请将其删除。
ip link set dev enp1s0f1 nomaster -
在接口
enp1s0f1上添加新的子接口来处理带标签的流量,每个 VLAN 一个子接口。示例中使用了 VLAN ID1036和2025。ip link add link enp1s0f1 name enp1s0f1.1036 type vlan id 1036ip link add link enp1s0f1 name enp1s0f1.2025 type vlan id 2025 -
为子接口分配 IP 地址。示例中使用
198.51.100.2/24和。ip addr add 198.51.100.2/24 dev enp1s0f1.1036ip addr add 203.0.113.2/24 dev enp1s0f1.2025 -
启动接口并检查它们是否已启动。
ip link set dev enp1s0f1.1036 upip -d link show enp1s0f1.2025ip link set dev enp1s0f1.1036 upip -d link show enp1s0f1.2025
-
可选:为了使网络配置永久生效并在服务器重启后仍然有效,请将新的子接口添加到
/etc/network/interfaces文件中。auto enp1s0f1.1036iface enp1s0f1.1036 inet staticaddress 198.51.100.2netmask 255.255.255.0vlan-raw-device enp1s0f1auto enp1s0f1.2025iface enp1s0f1.2025 inet staticaddressnetmask 255.255.255.0vlan-raw-device enp1s0f1另外,请记住从
bond0中移除enp1s0f1(截断示例)。auto bond0iface bond0 inet static...bond-slaves enp1s0f0dns-nameservers 147.75.207.207 147.75.207.208...
nmcli 是 Network Manager 的 CLI 工具,Network Manager 是一个用于管理 Rocky Linux、RHEL 和 CentOS Streams 中网络配置的实用程序。
:::笔记
在我们的操作系统镜像中,接口没有别名化为 eth1 和 eth0。在本例中,控制台中的 eth1 对应于操作系统中的 enp1s0f1。
:::
-
启用 VLAN 和标记接口支持。
echo 8021q > /etc/modules-load.d/8021q.conf -
从键中移除
enp1s0f1。nmcli connection delete "System enp1s0f1" -
创建一个新连接,在接口
enp1s0f1上添加一个子接口来处理带标签的流量。示例中使用了 VLAN ID1036和2025。nmcli connection add type vlan con-name enp1s0f1.1036 ifname enp1s0f1.1036 vlan.parent enp1s0f1 vlan.id 1036nmcli connection add type vlan con-name enp1s0f1.2025 ifname enp1s0f1.2025 vlan.parent enp1s0f1 vlan.id 2025 -
将 VLAN 子网中的 IP 地址分配给各个连接。示例中使用了 IP 地址
198.51.100.3和203.0.113.3。nmcli connection modify enp1s0f1.1036 ipv4.addresses '198.51.100.3/24' ipv4.method manualnmcli connection modify enp1s0f1.1036 ipv4.addresses '203.0.113.3/24' ipv4.method manual -
建立两个连接
nmcli con up enp1s0f1.1036nmcli con up enp1s0f1.2025
您需要在想要连接到 VLAN 的所有服务器上运行相同的步骤,并为每个服务器分配不同的 IP 地址。
测试 VLAN 连接
现在您应该能够在 VLAN 第 2 层网络上的服务器之间进行通信。
[root@nmcli-testing ~]# ping 198.51.100.2
>
PING 198.51.100.2 (198.51.100.2) 56(84) bytes of data.
64 bytes from 198.51.100.2: icmp_seq=1 ttl=64 time=0.703 ms
64 bytes from 198.51.100.2: icmp_seq=2 ttl=64 time=0.444 ms
64 bytes from 198.51.100.2: icmp_seq=3 ttl=64 time=0.451 ms
64 bytes from 198.51.100.2: icmp_seq=4 ttl=64 time=0.412 ms
^C
--- 198.51.100.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3113ms
rtt min/avg/max/mdev = 0.412/0.502/0.703/0.116 ms
转换回第 3 层
如果要恢复到默认的三层绑定模式,必须先删除所有已分配的 VLAN,然后将 eth1 添加到绑定接口。
- Console
- CLI
- API
要在控制台中取消分配 VLAN,请导航至服务器的“网络”选项卡。在“第 2 层”部分,选择要从端口取消分配的 VLAN。单击“移除”。

请注意,取消分配 VLAN 并不会将其从项目中删除。从端口取消分配 VLAN 后,该 VLAN 将继续存在。
然后,要转换回第 3 层,请单击“转换为其他网络类型”,选择“第 3 层”。单击“转换为第 3 层”开始转换过程。

使用 metal port vlan 命令从 eth1 接口取消分配 VLAN。指定 eth1 的 UUID 用于 --port-id,并将要取消分配的 VLAN 指定给 --unassign。
metal port vlan --port-id <eth1_id> --unassign <vlan>
然后,使用 metal port convert 命令将 eth1 返回到绑定。
metal port convert -i <eth1_id> --bonded=true
要从端口取消分配 VLAN,向 /ports/{id}/unassign 端点发送 POST 请求。
您需要在路径中指定端口 ID eth1,并在请求正文中指定 VLAN ID。VLAN ID 可以是 VLAN 的 UUID,也可以是控制台中显示的 VLAN ID。
curl -X POST \
-H "Content-Type: application/json" \
-H "X-Auth-Token: <API_TOKEN>" \
"https://api.equinix.com/metal/v1/ports/{id}/unassign" \
-d '{
"vnid": "1173"
}'
您还可以通过异步批处理方式批量取消分配端口上的多个 VLAN。向 /ports/{id}/vlan-assignments/batches 端点发送 POST 请求,请求正文中包含 VLAN 分配数组,并将其状态设置为 "unassigned"。
curl -X POST \
-H "Content-Type: application/json" \
-H "X-Auth-Token: API_TOKEN" \
"https://api.equinix.com/metal/v1/ports/{id}/vlan-assignments/batches" \
-d '{
"vlan_assignments": [
{
"vlan": "string",
"state": "unassigned"
},
{
"vlan": "string",
"state": "unassigned"
}
]
}'
然后,将端口返回给三层绑定。向 /ports/{id}/bond 端点发送 POST 请求。
curl -X POST \
-H "Content-Type: application/json"\
-H "X-Auth-Token: <API_TOKEN>" \
"https://api.equinix.com/metal/v1/ports/{id}/bond" \
-d '{
"bulk_enable": false
}'