【翻译】Linux网络名字空间(Network Namespace)介绍

简介:

翻译自 http://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/

在这篇文章中,我将向您介绍Linux网络名字空间的概念。虽然它现在似乎有点深奥的,但相信我,向你介绍网络名字空间是有原因的——如果你像我一样,想更好的理解OpenStack,你迟早会再次遇到网络名字空间。

那么什么是网络民资空间?一般的说法是包括了Linux共享的一组网络接口和路由表条目的装置。您可以修改路由表条目使用策略路由。(这里有我写的介绍和可能的策略路由用例),但这并没有从根本上改变网络接口和路由表/条目共享整个操作系统。网络名字空间改变这一基本假设。通过网络名字空间,你能有不同并独立的网络接口和路由表,它们各自独立运作

这个概念通过一些例子来说明可能是最好的。沿途我会介绍一些新想法。首先,我需要提供一些假设。

假设

在这个例子中,我会使用Ubuntu Server 12.04.3 LTS.请注意不同的Linux发行版对网络名字空间支持上的不同。Ubuntu支持这个,但是RedHat不支持。(我不确定Fedora,如果你知道,可以在评论中说出来。)如果你想使用网络名字空间,请确保你的Linux发行版支持。

另外,我回假设你使用root账户运行,或者你会在必要的时候加上sudo来执行命令行。

创建和列出网络名字空间

创建一个网络名字空间是相当容易的。仅仅需要使用这个命令:

1 ip netns add <new namespace name>

打个比方,你想要创建一个名为“blue”的名字空间。你会使用这个命令:

1 ip netns add blue

使用这个命令验证网络名字空间是否创建:

1 ip netns list

你应该能看到你的网络名字空间被列出,你可以使用它们了。

 给网络名字空间分配接口

创建网络名字空间仅仅是个开始,接下来的部分是给名字空间指定接口。然后为网络连接配置这些接口。有一个注意,就是在我之前探索网络名字空间的时候发现,你无法把物理接口分配给一个名字空间。到底怎样才呢个使用它们呢,然后呢?

原来你只能分配虚拟以太网接口(veth)到网络名称空间。虚拟以太网接口是一个有趣的结构。它总是一对一对的,他们像一个相连的管道——无论什么从其中一个veth接口进去,就会从另一个等同的接口出来。因此,您可以使用veth接口把一个网络名名字空间链接到存在物理接口的“默认”或“全局”网络名字空间。

让我们来看看这是如何实现的。首先,您要创建一对veth:

1 ip link add veth0 type veth peer name veth1

我发现一些站点重复这个命令去创建veth1然后链接到veth0,但是我的测试表明,只要使用上面这个命令,会创建一对端口,并且自动建立连接。当然,你可以用其它名字代替veth0和veth1,如果你需要的话。

你可以使用这个命令验证veth对被创建。

1 ip link list

你应该看到一对veth接口(使用你在上面的命令中指定的名称)列出。现在它们都属于”默认”或“全局”名字空间,和物理接口一道。

假设你想把全局名字空间链接到blue名字空间。这样做,你需要移动一个veth接口道blue名字空间中,可以使用这个命令。

1 ip link set veth1 netns blue

如果你再次运行ip link list 命令,你会看到veth1接口从列表中消失了。现在它在blue名字空间中,因此你需要运行下面的命令来看。

1 ip netns exec blue ip link list

哇哦!这是一个有点复杂的命令,让我们慢慢讲:

  • 在第一部分,ip nets exec,这是在不同网络名字空间执行命令的方法。
  • 接下来是这个命令应该运行在的特定名称空间。(在这个例子中,是blue名字空间)
  • 最后,你需要实际的命令在远程名字空间中执行。在这个例子中,你想要查看在blue名字空间的接口,因此你运行 ip link list。

当你运行那个命令,你就能看到一个回环接口和你刚才移入的veth1接口。

在网络名字空间配置接口

现在,veth1已经移动到蓝色的名称空间,我们需要去实际配置那个接口。再一次,我们会使用 ip netns exec 命令,这一次在blue名字空间中配置veth1接口。

1 ip netns exec blue ifconfig veth1 10.1.1.1/24 up

和之前一样,这个命令的格式如下:

1 ip netns exec <network namespace> <command to run against that namespace>

在这个例子里,你使用ifconfig给veth1接口指定了一个IP地址,并且开启了这个接口。(注解:你可以使用 ip addr , ip route ,以及 ip link 命令来完成相同的事情)

一旦veth1接口开启,你能仅仅通过一些不同的命令验证blue名字空间中的网络设置是完全隔离的。打个比方,让我们确定你的”全局”名字空间有物理接口在 172.16.1.0/24 范围,你的veth1接口在一个隔离的名字空间,并且分配了10.1.1.0/24范围。你可以使用这些命令验证网络名字空间是如何保证网络配置隔离的:

  • ip addr list 在全局名字空间没有显示任何10.1.1.0/24有关的接口或者地址。
  • ip netns exec blue ip addr list 将仅仅显示10.1.1.0/24有关的接口和地址,也不会显示任何来自全局名字空间的接口或地址。
  • 同样的,ip route list 在每个名称空间将显示不同的路由表条目,包括不同的默认网关。

链接网络名字空间到物理网络

这部分花了我一些时间。我没法解释为什么,但是它这样运作了。一旦我搞懂了,一旦我搞懂了,它是显而易见的。让网络名字空间链接到物理网络的就是使用网桥。在我的例子中,我是用一个Open vSwitch(OVS)桥,但是一个标准Linux网桥也能工作的很好。把一个或多个物理接口和veth接口一样放到网桥中,然后,啪,它们就能用了。当然,如果你有不同的名字空间,你可能想要/需要将它们连接到不同的物理网络或不同的vlan。

这就是一个对Linux网络名字空间的介绍。

转载请注明:旅途@KryptosX » 【翻译】Linux网络名字空间(Network Namespace)介绍

目录
相关文章
|
2月前
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
99 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
4月前
|
机器学习/深度学习 数据采集 算法
贝叶斯状态空间神经网络:融合概率推理和状态空间实现高精度预测和可解释性
本文将BSSNN扩展至反向推理任务,即预测X∣y,这种设计使得模型不仅能够预测结果,还能够探索特定结果对应的输入特征组合。在二元分类任务中,这种反向推理能力有助于识别导致正负类结果的关键因素,从而显著提升模型的可解释性和决策支持能力。
410 42
贝叶斯状态空间神经网络:融合概率推理和状态空间实现高精度预测和可解释性
|
3月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
234 18
|
3月前
|
网络协议 关系型数据库 Linux
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
在App Service for Linux环境中,无法像Windows一样直接使用网络排查工具抓包。本文介绍了如何通过TCPDUMP在Linux环境下抓取网络包,包括SSH进入容器、安装tcpdump、执行抓包命令及下载分析文件的完整操作步骤。
201 5
|
3月前
|
XML JSON JavaScript
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
122 0
从解决跨域CSOR衍生知识 Network 网络请求深度解析:从快递系统到请求王国-优雅草卓伊凡
|
4月前
|
Web App开发 网络协议 Linux
【Linux】网络基础
TCP/IP五层模型是网络通信的基础框架,将复杂的数据传输过程分为物理层、数据链路层、网络层、传输层和应用层,每层各司其职,协同完成远程通信。该模型确保了不同设备和网络之间的互联互通,是现代互联网运行的核心机制。
305 5
|
4月前
|
网络协议 Linux 开发者
深入Linux中UDP网络通信机制编程探索
以上步骤概述了Linux中UDP网络通信的编程机制。在实现时,因关注细节和上下文环境可能有所调整,但大致流程是一致的。这些知识片段旨在帮助开发者快速上手Linux下的UDP编程,并提供可靠的信息作为编程的基础。在编程实践中,应结合实际业务需求,设计合适的数据传输协议,确保数据的正确性和实时性。
129 0
|
6月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
194 18
|
6月前
|
Linux 数据安全/隐私保护
使用Linux命令行接入无线网络Wi-Fi的示例。
现在,你已经使用命令行成功地连接到 Wi-Fi 网络了。这两个示例涵盖了用 `nmcli` 和 `wpa_supplicant` 连接无线网络的常见场景,让你能够不依赖图形化界面来完成这个任务。在日常使用中熟练掌握这些基本操作能增强你对 Linux 系统的理解,帮助你更有效地处理各种问题。
454 12
|
6月前
|
安全 Ubuntu Linux
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
220 0
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估