合聚咖

合聚咖

Linux network namespaces (网络命名空间)

admin

Linux Namespace 是 Linux 系统中实现资源隔离的一种方式,其中包括了 Cgroup, IPC, Network, Mount, IPD, User, UTS 等七种资源抽象方式。本文聚焦于 Network Namespace,介绍其如何实现网络资源的分割与隔离。

Network Namespace 允许系统创建多个网络接口和路由表实例,使之相互独立。在单个 Network Namespace 内运行的进程拥有独享的网络设备、路由表和防火墙规则。

传统的 Linux 系统在系统层面上共享同一组网络接口和路由表条目,通过策略路由来修改路由表,但借助 Network Namespaces,可以实现多个实例的独立网络环境。

创建及管理 Linux Network Namespaces

所有操作需在 root 权限下进行。

创建新 Namespace:

例如,创建一个名为 "blue" 的 Namespace。

使用命令查看当前的 Namespace 列表。

为 Network Namespace 指定接口(interface)

在创建 Namespace 后,需为其分配及配置接口,实现所需网络连接。以虚拟以太网接口(veth)为例,它总是成对出现,一端与物理接口相连,另一端在 Namespace 内。veth 接口可以作为桥梁,连接 Namespace 与外部网络。

示例中,首先创建 veth 接口对,然后通过 veth 连接到物理接口所在的 "default" 或 "global" Namespace,实现自定义 Namespace 与外部网络的联通。

配置 Network Namespace 中的接口

为蓝色 Namespace 的 veth 接口分配 IP 地址、启动接口。

通过一系列命令验证接口确实独立于全局 Namespace,并具有独立的网络配置。

将 Network Namespace 连接到物理网络

连接 Network Namespace 到物理网络需要通过网桥(例如 Open vSwitch bridge 或 linux bridge)实现。只需将物理接口和 veth 接口连接到网桥即可。

网桥作为连接多个网络或网段的设备,让它们看起来像是处于同一网络。创建网桥并连接外部 veth 接口,使蓝色 Namespace 能够通过网桥与外部网络通信。

在 Namespace 中运行进程

网络环境创建后,可以将进程放入特定 Namespace 中运行,实现进程间的网络隔离。

通过上述方法,可以创建和管理独立的网络环境,实现资源隔离和进程间的网络隔离,提高系统安全性和灵活性。