千家信息网

如何解析Linux Network Namespace

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章给大家介绍如何解析Linux Network Namespace,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux Network Namespace (netns
千家信息网最后更新 2025年12月01日如何解析Linux Network Namespace

这篇文章给大家介绍如何解析Linux Network Namespace,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Linux Network Namespace (netns) 详解

Network Namespace (以下简称netns)是Linux内核提供的一项实现网络隔离的功能,它能隔离多个不同的网络空间,并且各自拥有独立的网络协议栈,这其中便包括了网络接口(网卡),路由表,iptables规则等。例如大名鼎鼎的docker便是基于netns实现的网络隔离,今天我们就来手动实验一下netns的隔离特性。

使用方式

使用ip netns help查看使用帮助

Usage: ip netns list       ip netns add NAME       ip netns set NAME NETNSID       ip [-all] netns delete [NAME]       ip netns identify [PID]       ip netns pids NAME       ip [-all] netns exec [NAME] cmd ...       ip netns monitor       ip netns list-id

开始实验

我们将要构建如下图的网络

首先我们添加两个tap设备并配置上IP信息,然后添加两个netns,最后将tap设备移动到netns中

# 添加并启动虚拟网卡tap设备ip tuntap add dev tap0 mode tap ip tuntap add dev tap1 mode tap ip link set tap0 upip link set tap1 up# 配置IPip addr add 10.0.0.1/24 dev tap0ip addr add 10.0.0.2/24 dev tap1# 添加netnsip netns add ns0ip netns add ns1# 将虚拟网卡tap0,tap1分别移动到ns0和ns1中ip link set tap0 netns ns0ip link set tap1 netns ns1

在宿主机器上使用ping 10.0.0.1测试与tap0的网络连通性

PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.^C--- 10.0.0.1 ping statistics ---2 packets transmitted, 0 received, 100% packet loss, time 58ms

在宿主机器上使用ping 10.0.0.2测试与tap1的网络连通性

ping 10.0.0.2PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.^C--- 10.0.0.2 ping statistics ---2 packets transmitted, 0 received, 100% packet loss, time 36ms

> 由于长时间未收到ICMP的回复报文,我使用Ctrl+C退出了。

使用ip netns exec ns0 ping 10.0.0.2在命名空间ns0中测试与tap1的网络连通性

connect: 网络不可达

使用ip netns exec ns1 ping 10.0.0.1在命名空间ns1中测试与tap0的网络连通性

connect: 网络不可达

> 在netns中执行命令有两种方式,一种是先在宿主机器上执行ip netns exec bash进入netns,然后就可以像是在本机一样执行命令了。另一种是每次在宿主机器上使用完整的命令,为了明显区分,我们这里都使用完整的命令,例如ip netns exec ns0 ping 10.0.0.2的含义为在命名空间ns0中执行ping 10.0.0.2命令

可以看到在宿主机器上访问netns是丢包,而在netns中互相访问是网络不可达了,这是为什么呢?让我们来检查一下netns吧。

使用ip netns exec ns0 ip a在ns0中查看网卡

1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:0016: tap0:  mtu 1500 qdisc noop state DOWN group default qlen 1000    link/ether 42:ad:98:a2:cc:81 brd ff:ff:ff:ff:ff:ff

使用ip netns exec ns1 ip a在ns1中查看网卡

1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:0017: tap1:  mtu 1500 qdisc noop state DOWN group default qlen 1000    link/ether 12:06:1d:06:41:57 brd ff:ff:ff:ff:ff:ff

可以看到不仅本地环回lo和tap设备的状态都是DOWN,甚至就连tap设备的IP信息也没有了,这是因为在不同的网络命名空间中移动虚拟网络接口时会重置虚拟网络接口的状态。

我们将ns0和ns1中的相关设备都重新启动并配置上IP

ip netns exec ns0 ip link set lo upip netns exec ns0 ip link set tap0 upip netns exec ns0 ip addr add 10.0.0.1/24 dev tap0ip netns exec ns1 ip link set lo upip netns exec ns1 ip link set tap1 upip netns exec ns1 ip addr add 10.0.0.2/24 dev tap1

首先我们测试一下netns中本地网络是否正常

使用ip netns exec ns0 ping 10.0.0.1在命名空间ns0中测试本地网卡是否启动

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.036 ms64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.033 ms64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.084 ms64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.044 ms^C--- 10.0.0.1 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 65msrtt min/avg/max/mdev = 0.033/0.049/0.084/0.021 ms

使用ip netns exec ns1 ping 10.0.0.2在命名空间ns1中测试本地网卡是否启动

PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.033 ms64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.034 ms64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.065 ms64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.035 ms^C--- 10.0.0.1 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 65msrtt min/avg/max/mdev = 0.033/0.049/0.084/0.021 ms

可以看出本地网络没有问题,然后我们再来测试一下两个netns之间的网络连通性

使用ip netns exec ns0 ping 10.0.0.2在命名空间ns0中测试与tap1的网络连通性

PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.^C--- 10.0.0.2 ping statistics ---3 packets transmitted, 0 received, 100% packet loss, time 84ms

使用ip netns exec ns1 ping 10.0.0.1在命名空间ns1中测试与tap0的网络连通性

PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.^C--- 10.0.0.1 ping statistics ---2 packets transmitted, 0 received, 100% packet loss, time 30ms

可以看出没有任何ICMP回复包,netns确实把在同一台主机上的两张虚拟网卡隔离起来了。在这里我们只是简单的使用ping命令来测试网络的连通性,实际上可以做到更多,例如修改某一个netns的路由表或者防火墙规则,完全不会影响到其他的netns,当然也不会影响到宿主机器,在这里由于篇幅原因就不再展开实验了,感兴趣的同学可以实验一下。

关于如何解析Linux Network Namespace就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

网络 测试 空间 网卡 命令 宿主 机器 设备 隔离 实验 两个 接口 更多 帮助 移动 配置 不同 信息 兴趣 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全知识网文怎么写 向日葵服务器在哪里买 宝山区良好软件开发 大理啃屯网络技术有限公司 广告设计和软件开发哪个好 极氪001软件开发外包给 资金盘软件开发违法吗 阿里云图数据库 garnos 常用数据库建模 阳江软件开发多少钱 怎么关掉腾讯网络安全中心 个例报告以数据库的形式管理 数据库如何防止绕过权限 某软件开发企业系一般纳税人 sql数据库实例属性无法显示 后端服务器哪种系统好 软件开发以后发展前景 arcgis可以合并数据库吗 逻辑推理软件开发者杀死玩家 神通数据库创建用户和模式 软件开发质量经验分享 工商数据企业数据库是什么 花雨庭服务器如何和好友一起玩 键值数据库和文档数据库的区别 江山企业产品追溯软件开发 加拿大地区 数据库 网络安全手抄报怎么写语言 软件开发和执行过程 国家网络安全 小说 现金巴士软件开发咋样
0