混合绑定模式
Equinix Metal™ 允许用户将服务器的网络模式从默认的第 3 层绑定模式更改为混合绑定第 3 层和第 2 层模式。
混合绑定模式支持两个网络接口的高可用性“绑定”设置,可同时支持二层和三层模式。这不仅保留了同时支持二层和三层的功能,同时还保持了跨两个不同上游交换机的高可用性绑定网络接口。

这是一种实现常见混合云网络模型的方法,例如运行防火墙、自定义网关、入口控制器和其他类型的代理,这些代理一方面面向互联网,另一方面面向私有第 2 层基础设施。
总体概述
- 在混合绑定模式下,所有第 3 层和第 2 层流量都在
bond0上处理。 - 您的服务器的 Internet 访问通过Equinix Metal分配的公共 IP 地址进行保留。
- 第 3 层流量未加标记。
- 所有二层流量都必须标记,并由
bond0上的子接口处理,每个 VLAN 一个子接口。 - 混合绑定模式不支持未标记的第 2 层流量或设置本机 VLAN。
启用混合绑定模式
可以通过为服务器上的绑定接口分配 VLAN 来启用混合绑定模式。
- Console
- CLI
- API
在 Equinix Metal 控制台中,导航到服务器的 网络 选项卡,单击 转换为其他网络类型,选择 混合,然后选择 绑定。
然后,从下拉菜单中选择 VLAN,即可将 VLAN 分配给 bond0 接口。单击“转换为混合模式”开始更改。

在 CLI 中,使用 metal port vlan 命令将 VLAN 分配给绑定接口 bond0。
metal ports vlan --port-id <bond0_id> --assign <VLAN_id>
为 --port-id 指定 bond0 的 UUID,并将 VLAN 分配给 --assign。
在 API 中,您可以通过向 /ports/{id}/assign 端点发送 POST 来为端口分配 VLAN。请在路径中指定端口的 UUID。对于混合绑定模式,它需要是 /devices/{id} 端点返回的 bond0 的 UUID。
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"(required) - The ID of the VLAN. The ID can be either the VLAN's UUID as returned by the/projects/{id}/virtual-networksendpoint, or the VLAN ID that is in the console.
配置您的服务器
将 VLAN 分配给 bond0 后,您需要在服务器操作系统上配置网络。由于来自三层网络和 VLAN 的流量都经过 bond0,因此您需要创建一个子接口来处理 VLAN 上的标记流量。混合绑定模式不支持未标记的 VLAN 流量,也不支持设置本地 VLAN。
以下示例使用 VLAN ID 为 1036、子网为 198.51.100.0/24 的 VLAN。
**注意:**不建议使用以 10.x.x.x 开头的子网进行 VLAN 流量传输,因为我们将其用于服务器的私有网络,如果您使用相同的子网,可能会发生冲突。
- iproute2
- nmcli
iproute2 是 Linux 内核中用于管理网络配置的实用程序。它包含在大多数 Linux 操作系统发行版中。
-
安装并配置 VLAN 和标记接口的先决条件。
apt-get install vlanmodprobe 8021qecho "8021q" >> /etc/modules -
在接口
bond0上添加一个新的子接口来处理带标签的流量。示例中使用的是 VLAN ID1036。ip link add link bond0 name bond0.1036 type vlan id 1036 -
将 VLAN 子网中的一个 IP 地址分配给子接口。示例中使用的是 IP 地址
198.51.100.2。ip addr add 198.51.100.2/24 dev bond0.1036 -
启动接口并检查它是否启动。
ip link set dev bond0.1036 upip -d link show bond0.1036
-
可选:要使网络配置永久生效并在服务器重启后仍然有效,请将新的子接口添加到
/etc/network/interfaces文件中。auto bond0.1036iface bond0.1036 inet staticpre-up sleep 5address 198.51.100.2/24netmask 255.255.255.0vlan-raw-device bond0注意:
pre-up sleep 5行有助于防止服务器启动时与bond0发生冲突。
nmcli 是 Network Manager 的 CLI 工具,Network Manager 是一个用于管理 Rocky Linux、RHEL 和 CentOS Streams 中网络配置的实用程序。
-
启用 VLAN 和标记接口支持。
echo 8021q > /etc/modules-load.d/8021q.conf -
在接口
bond0上添加一个新的子接口来处理带标签的流量。示例中使用的是 VLAN ID1036。nmcli connection add type vlan con-name bond0.1036 ifname bond0.1036 vlan.parent bond0 vlan.id 1036 -
将 VLAN 子网中的一个 IP 地址分配给子接口。示例中使用的是 IP 地址
198.51.100.3。nmcli connection modify bond0.1036 ipv4.addresses '198.51.100.3/24'nmcli connection modify bond0.1036 ipv4.method manualnmcli con up bond0.1036
您需要在要连接到 VLAN 的所有服务器上运行相同的步骤,为每个服务器分配来自子网的不同 IP 地址。
添加多个 VLAN
支持向绑定添加多个 VLAN,您只需确保有一个子接口可以接收发往每个 VLAN 的数据包。
- Console
- CLI
- API
要分配另一个 VLAN,或一次分配多个 VLAN,请导航至服务器的“网络”页面。在“第 2 层”部分,单击“添加新 VLAN”,将 VLAN 分配给 bond0 端口。

点击“添加”按钮开始更改。请注意,如果您一次分配多个 VLAN,它们将通过异步批处理进程添加,该进程会立即开始,但可能需要一些时间才能完成。
要分配其他一个或多个 VLAN,请使用 metal port vlan 命令,并指定要分配给 bond0 的每个 VLAN。
metal port vlan --port-id <bond0_id> --assign <vlan> --assign <vlan>
在 API 中为端口分配另一个 VLAN 的步骤与分配第一个 VLAN 的步骤相同。向 /ports/{id}/assign 端点发送 POST 请求,其中 bond0 的 UUID 是路径中的端口 ID,要分配的 VLAN 在请求正文中指定。
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>"
}'
也可以通过异步批处理方式批量为端口分配 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 可以通过 VLAN 的 UUID 或控制台中显示的 VLAN ID 来识别。由于您要将 VLAN 分配给端口,因此 "state" 字段应设置为“已分配”。
将 VLAN 分配给 bond0 后,重复 配置服务器 的过程,为每个 VLAN 创建额外的标记子接口。
测试 VLAN 连接
现在您应该能够在 VLAN 第 2 层网络上的服务器之间进行通信。
root@dev-02:~# 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.898 ms
64 bytes from 198.51.100.2: icmp_seq=2 ttl=64 time=0.659 ms
64 bytes from 198.51.100.2: icmp_seq=3 ttl=64 time=0.649 ms
64 bytes from 198.51.100.2: icmp_seq=4 ttl=64 time=0.421 ms
^C
--- 198.51.100.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3037ms
转换回第 3 层
要恢复默认的三层网络配置,请从 bond0 中删除所有 VLAN。
- Console
- CLI
- API
要从端口取消分配 VLAN,请导航至服务器的“网络”选项卡。在“第 2 层”部分,选择要从服务器分离的 VLAN,然后单击“移除”。

请注意,从此服务器分离 VLAN 并不会将其从您的项目中删除。从服务器分离后,该 VLAN 将继续存在。
在 CLI 中,使用 metal port vlan 命令取消从 bond0 分配 VLAN。
metal ports vlan --port-id <bond0_id> --unassign <vlan>
为 --port-id 指定 UUID bond0,并将要取消分配给 --unassign 的 VLAN 指定为 --unassign。
如果要删除多个 VLAN,请指定要删除的每个 VLAN。
metal port vlan --port-id <bond0_id> --unassign <vlan> --unassign <vlan>
在 API 中,要从端口取消分配 VLAN,请向 /ports/{id}/unassign 端点发送 POST,其中 bond0 的 UUID 是路径中的端口 ID,而要取消分配的 VLAN 在请求正文中指定。
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": "<vlan_id>"
}'
您还可以通过异步批处理方式批量取消分配端口上的多个 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"
}
]
}'
从端口移除所有 VLAN 后,bond0 将恢复到三层模式。届时,您可以使用任何其他现有的网络模式。