注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
将 IP 地址分配给 Oracle Linux 实例上的第二个接口
简介
本教程提供了有关如何将 IP 地址分配给 Oracle Linux 实例上的辅助网络接口的分步说明。无论是扩展网络配置还是设置特定的路由策略,添加和配置第二个接口都是一项关键技能。
您将学习:
-
确定可用的网络接口。
-
使用静态或动态 IP 地址配置辅助接口。
-
更新网络配置文件以在重新引导后保持持久性。
-
验证配置并确保连接。
在本教程结束时,您将能够扩展 Oracle Linux 实例的网络功能,使其能够在多个子网或网络之间无缝交互。
目标
在本教程中,我们将学习如何将 IP 地址分配给 Oracle Linux 实例上的第二个网络接口。
-
了解设置辅助网络接口时涉及的配置文件。
-
了解如何将静态 IP 地址分配给第二个接口。
-
验证新配置的接口的连接和正确功能。
先决条件
- 创建虚拟云网络 (VCN) 和 2 个子网。
任务 1:创建 OCI 计算实例
在本任务中,我们将在 Oracle Cloud Infrastructure (OCI) 中创建一个新实例。
-
转到 OCI 控制台,导航到计算、实例,然后单击创建实例。
-
在创建计算实例中,输入以下信息。
- 输入实例名称。在本示例中,我们将使用
sriov-test-01
。 - 向下滚动。
- 单击更改配置。
- 选择 VM.Standard.E4。Flex ,但您也可以使用 E5。
- 向下滚动。
- 单击 Select existing virtual cloud network(选择现有虚拟云网络)。
- 选择 VCN。在本示例中,我们使用的是
oke
VCN。 - 为主 vNIC 选择现有子网。
- 向下滚动。
- 对于第一个 VNIC 接口 IP 地址,在 Private IPv4 address 中,选择 Automatically assign private IPv4 address 。
- 为主接口选择公共子网时,请在公共 IPv4 地址中选择自动分配公共 IPv4 地址。
- 向下滚动。
- 单击上载公共密钥文件 (.pub) 以上载现有(以前生成的)公共和私有 SSH 密钥。
- 单击浏览以选择现有公钥。
- 验证是否已选择要上载的现有公钥。
- 单击创建。
- 如果实例部署成功,则状态显示正在运行。
- 请注意,已配置 Primary VNIC 并自动分配 IP 地址。
- 输入实例名称。在本示例中,我们将使用
任务 2:将第二个 VNIC 添加到实例
-
转至实例详细信息页。
- 单击 Attached VNICs 。
- 请注意,只有一个 VNIC,我们将此项重命名为
sr-iov-test-01
(OCI 提供的默认名称不同)。 - 单击 创建 VNIC 。
-
在创建 VNIC 中,输入以下信息。
- 输入第二个 VNIC 的名称。在此示例中,我们将使用
secondary-vnic
。 - 选择 VCN。在本示例中,我们使用的是
oke
VCN。 - 为辅助 VNIC 选择现有子网。这是与主要 VNIC 连接到不同的子网。
- 选择 Use network security groups to control traffic (optional) 。
- (可选)选择 allow-all 可创建允许所有入站和出站流量的网络安全组。
- 向下滚动。
- 对于第二个 VNIC 接口 IP 地址,在 Private IPv4 address 中,选择 Automatically assign private IPv4 address 。
- 单击保存更改。
- 输入第二个 VNIC 的名称。在此示例中,我们将使用
-
请注意,第二个 VNIC 现在已创建并连接到实例和其他子网。
注:即使我们选择了从 OCI 自动获取第二个 VNIC 的 IP 地址的选项,操作系统 (Oracle Linux) 也不会在 VNIC 上配置 IP 地址。IP 地址由 OCI 控制台保留,但尚未配置。
任务 3:在第二个 VNIC 上配置 IP 地址
可以使用多种方法在第二个 VNIC 上配置 IP 地址。
-
方法 1:使用 Oracle Cloud Infrastructure 命令行界面 (OCI CLI)(
oci-utils
程序包)通过 OCI-network-config 命令将 IP 地址分配给 OCI 计算实例的第二个接口。 -
方法 2:使用 OCI CLI(
oci-utils
程序包)将 IP 地址分配给使用 ocid 守护进程的 OCI 计算实例的第二个接口。 -
方法 3:使用 OCI_Multi_VNIC_Setup 脚本。
-
方法 4:为
/etc/sysconfig/network-scripts/
文件夹中的新 VNIC 手动创建接口配置文件。
注:要获得全面而实用的学习体验,请从方法 1 或方法 2 开始,因为这些方法利用 OCI 本机工具并提供简单的设置。了解如何编写脚本和实现自动化,了解方法 3 ,最后,尝试使用方法 4 进行高级手动配置。
方法 1:使用 OCI CLI(oci-utils
程序包)使用 oci-network-config
命令为第二个接口分配 IP 地址
在此方法中,创建一个名为 sriov-test-04
的新实例,并使用 oci-network-config 命令将 IP 地址分配给第二个接口。
先决条件:预配了新实例并添加了另一个 VNIC。
-
运行以下命令。
- 运行
ip a
命令以从所有接口检索 IP 地址。 - 请注意
ens3
接口。 - 请注意,
ens3
接口配置了 IP 地址。 - 请注意
ens5
接口。 - 请注意,
ens5
接口未配置 IP 地址。 - 运行
route -n
命令以检索所有接口的所有路由和默认网关。 - 请注意,只有网关可用于
ens3
接口。
- 运行
-
以下命令用于测试
oci-utils
命令是否已开箱即用。- 运行
sudo oci-compartmentid
命令以检索实例所属的区间的 OCID。 - 运行
sudo oci-instanceid
命令以检索实例的 OCID。
在这里,我们已经证明
oci-utils
命令是开箱即用的。 - 运行
-
运行以下命令。
- 运行
sudo oci-network-config show
命令以从实例检索所有网络配置。 - 请注意以下错误:无法显示信息:无法获取 API 会话。有关实例 VNIC 的信息不会在操作系统级别提供,也不会在 OCI 级别提供。
- 请注意
ens3
接口上的操作系统级别信息。 - 请注意
ens5
接口上的操作系统级别信息。 - 请注意接口
ens5
的ADD
标志。
要配置当前使用
ADD
标记的ens5
接口,请运行sudo oci-network-config configure
命令。这是不可能的,因为我们运行
oci-network-config show
命令时会收到相同的错误,该命令是无法显示信息:无法获取 API 会话。问题:为什么会出现此错误?
解决方法:VCN 不是实例拥有的对象,这意味着在未进行适当验证的情况下,实例无法直接访问 VCN 信息。要使实例能够从 API 提取 VCN 详细信息,必须创建包含该实例的动态组并分配授予必要权限的策略。
- 运行
-
要使 OCI 计算实例能够通过 API 提取 VCN 详细信息,请执行以下步骤:
-
创建动态组:此动态组包括需要访问 API 的实例。您可以使用基于实例 OCID 或区间等属性的规则定义组。
-
为权限分配策略:您需要创建 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 策略,以授予动态组读取或管理与 VCN 相关的资源的权限。例如:
allow dynamic-group <dynamic-group-name> to read virtual-network-family in compartment <compartment-name>
-
使用实例主用户进行验证:动态组中的实例使用其身份直接进行验证,允许安全地访问 API,而不必在应用程序中嵌入身份证明。这种方法简化了安全管理,同时保持了强大的访问控制。
-
-
转到 OCI 控制台。
- 单击汉堡包菜单(≡),导航到计算、实例,然后选择要为其运行以下命令
sudo oci-network-config show
和sudo oci-network-config configure
的计算实例。 - 单击显示以显示实例 OCID 值。
- 单击复制可复制实例 OCID 值。
- 单击汉堡包菜单(≡),导航到身份、域、默认域,然后单击动态组。
- 单击创建动态组。
- 为动态组输入名称。在本示例中,我们将使用
sriov-test-04
。 - 单击规则构建器。
- 在匹配实例中选择实例 OCID 。
- 在值中输入实例 OCID 的值。
- 单击添加规则。
- 请注意,新规则将添加到组中。
- 单击创建。
- 单击汉堡包菜单(≡),导航到计算、实例,然后选择要为其运行以下命令
-
现在,我们已拥有实例所属的组,因此需要在包含该实例的区间内创建一个策略。此策略将允许组中的实例对 VCN 对象(例如子网)执行操作。
- 单击汉堡菜单(≡),导航到身份并单击区间。
- 单击根区间。在此示例中为
oraseemeaocids4
。
- 请注意,我们现在在子区间中。
- 单击下一个子区间。在此示例中,它为
NETWORK
。
- 请注意,我们现在在下一个子区间中。
- 单击下一个子区间。在此示例中为
Iwan
。
- 确保选择了正确的区间。
- 单击策略。
- 单击创建策略。
-
在创建策略中,输入以下信息。
- 输入策略的名称。在本示例中,我们将使用
allow-sriov-test-04-to-vcn
。 - 输入策略的说明。在本示例中,我们将使用
allow-sriov-test-04-to-vcn
。 - 选择显示手动编辑器。
- 输入以下策略:
allow dynamic-group sriov-test-04 to manage all-resources in compartment Iwan
。 - 单击创建。
- 输入策略的名称。在本示例中,我们将使用
-
请注意新创建的策略中的新策略语句。
-
现在,我们允许实例通过 OCI CLI 对 VCN 执行 API 调用。
- 运行
ip a
命令以从所有接口检索 IP 地址。 - 请注意,
ens5
接口未配置 IP 地址。 - 运行
sudo oci-network-config show
命令以从 OCI 级别上的实例检索所有网络配置。错误现在已经消失了。 - 请注意
ens5
接口上的 OCI 级别信息以及接口ens5
的ADD
标志。 - 请注意
ens3
和ens5
接口的操作系统级别信息。
- 运行
-
在运行
sudo oci-network-config configure
命令配置第二个 VNIC 的 IP 地址之前,我们需要创建一个名为/etc/iproute2
的新目录和一个名为/etc/iproute2/rt_tables
的新文件。这是必需的,以便系统可以正确配置此新接口的路由和默认网关。/etc/iproute2/rt_tables
文件用于在 Linux 中定义和管理多个路由表以及启用基于策略的路由。它将人类可读的名称映射到路由表编号,允许高级设置,例如通过不同的网关,接口或 ISP 路由特定流量。运行
sudo mkdir -p /etc/iproute2
命令以创建名为/etc/iproute2
的目录,运行sudo touch /etc/iproute2/rt_tables
命令以创建名为rt_tables
的文件。 -
运行以下命令。
- 运行
sudo oci-network-config configure
命令以配置第二个 VNIC 的 IP 地址。 - 请注意 Configured 消息。
- 运行
sudo oci-network-config show
命令以从 OCI 级别上的实例检索所有网络配置。 - 现在,
ens5
接口上的 OCI 级别信息和接口ens5
的ADD
标志已消失。 - 运行
ip a
命令以从所有接口检索 IP 地址。 ens5
接口现在已配置 IP 地址。- 运行
route -n
命令以检索所有接口的所有路由和默认网关。 - 请注意,网关现在可用于
ens5
接口。
- 运行
more /etc/iproute2/rt_tables
命令以验证是否进行了新条目。 - 请注意
11 ort
项。 - 运行
ip route show table 11
命令可查看此映射的路由表。 - 请注意,对于接口
ens5
(实例上的新第二个 VNIC),存在默认路由。
- 运行
方法 2:使用 OCI CLI(oci-utils
程序包)使用 ocid daemon
为第二个接口分配 IP 地址
在此方法中,创建一个名为 sriov-test-01
的新实例,并使用 ocid daemon 为第二个接口指定 IP 地址。
先决条件:预配了新实例并添加了另一个 VNIC。
-
运行以下命令。
- 运行
ip a
命令以从所有接口检索 IP 地址。 - 请注意,
ens5
接口未配置 IP 地址。
- 运行
route -n
命令以检索所有接口的所有路由和默认网关。 - 请注意,只有网关可用于
ens3
接口。
- 运行
ip -f inet -o addr
filtered 命令以显示所有接口上配置的所有 IP 地址。 - 请注意,只有配置的接口和 IP 地址是
ens3
接口。
- 运行
systemctl list-unit-files ocid.service
命令以验证是否启用了 ocid 守护进程。 - 请注意,ocid 守护进程已禁用。
- 运行
sudo systemctl start ocid
命令以启动 ocid 守护进程。 - 运行
sudo systemctl status ocid
命令以验证 ocid 守护进程的状态。 - 请注意,ocid 守护进程处于活动状态且正在运行。
- 运行
ip -f inet -o addr
filtered 命令以显示所有接口上配置的所有 IP 地址。 - 请注意,
ens5
接口现在已配置并且具有 IP 地址。
- 运行
ip a
命令以从所有接口检索 IP 地址。 - 请注意,
ens5
接口现在已配置 IP 地址。
- 运行
route -n
命令以检索所有接口的所有路由和默认网关。 - 请注意,网关现在可用于
ens5
接口。
- 运行
-
要确保 OCID 服务在重新引导后自动启动,请运行
sudo systemctl enable ocid
命令。 -
与方法 1 相同,我们需要创建一个名为
/etc/iproute2
的目录和一个名为/etc/iproute2/rt_tables
的文件。这是必需的,以便系统可以正确配置此新接口的路由和默认网关。/etc/iproute2/rt_tables
文件用于在 Linux 中定义和管理多个路由表以及启用基于策略的路由。它将人类可读的名称映射到路由表编号,允许高级设置,例如通过不同的网关,接口或 ISP 路由特定流量。运行
sudo mkdir -p /etc/iproute2
命令以创建名为/etc/iproute2
的目录,运行sudo touch /etc/iproute2/rt_tables
命令以创建名为rt_tables
的文件。 -
运行
sudo reboot
命令。- 运行
more /etc/iproute2/rt_tables
命令以验证是否进行了新条目。 - 请注意
11 ort3
项。 - 运行
ip route show table 11
命令可查看此映射的路由表。 - 请注意,对于接口
ens5
(实例上的新第二个 VNIC),存在默认路由。
- 运行
方法 3:使用 OCI_Multi_VNIC_Setup
脚本
在此方法中,创建一个名为 sriov-test-02
的新实例,并使用 OCI_Multi_VNIC_Setup 脚本为第二个 VNIC 配置 IP 地址。
先决条件:预配了新实例并添加了另一个 VNIC。
-
运行以下命令。
- 运行
ip a
命令以从所有接口检索 IP 地址。 - 请注意,
ens5
接口未配置 IP 地址。 - 运行
route -n
命令以检索所有接口的所有路由和默认网关。 - 请注意,只有网关可用于
ens3
接口。
-
使用以下 curl 命令下载脚本。
curl -o OCI_Multi_VNIC_Setup.sh https://raw.githubusercontent.com/Olygo/OCI_Multi_VNIC_Setup/refs/heads/main/OCI_Multi_VNIC_Setup.sh
-
运行
ls -l
命令以列出所有文件。 -
请注意,
CI_Multi_VNIC_Setup.sh
脚本已成功下载。 -
运行
chmod +x ./OCI_Multi_VNIC_Setup.sh
命令使下载的脚本可执行。 -
运行
sudo ./OCI_Multi_VNIC_Setup.sh
命令以运行脚本。
- 运行
-
从 OCI 控制台收集运行脚本时需要用作输入的信息。
- 在实例详细信息页中,记下主接口的专用 IPv4 地址。
- 向下滚动。
- 单击 Attached VNICs 。
- 单击第二个 VNIC。
- 请注意第二个 VNIC 的 MAC 地址。
- 请注意第二个 VNIC 的 IP 地址。
注:即使未在实例操作系统上配置 IP 地址,OCI 控制台管理也已保留该 IP 地址。
-
使用 IP 地址和子网信息确定子网的默认网关,因为脚本需要此信息。
注: OCI 控制台不提供有关默认网关的详细信息,但通常是子网中的第一个可用 IP 地址。
我们具有以下信息:
主接口 (ens3) 辅助接口 (ens5) IPv4 子网: 10.0.0.0/29 10.0.3.0/27 IPv4 地址: 10.0.0.4 10.0.3.5/27 IPv4 网关: 10.0.0.1 10.0.3.1 MAC 地址: 脚本不需要 02:00:17:00:61:01 -
输入以下信息。
- 主要 VNIC 接口名称:输入
ens3
。 - 主要 VNIC IP:输入
10.0.0.4
。 - 主要 VNIC 网关 IP:输入
10.0.0.1
。 - 辅助 VNIC 接口名称:输入
ens5
。 - 辅助 VNIC IP 地址(CIDR 表示法):输入带有完整 CIDR 表示法的
10.0.3.5/27
。 - Secondary VNIC MAC Address(辅助 VNIC MAC 地址):输入
02:00:17:00:61:01
。 - 此接口将成为其他子网的一部分,因此请在此处输入
y
。 - 辅助 VNIC 网关:输入
10.0.3.1
。
- 验证信息并输入
y
进行确认。 - 输入
y
以再次确认设置。 - 请注意,脚本将启动接口配置,并在执行此操作时提供状态更新。
- 主要 VNIC 接口名称:输入
-
状态消息的完整输出如下所示:
Summary of your configuration: - The primary Vnic name is: ens3 - The primary Vnic IP is: 10.0.0.4 - The primary Vnic GW is: 10.0.0.1 - The secondary Vnic name is: ens5 - The secondary Vnic IP with CIDR is: 10.0.3.5/27 - The secondary Vnic MAC is: 02:00:17:00:61:01 - The secondary Vnic GW is: 10.0.3.1 Do you confirm these settings ? (y)es/(n)o/(q)uit: y User settings confirmed... Summary of your configuration: - The primary Vnic name is: ens3 - The primary Vnic IP is: 10.0.0.4 - The primary Vnic GW is: 10.0.0.1 - The secondary Vnic name is: ens5 - The secondary Vnic IP with CIDR is: 10.0.3.5/27 - The secondary Vnic MAC is: 02:00:17:00:61:01 - The secondary Vnic GW is: 10.0.3.1 Do you confirm these settings ? (y)es/(n)o/(q)uit: y User settings confirmed... *** Checking if NetworkManager CLI (nmcli) is installed *** nmcli is already installed. *** Configuring NetworkManager *** NetworkManager is already enabled. NetworkManager is already running. NetworkManager is configured and running. *** Check and install iproute if not installed *** Package 'iproute' is already installed. Proceeding. *** Ensure /etc/iproute2 directory exists *** Directory '/etc/iproute2' does not exist. Creating it... Directory '/etc/iproute2' created successfully. *** Ensure /etc/iproute2/rt_tables file exists *** File '/etc/iproute2/rt_tables' does not exist. Creating it... File '/etc/iproute2/rt_tables' created successfully with a default header. *** Starting ens5 configuration and persistence setup *** *** Configure secondary VNIC with NetworkManager *** Connection 'ens5' (582dd2d7-3a3e-45b9-8289-ce3d474f4b74) successfully added. Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3) *** Enable IP forwarding and configure reverse path filtering *** # Enable IP forwarding net.ipv4.ip_forward=1 # Configure reverse path filtering net.ipv4.conf.all.rp_filter=2 net.ipv4.conf.default.rp_filter=2 net.ipv4.conf.ens3.rp_filter=2 net.ipv4.conf.ens5.rp_filter=2 *** Apply sysctl settings immediately *** kernel.unknown_nmi_panic = 1 net.ipv4.ip_forward = 1 net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2 net.ipv4.conf.ens3.rp_filter = 2 net.ipv4.conf.ens5.rp_filter = 2 *** Adding custom routing tables *** 100 vnic_1 200 vnic_2 *** Adding IP rules and routes *** *** Creating policy routing persistence script *** *** Creating systemd service for policy routing *** Created symlink /etc/systemd/system/multi-user.target.wants/policy-routing.service → /etc/systemd/system/policy-routing.service. *** Testing connectivity *** PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data. 64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=0.059 ms 64 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=0.037 ms 64 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=0.031 ms 64 bytes from 10.0.0.4: icmp_seq=4 ttl=64 time=0.027 ms --- 10.0.0.4 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3073ms rtt min/avg/max/mdev = 0.027/0.038/0.059/0.013 ms PING 10.0.3.5 (10.0.3.5) 56(84) bytes of data. 64 bytes from 10.0.3.5: icmp_seq=1 ttl=64 time=0.026 ms 64 bytes from 10.0.3.5: icmp_seq=2 ttl=64 time=0.022 ms 64 bytes from 10.0.3.5: icmp_seq=3 ttl=64 time=0.023 ms 64 bytes from 10.0.3.5: icmp_seq=4 ttl=64 time=0.035 ms --- 10.0.3.5 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3069ms rtt min/avg/max/mdev = 0.022/0.026/0.035/0.007 ms PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.098 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.097 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.067 ms 64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.060 ms --- 10.0.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3069ms rtt min/avg/max/mdev = 0.060/0.080/0.098/0.019 ms *** Network configuration completed *** IP rules: 0: from all lookup local 32764: from 10.0.3.5 lookup vnic_2 32765: from 10.0.0.4 lookup vnic_1 32766: from all lookup main 32767: from all lookup default $ nmcli device show ens5 GENERAL.DEVICE: ens5 GENERAL.TYPE: ethernet GENERAL.HWADDR: 02:00:17:00:61:01 GENERAL.MTU: 9000 GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: ens5 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/3 WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 10.0.3.5/27 IP4.GATEWAY: 10.0.3.1 IP4.ROUTE[1]: dst = 10.0.3.0/27, nh = 0.0.0.0, mt = 101 IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 10.0.3.1, mt = 101 IP4.ROUTE[3]: dst = 0.0.0.0/0, nh = 10.0.3.1, mt = 0, table=200 IP6.ADDRESS[1]: fe80::70ba:d30f:3dac:6462/64 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 1024 *** Configuration complete! ens5 is set up and all settings are persistent *** [opc@sriov-test-02 ~]$
- 运行
ip a
命令以从所有接口检索 IP 地址。 - 请注意,
ens5
接口现在已配置 IP 地址。 - 运行
route -n
命令以检索所有接口的所有路由和默认网关。请注意,网关现在可用于ens5
接口。
注:
- 配置 IP 地址并确保路由正确运行是两回事。
- 脚本还将为我们配置路由部分。
- 注意脚本的特定输出。
- 运行
-
脚本的以下部分将创建一个名为
/etc/iproute2 directory
的目录和一个名为rt_tables
的文件。*** Ensure /etc/iproute2 directory exists *** Directory '/etc/iproute2' does not exist. Creating it... Directory '/etc/iproute2' created successfully. *** Ensure /etc/iproute2/rt_tables file exists *** File '/etc/iproute2/rt_tables' does not exist. Creating it... File '/etc/iproute2/rt_tables' created successfully with a default header.
-
脚本的以下部分将向
rt_tables
文件中添加必要的条目。*** Adding custom routing tables *** 100 vnic_1 200 vnic_2
-
该脚本的以下部分将添加 IP 路由规则,以允许基于实例的策略路由,并且还为基于策略的路由启用服务。如果您是具有多个 VNIC 的实例,则该路由是必需的。
*** Adding IP rules and routes *** *** Creating policy routing persistence script *** *** Creating systemd service for policy routing *** Created symlink /etc/systemd/system/multi-user.target.wants/policy-routing.service → /etc/systemd/system/policy-routing.service.
-
运行以下命令。
- 运行
more /etc/iproute2/rt_tables
命令以验证是否进行了新条目。 - 请注意
100 vnic_1
和200 vnic_2
条目。 - 运行
ip route show table 100
命令可查看此映射的路由表,并注意到实例上的主 VNIC 接口ens3
有默认路由。 - 运行
ip route show table 200
命令可查看此映射的路由表,并注意到接口ens5
在实例上有新的第二个 VNIC 的默认路由。
- 运行
方法 4:手动创建接口配置文件
创建一个名为 sriov-test-03
的新实例,并通过 /etc/sysconfig/network-scripts/
目录中新 VNIC 的定义为第二个 VNIC 配置 IP 地址。
注:在此方法中,我们将配置方法 3 中脚本自动执行的所有步骤。
先决条件:预配了新实例并添加了另一个 VNIC。
-
运行以下命令。
- 运行
ip a
命令以从所有接口检索 IP 地址。 - 请注意,
ens5
接口未配置 IP 地址。 - 运行
route -n
命令以检索所有接口的所有路由和默认网关。 - 请注意,只有网关可用于
ens3
接口。
- 运行
-
导航到 Instance(实例)、 Attached VNICS(连接的 VNIC),然后选择第二个 VNIC 以检索第二个 VNIC 的 IP 地址。请记下 IP 地址。
-
使用
cd /etc/sysconfig/network-scripts/
命令转至/network-scripts
文件夹,并使用sudo nano ifcfg-ens5
命令在同一文件夹中创建一个名为ifcfg-ens5
的新文件。 -
使用以下参数配置
ens5
接口。NAME="ens5" DEVICE="ens5" IPADDR=10.0.3.19 NETMASK=255.255.255.224 GATEWAY=10.0.3.1 ONBOOT=yes
- IP 地址与我们从 OCI 控制台检索的 IP 地址相同。
- 子网派生自此接口连接到的 VCN 中的子网。
- 网关 IP 地址是子网中的第一个 IP 地址。
-
使用 nano 编辑器保存名为
ifcfg-ens5
的配置文件。- 使用
ls -l
命令列出/etc/sysconfig/network-scripts/
目录中的文件。 - 请注意,有一个用于
ens3
的接口配置文件。 - 请注意,有一个用于
ens5
的接口配置文件。
- 使用
more ifcfg-ens5
命令验证ifcfg-ens5
文件的内容。 - 确保所有参数都已正确配置。
- 运行
ip a
命令以从所有接口检索 IP 地址。 - 请注意,
ens5
接口仍未配置 IP 地址。
- 使用
-
使用
sudo reboot
命令重新引导实例。- 运行
ip a
命令以从所有接口检索 IP 地址。 - 请注意,
ens5
接口现在已配置 IP 地址。 - 运行
route -n
命令检索所有接口的所有路由和默认网关。请注意,网关现在可用于ens5
接口。
注:配置 IP 地址并确保路由正确运行是两种不同的方式。
- 运行
-
配置路由。
/etc/iproute2/rt_tables
文件用于在 Linux 中定义和管理多个路由表以及启用基于策略的路由。它将人类可读的名称映射到路由表编号,允许高级设置,例如通过不同的网关,接口或 ISP 路由特定流量。运行
sudo mkdir -p /etc/iproute2
命令以创建名为/etc/iproute2
的目录,运行sudo nano /etc/iproute2/rt_tables
命令以创建名为rt_tables
的文件。 -
在
rt_tables
文件中配置以下参数。100 vnic_1 200 vnic_2
-
使用
sudo nano /usr/local/bin/setup_policy_routing.sh
命令创建策略路由持久性脚本。#!/bin/bash # Reapply IP rules ip rule add from 10.0.0.3 table vnic_1 ip rule add from 10.0.3.19 table vnic_2 # Reapply routing rules ip route add default via 10.0.0.1 dev ens3 table vnic_1 ip route add default via 10.0.3.1 dev ens5 table vnic_2
-
运行
sudo chmod +x /usr/local/bin/setup_policy_routing.sh
命令以使策略路由持久性脚本可执行。 -
使用
nano /etc/systemd/system/policy-routing.service
命令为策略路由脚本创建 systemd 服务。如果实例具有多个 VNIC,则需要使用此命令。 -
在
policy-routing.service
文件中配置以下参数。[Unit] Description=Setup Policy Routing for Multiple VNICs After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/setup_policy_routing.sh RemainAfterExit=true [Install] WantedBy=multi-user.target
-
运行
sudo chmod +x /etc/systemd/system/policy-routing.service
命令使基于策略的路由的服务文件可执行。 -
运行
sudo systemctl start policy-routing.service
命令以启动基于策略的路由的服务。 -
运行
sudo systemctl status policy-routing
命令以确保基于策略的路由的服务已装入且处于活动状态。[opc@sriov-test-03 ~]$ sudo systemctl status policy-routing ● policy-routing.service - Setup Policy Routing for Multiple VNICs Loaded: loaded (/etc/systemd/system/policy-routing.service; enabled; vendor preset: disabled) Active: active (exited) since Wed 2024-12-11 09:07:16 GMT; 4 weeks 1 days ago Process: 2415 ExecStart=/usr/local/bin/setup_policy_routing.sh (code=exited, status=0/SUCCESS) Main PID: 2415 (code=exited, status=0/SUCCESS) Tasks: 0 (limit: 99891) Memory: 0B CGroup: /system.slice/policy-routing.service Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable. [opc@sriov-test-03 ~]$
-
运行
sudo systemctl enable policy-routing.service
命令以确保在实例(重新启动)启动时启动基于策略的路由服务。 -
使用
sudo reboot
命令重新引导实例。 -
重新引导后,运行以下命令。
- 运行
more /etc/iproute2/rt_tables
命令以验证是否进行了新条目。 - 请注意我们手动配置的
100 vnic_1
和200 vnic_2
条目。 - 运行
ip route show table 100
命令可查看此映射的路由表,并注意到实例上的主 VNIC 接口ens3
有默认路由。 - 运行
ip route show table 200
命令可查看此映射的路由表,并注意到接口ens5
在实例上有新的第二个 VNIC 的默认路由。
- 运行
后续步骤
选择在 OCI Linux 实例上配置第二个接口的正确方法取决于您的要求、技术专长和所需的控制级别。如果要查找简单高效的设置,强烈建议使用 oci-utils
软件包和 Oracle 本机工具的方法 1 和方法 2 。这些方法非常适合希望在不深入手动配置或外部脚本的情况下利用 OCI 内置功能的用户。
此外,在自动化和可扩展性至关重要的情况下,方法 3 利用 OCI_Multi_VNIC_Setup
脚本提供了灵活的解决方案。它在管理不同实例的多个接口时特别有用,可以节省时间并在配置中保持一致。
同时,方法 4 (手动配置方法)提供了最高级别的定制。此方法最适合高级用户或自动化工具不可用或不首选的特定环境。它还提供了一种了解 Oracle Linux 实例上网络内部工作的绝佳方式。
通过了解这些方法,您可以灵活地在各种场景中配置辅助接口,从基本设置到复杂的多云架构。借助适当的方法,您可以确保根据 OCI 工作负载定制可靠、高效的网络配置。
确认
- 作者 — Iwan Hoogendoorn(OCI 网络专家)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Assign an IP Address to a Second Interface on an Oracle Linux Instance
G25221-01
January 2025