当前位置: 首页 > news >正文

Linux Namespace(网络命名空间)系列三 --- 使用 Open vSwitch 和 VLAN 标签实现网络隔离

文章目录

  • 步骤 1:创建网络命名空间和虚拟接口
  • 步骤 2:将接口分配到命名空间
  • 步骤 3:将接口连接到 OVS 桥并设置 VLAN 标签
  • 步骤 4:启用主机端接口
  • 步骤 5:配置命名空间中的接口
  • 步骤 6:测试连通性
  • 总结

在这篇文章中,我将继续探讨 Linux 网络命名空间(network namespace)和 Open vSwitch(OVS)的应用。本篇是“Linux Namespace 系列”的第三部分,建立在系列二的基础上,重点介绍如何通过 OVS 的 VLAN 标签功能实现网络隔离和通信。以下是实验步骤和结果,供大家参考。

+-----------------------------------------------------------+
|                          Host                             |
|                                                           |
|           +--------------------------------+              |
|           |              OVS1              |              |
|           |     (Open vSwitch Bridge)      |              |
|           +--------------------------------+              |
|           | Port: veth-n1    Port: veth-n2 |              |
|           | (VLAN 10)        (VLAN 10)     |              |
|           +--------------+  +-------------+               |
|                          |  |                             |
|                          |  |                             |
+-----------------------------------------------------------+
                          |  |
                          |  |
+--------------------+    |  |    +--------------------+
| net1 Namespace     |    |  |    | net2 Namespace     |
|                    |    |  |    |                    |
|   +------------+   |    |  |    |   +------------+   |
|   |  eth0-n1   |   |    |  |    |   |  eth0-n2   |   |
|   |192.168.21.1|   |    |  |    |   |192.168.21.2|   |
|   +------------+   |    |  |    |   +------------+   |
+--------------------+    |  |    +--------------------+
                          |  |

步骤 1:创建网络命名空间和虚拟接口

首先,我创建了两个新的网络命名空间 net1 和 net2,并为它们分别创建了一对虚拟以太网(veth)接口:

ip netns add net1
ip netns add net2
ip link add eth0-n1 type veth peer name veth-n1
ip link add eth0-n2 type veth peer name veth-n2

eth0-n1 和 veth-n1 是一对,eth0-n2 和 veth-n2 是另一对。

步骤 2:将接口分配到命名空间

将 veth 接口的一端分配到对应的命名空间:

ip link set eth0-n1 netns net1
ip link set eth0-n2 netns net2

步骤 3:将接口连接到 OVS 桥并设置 VLAN 标签

我将主机端的 veth-n1 和 veth-n2 添加到已有的 OVS1 桥,并为它们设置相同的 VLAN 标签 10:

ovs-vsctl add-port OVS1 veth-n1
ovs-vsctl add-port OVS1 veth-n2
ovs-vsctl set port veth-n1 tag=10
ovs-vsctl set port veth-n2 tag=10

查看 OVS 配置:

b1223b21-2efa-4147-bea2-8faa93333652
    Bridge OVS1
        Port veth-n2
            tag: 10
            Interface veth-n2
        Port veth-g
            Interface veth-g
        Port veth-r
            Interface veth-r
        Port veth-n1
            tag: 10
            Interface veth-n1
        Port OVS1
            Interface OVS1
                type: internal
    ovs_version: "3.3.0"

可以看到,veth-n1 和 veth-n2 被分配了 VLAN 标签 10,而之前的 veth-g 和 veth-r(来自系列二)没有设置 VLAN 标签。

步骤 4:启用主机端接口

在主机上启用 veth-n1 和 veth-n2:

ip link set dev veth-n1 up
ip link set dev veth-n2 up

这确保了接口处于活动状态,可以通过 OVS 桥进行通信。

步骤 5:配置命名空间中的接口

在 net1 命名空间中配置接口:

ip netns exec net1 bash
ip link set dev lo up
ip link set dev eth0-n1 up
ip link

输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
22: eth0-n1@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 4a:a0:18:a9:fc:1a brd ff:ff:ff:ff:ff:ff link-netnsid 0

添加 IP 地址并查看路由:

ip address add 192.168.21.1/24 dev eth0-n1
ip route
192.168.21.0/24 dev eth0-n1 proto kernel scope link src 192.168.21.1

在 net2 命名空间中执行类似操作:

ip netns exec net2 bash
ip link set dev lo up
ip link set dev eth0-n2 up
ip link

输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
24: eth0-n2@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether a2:8f:5d:cc:c1:96 brd ff:ff:ff:ff:ff:ff link-netnsid 0

添加 IP 地址并查看路由:

ip address add 192.168.21.2/24 dev eth0-n2
ip route
192.168.21.0/24 dev eth0-n2 proto kernel scope link src 192.168.21.2

步骤 6:测试连通性

在 net1 中 ping net2 的 IP 地址:

ip netns exec net1 ping 192.168.21.2
PING 192.168.21.2 (192.168.21.2) 56(84) bytes of data.
64 bytes from 192.168.21.2: icmp_seq=1 ttl=64 time=0.376 ms
64 bytes from 192.168.21.2: icmp_seq=2 ttl=64 time=0.062 ms

结果显示 net1 和 net2 之间可以成功通信,因为它们的接口通过 OVS1 桥连接,且都属于 VLAN 10。

总结

通过这个实验,我在系列二的基础上进一步扩展了网络配置,利用 OVS 的 VLAN 标签功能将 net1 和 net2 隔离在 VLAN 10 中,并验证了它们之间的通信。值得注意的是,未设置 VLAN 标签的接口(如系列二中的 veth-r 和 veth-g)与 VLAN 10 的接口无法直接通信,体现了 VLAN 的隔离效果。

这个实验展示了 Linux 网络命名空间和 OVS 在网络分段中的实际应用。下一篇文章可能会探讨更复杂的场景,例如跨 VLAN 通信或与容器网络的集成。希望这篇内容对学习网络隔离的朋友有所帮助!

相关文章:

  • 【Centos7搭建Zabbix4.x监控HCL模拟网络设备:zabbix-server搭建及监控基础05
  • 专题|Python贝叶斯网络BN动态推理因果建模:MLE/Bayes、有向无环图DAG可视化分析呼吸疾病、汽车效能数据2实例合集
  • 实战指南:使用 OpenRewrite 将 Spring Boot 项目从 JDK 8 升级到 JDK
  • 嵌入式项目:利用心知天气获取天气数据实验方案
  • 从指令集鸿沟到硬件抽象:AI 如何重塑手机与电脑编程语言差异——PanLang 原型全栈设计方案与实验性探索1
  • Coze:一场颠覆传统编程的「无界革命」
  • 企业级前端架构设计与实战
  • 电子签的法律效力、业务合规与监管难点
  • 3、linux基本操作1
  • MySQL数据库基础篇
  • 【MySQL】日志
  • QT三 自定义控件
  • Web PKI现行应用、标准
  • 走进底层-Java中的IO流
  • JavaScript-作用域、函数进阶、解构赋值、filter详解
  • 弹珠堆放————java
  • 数据分析面试--京东
  • DRV8323芯片电机驱动芯片常见硬件连接线路的简介
  • Android开发layer-list
  • 【三十七周】文献阅读:通过具有长期融合池化的双流卷积网络进行的第一人称动作识别
  • 坐标大零号湾科创策源区,上海瑞金医院闵行院区正式启动建设
  • 中国田径巡回赛西安站完赛:男子跳远石雨豪夺冠
  • 视频丨为救心梗同学缺席职教高考的小伙姜昭鹏完成补考
  • 工人日报:应对“职场肥胖”,健康与减重同受关注
  • 总奖金池百万!澎湃与七猫非虚构写作与现实题材征文大赛征稿启动
  • 中国情怀:时代记录与家国镜相|澎湃·镜相第三届非虚构写作大赛暨七猫第六届百万奖金现实题材征文大赛征稿启事