介绍
在本实验中,你将学习如何使用 iproute2 套件中的 ip 命令在 Linux 系统上配置虚拟局域网 (VLAN) 接口。你将获得实际操作经验,了解如何在单个物理接口上创建逻辑上独立的网络,这是网络管理和分段的一项基本技能。此过程允许你在无需额外物理硬件的情况下隔离网络流量,并提高安全性和性能。
你将首先准备系统,这包括安装必要的 vlan 用户空间工具并加载 802.1q 内核模块以启用 VLAN 标记。在初始设置之后,你将识别主网络接口,为 VLAN 10 和 VLAN 20 创建两个新的虚拟接口,并为每个接口分配一个静态 IP 地址。最后,你将使用 ip a 命令来验证 VLAN 接口是否已成功创建并在系统上处于活动状态。
安装 VLAN 工具并加载 802.1q 内核模块
在此步骤中,你将为 VLAN 配置准备你的 Linux 环境。这包括两个关键操作:安装必要的用户空间工具和加载所需的内核模块。
虚拟局域网 (VLAN) 允许你在相同的物理网络基础设施上创建逻辑上独立的网络。要在 Linux 上管理 VLAN,你需要 vlan 包,它提供了命令行工具。此外,内核需要能够处理 VLAN 标记的流量,这由 8021q 内核模块启用,该模块以 IEEE 802.1Q VLAN 网络标准命名。
首先,让我们确保你的软件包列表是最新的,然后安装 vlan 包。所有命令都将在终端中执行。
更新你系统上的软件包索引:
sudo apt update安装
vlan包。-y标志会自动确认安装。sudo apt install -y vlan你应该会看到指示软件包正在安装的输出。
Reading package lists... Done Building dependency tree... Done Reading state information... Done The following NEW packages will be installed: vlan 0 upgraded, 1 newly installed, 0 to remove and XX not upgraded. Need to get XX.X kB of archives. After this operation, XXX kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 vlan X.X-X [XX.X kB] Fetched XX.X kB in Xs (XX.X kB/s) Selecting previously unselected package vlan. (Reading database ... XXXXXX files and directories currently installed.) Preparing to unpack .../vlan_X.X-X_amd64.deb ... Unpacking vlan (X.X-X) ... Setting up vlan (X.X-X) ...
现在工具已安装,你需要加载 8021q 内核模块。此模块使 Linux 内核能够处理带有 VLAN 标记的网络数据包。
使用
modprobe命令加载8021q模块:sudo modprobe 8021q如果成功,此命令通常不会产生任何输出。
要确认模块已正确加载,你可以使用
lsmod列出所有已加载的模块,并使用grep过滤输出以查找8021q。lsmod | grep 8021q输出应显示
8021q模块,确认它在内核中处于活动状态。8021q 36864 0 garp 20480 1 8021q mrp 20480 1 8021q
你的系统现在已准备好进行 VLAN 配置。在下一步中,你将识别你的网络接口并开始创建 VLAN。
识别主网络接口
在此步骤中,你将识别系统中主网络接口的名称。VLAN 接口是逻辑上连接到物理网络接口的虚拟接口。因此,在你可以在物理接口上创建任何 VLAN 之前,必须先知道该物理“父”接口的名称。
我们将使用 ip 命令,这是 Linux 上网络配置的现代标准。具体来说,ip a(或 ip addr)命令会显示有关所有网络接口的信息。
打开终端。你当前的工作目录是
~/project。要列出所有网络接口及其配置,请键入以下命令并按 Enter:
ip a
你将看到系统中所有网络接口的列表。查找一个处于活动状态并已分配 IP 地址的接口。你可以忽略 lo 接口,这是本地回环设备。主接口名称通常以 en(表示以太网)或 eth 开头。
以下是输出可能样子的示例。在此示例中,eth0 是主物理接口。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:00:04:06 brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
inet 172.16.50.186/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
valid_lft 1892159924sec preferred_lft 1892159924sec
inet6 fe80::216:3eff:fe00:406/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:f2:70:14:b5 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
从上面的输出中,请注意以下几点:
eth0: 这是接口的名称。记下这个名称,因为在接下来的步骤中你需要它。你的接口名称可能不同(例如ens33)。state UP: 这表示接口处于活动状态。inet 172.16.50.186/24: 这是分配给该接口的 IPv4 地址。
现在你已经识别了主网络接口,可以开始在其上创建 VLAN 接口了。
为 VLAN 10 和 VLAN 20 创建虚拟接口
在此步骤中,你将使用 ip 命令创建两个新的虚拟网络接口。每个接口将与一个特定的 VLAN ID 相关联,从而有效地将你的主机连接到两个不同的逻辑网络:VLAN 10 和 VLAN 20。这些新接口将链接到你在上一步中识别的主物理接口。
创建 VLAN 接口的命令是 ip link add。让我们分解一下它的结构:
sudo ip link add: 添加新网络链接(接口)的基础命令。link <physical_interface>: 指定父物理接口。你将用你在步骤 2 中找到的名称(例如eth0)替换<physical_interface>。name <vlan_interface_name>: 定义新虚拟接口的名称。一种常见的约定是<physical_interface>.<vlan_id>,例如eth0.10。type vlan: 指定新接口是 VLAN 类型。id <vlan_id>: 分配数字 VLAN ID(或标签)。
现在,让我们创建接口。请记住,如果你的物理接口名称不同,请将其替换为你的实际物理接口名称(例如 eth0)。
首先,为 VLAN 10 创建虚拟接口。此接口将命名为
eth0.10。sudo ip link add link eth0 name eth0.10 type vlan id 10接下来,为 VLAN 20 创建虚拟接口,并将其命名为
eth0.20。sudo ip link add link eth0 name eth0.20 type vlan id 20
如果这些命令成功执行,它们将不会产生任何输出。你现在已经创建了逻辑接口,但它们尚未激活或配置 IP 地址。你将在下一步处理这些。
分配 IP 地址并激活 VLAN 接口
在此步骤中,你将使新创建的 VLAN 接口上线并为其分配 IP 地址。创建后,网络接口默认处于 DOWN 状态,这意味着它们被禁用且无法发送或接收流量。你需要激活它们并提供网络层地址才能使其正常工作。
我们将使用 ip link set up 命令来激活接口,并使用 ip addr add 来分配 IP 地址。
首先,你需要激活或“启动”VLAN 接口。这使它们能够参与网络通信。在终端中执行以下命令。请记住,如果你的接口名称不是
eth0,请使用你的实际接口名称。激活
eth0.10接口:sudo ip link set dev eth0.10 up激活
eth0.20接口:sudo ip link set dev eth0.20 up如果这些命令成功执行,它们将不会产生任何输出。
现在接口已激活,你可以为每个接口分配一个 IP 地址。我们将为 VLAN 10 分配一个来自
192.168.10.0/24网络的地址,为 VLAN 20 分配一个来自192.168.20.0/24网络的地址。/24是 CIDR 表示法,表示子网掩码为255.255.255.0。为
eth0.10接口分配192.168.10.10/24:sudo ip addr add 192.168.10.10/24 dev eth0.10为
eth0.20接口分配192.168.20.10/24:sudo ip addr add 192.168.20.10/24 dev eth0.20
你的 VLAN 接口现在已完全配置并对当前会话激活。在最后一步中,你将验证完整的配置。
使用 ip a 命令验证 VLAN 接口配置
在最后一步中,你将验证你的 VLAN 接口是否已成功创建、激活并配置了正确的 IP 地址。再次运行 ip a 命令将向你显示主机的完整网络配置,包括新的虚拟接口。
在你的终端中,执行
ip a命令以显示所有网络接口信息。ip a仔细检查输出。你现在应该会看到你的新 VLAN 接口
eth0.10和eth0.20与你的物理接口和回环接口一起列出。输出将类似于:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:00:04:06 brd ff:ff:ff:ff:ff:ff inet 172.16.50.186/24 metric 100 brd 172.16.50.255 scope global dynamic eth0 valid_lft 1892159924sec preferred_lft 1892159924sec 3: eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:16:3e:00:04:06 brd ff:ff:ff:ff:ff:ff inet 192.168.10.10/24 brd 192.168.10.255 scope global eth0.10 valid_lft forever preferred_lft forever 4: eth0.20@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:16:3e:00:04:06 brd ff:ff:ff:ff:ff:ff inet 192.168.20.10/24 brd 192.168.20.255 scope global eth0.20 valid_lft forever preferred_lft forever
请注意你新接口的以下关键详细信息:
eth0.10@eth0和eth0.20@eth0: VLAN 接口的名称。@eth0部分明确显示它们已链接到eth0物理设备。state UP: 确认两个接口都已激活并准备好传输数据。inet 192.168.10.10/24和inet 192.168.20.10/24: 你在上一步中分配的 IP 地址已正确配置。
恭喜!你已成功配置了一个 Linux 主机以参与两个不同的 VLAN。这展示了服务器如何通过单个物理连接跨越多个逻辑网络段进行通信。
关于持久化的注意事项: 你使用的 ip 命令创建的配置是临时的,在重启后会丢失。在生产环境中,你需要通过编辑网络配置文件来使这些更改永久生效,例如 Netplan(/etc/netplan/*.yaml)或旧的 ifupdown 系统(/etc/network/interfaces)使用的配置文件。
总结
在本实验中,你学习了使用 ip 命令在 Linux 系统上创建和配置 VLAN 接口的完整过程。你首先准备了环境,包括安装 vlan 包以使用用户空间工具,以及加载 8021q 内核模块以启用 VLAN 标签处理。这一基础步骤确保了系统能够理解和管理 VLAN 流量。
在初始设置之后,你识别了将作为 VLAN 父接口的主要物理网络接口。然后,你使用 ip link 命令创建了两个独立的虚拟接口,一个用于 VLAN 10,另一个用于 VLAN 20,并将它们链接到父接口。为了使这些接口正常工作,你为每个接口分配了一个唯一的 IP 地址并激活了它们。最后,通过使用 ip a 命令验证新创建的 VLAN 接口是否成功创建、配置了正确的 IP 地址并已在网络上激活,完成了整个过程。



