Linux中的网络隔离功能 netns

Network Namespace(netns) 是Linux内核提供的一项实现网络隔离的功能,它能隔离多个不同的网络空间,并且各自拥有独立的网络协议栈。通过 namespace 可以隔离容器的进程 PID、文件系统挂载点、主机名等多种资源,它可以为不同的命名空间从逻辑上提供独立的网络协议栈,具体包括网络设备(网卡)、路由表、arp表、iptables、以及套接字(socket)等。使得不同的网络空间就都好像运行在独立的网络中一样。如大名鼎鼎的docker便是基于netns实现的网络隔离。

1、ip netns 帮助文档

A network namespace is logically another copy of the network stack, with its own routes, firewall rules, and network devices.
ip-netns - process network namespace management.

ip netns help
man ip-netns
man ip netns
=========================================
Usage: 
ip [ OPTIONS ] netns  { COMMAND | help }
ip netns [ list ]
ip netns add NETNSNAME
ip [-all] netns delete [ NETNSNAME ]
ip netns set NETNSNAME NETNSID
ip netns identify [ PID ]
ip netns pids NETNSNAME
ip [-all] netns exec [ NETNSNAME ] command...
ip netns monitor
ip netns list-id1.将 {网卡名字} 移动到 {网络命名空间}
ip link set {网卡名字} netns {网络命名空间}
2.将接口iner1从网络名称空间ns2移动到网络名称空间ns1
ip netns exec ns2 ip link set iner1 netns ns1
3.将接口iner1从名称空间ns2移动到Linux上默认网络名称空间

2、ip netns 实践

在这里插入图片描述

2.1、添加两个tap设备并配置IP信息

添加两个tap设备并配置IP信息

1.添加并启动虚拟网卡tap设备
ip tuntap add dev tap0 mode tap
ip tuntap add dev tap1 mode tap
ip link set tap0 up
ip link set tap1 up2.配置IP
ip addr add 10.0.0.1/24 dev tap0
ip addr add 10.0.0.2/24 dev tap1

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

ping -c 1 10.0.0.1
===========================================================
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.032 ms--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.032/0.032/0.032/0.000 ms

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

ping -c 1 10.0.0.2
===========================================================
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.046 ms--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.046/0.046/0.046/0.000 ms

2.2、添加两个netns,移动tap设备到netns中

然后添加两个netns,最后将tap设备移动到netns中

3.添加netns
ip netns add ns0
ip netns add ns14.查看已存在的netns
ip netns list5.将虚拟网卡tap0,tap1分别移动到ns0和ns1中
ip link set tap0 netns ns0
ip link set tap1 netns ns16.移动后查看netns中的网络接口网络配置丢失
【在不同的网络命名空间中移动虚拟网络接口时会重置虚拟网络接口的状态】
ip netns exec ns0 ip addr
ip netns exec ns1 ip addr7.启动netns中网络接口
ip netns exec ns0 ip link set tap0 up
ip netns exec ns1 ip link set tap1 up8.重新配置netns中网络接口的IP
ip netns exec ns0 ip addr add 10.0.0.1/24 dev tap0
ip netns exec ns1 ip addr add 10.0.0.2/24 dev tap19.添加netns
ip netns exec ns0 ip addr
ip netns exec ns1 ip addr

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

ping -c 1 10.0.0.1
===========================================================
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.--- 10.0.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

宿主机上使用测试与tap0 10.0.0.2的网络连通性 不通

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

在命名空间ns0中测试与tap0的网络连通性 不通

ip netns exec ns0 ping -c 1 10.0.0.1

在命名空间ns0中测试与tap1的网络连通性 不通

ip netns exec ns0 ping -c 1 10.0.0.2
====================================
connect: Network is unreachable

在命名空间ns1中测试与tap1的网络连通性 不通

ip netns exec ns1 ping -c 1 10.0.0.2

在命名空间ns1中测试与tap0的网络连通性 不通

ip netns exec ns1 ping -c 1 10.0.0.1
====================================
connect: Network is unreachable

在netns中执行命令有两种方式:
法1::先在宿主机器上执行 ip netns exec <netns name> bash 进入netns的命令行窗口,然后就可以像是在本机一样执行命令了。
法2:每次在宿主机器上使用完整命令。例: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: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
16: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether 42:ad:98:a2:cc:81 brd ff:ff:ff:ff:ff:ff

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

1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
17: tap1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/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 up
ip netns exec ns0 ip link set tap0 up
ip netns exec ns0 ip addr add 10.0.0.1/24 dev tap0ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set tap1 up
ip 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 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.033 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.084 ms
64 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 65ms
rtt 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 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.065 ms
64 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 65ms
rtt 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,当然也不会影响到宿主机器,在这里由于篇幅原因就不再展开实验了,感兴趣的同学可以实验一下。下一节我们将学习另一个网络设备veth pair,使用它来把两个netns连接起来,让两个隔离的​netns之间可以互相通信。


初心易得,始终难守;不忘初心,方得始终。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

水利行业工程设计资质标准

甲级资质&#xff1a; 具有独立企业法人资格。社会信誉良好&#xff0c;注册资本不少于600万元人民币。企业完成过的工程设计项目应满足所申请行业主要专业技术人员配备表中对工程设计类型业绩考核的要求&#xff0c;且要求考核业绩的每个设计类型的大型项目工程设计不少于1项…

vscode调试Electron+ts

调试Electronjs 调试Electronjs: https://www.electronjs.org/zh/docs/latest/tutorial/debugging-vscode 调试Electronts 首先看一下&#xff0c;我的目录结构。目录结构决定了launch.json中的路径部分。我将在项目根目录下进行调试&#xff0c;项目根目录下包含electron代码…

探索QChart:Qt中的数据可视化艺术

目录标题 1. QChart概述2. 创建QChart对象3. 添加数据系列&#xff08;Series&#xff09;4. 定制图表外观5. 交互与动画6. 图表布局与管理7. 实例代码与解析8. 总结 在数字化的世界里&#xff0c;数据是新的石油。然而&#xff0c;原始数据本身往往难以理解&#xff0c;数据可…

数据可视化(十一):Pandas餐饮信息表分析——交叉表、离群点分析,多维分析等高级操作

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

golang创建式设计模式------单例模式

目录导航 1.单例模式1)什么是单例模式 2)使用场景3)实现方式1.懒汉式单例模式2.饿汉式3.双重检查式4.sysc.Once式 4)实践案例5)优缺点分析 1.单例模式 1)什么是单例模式 单例模式(Singleton Pattern)是一种常用的设计模式。单例模式的类提供了一种访问其唯一对象的方法&#…

RAG系列论文

检索增强模型&#xff1a; 提出Atlas &#xff1a;预训练检索增强模型 Few-shot Learning with Retrieval Augmented Language Models 链接 根据输入问题的不同&#xff0c;挑选合适的提示词 Learning To Retrieve Prompts for In-Context Learning 链接 RAG&#xff1a; M…

【数据结构】线性表--顺序表(二)

文章目录 1、什么是线性表2、线性表的基本操作3、顺序表3.1、顺序表的定义3.2、顺序表的实现方式&#xff1a;静态分配3.3、顺序表的实现方式&#xff1a;动态分配3.4、顺序表的特点3.5、顺序表的初始化与插入操作3.6、顺序表的删除与查询 1、什么是线性表 ​ 线性表是具有相同…

【Python快速上手(二十二)】

目录 Python快速上手&#xff08;二十二&#xff09;Python3 使用数据库-pymysql1. 创建数据库连接2. 创建数据表3. 插入数据4. 查询数据5. 使用 WHERE 条件语句6. 排序7. 删除记录8. 更新表数据9. 删除表10.异常处理总结 Python快速上手&#xff08;二十二&#xff09; Pytho…

通过EXCEL控制PLC启停电机的一种方法

概述 本例将介绍用微软EXCEL电子表格控制西门子S7-1200 PLC实现电机启停的一种方法。 第1步&#xff1a; 添加PLC设备&#xff0c;选择西门子S7-1214C CPU&#xff0c;设置IP地址&#xff1a;192.168.18.18&#xff0c;子网掩码&#xff1a;255.255.255.0。 第2步&#xff1a…

vue3中通过自定义指令实现loading加载效果

前言 在现代Web开发中&#xff0c;提升用户体验一直是开发者们追求的目标之一。其中&#xff0c;一个常见的场景就是在用户与应用程序进行交互时&#xff0c;特别是当进行异步操作时&#xff08;如网络请求&#xff09;&#xff0c;为用户提供即时的反馈&#xff0c;避免用户因…

Flet初体验:Python跨平台开发新选择

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 初识Flet 📒📝 安装与配置📝 构建第一个Flet应用📝 Flet打包:跨平台的魔法📝 Flet与FastAPI的结合🎈 总结⚓️ 相关链接 ⚓️📖 介绍 📖 “探索未知,拥抱创新,Flet让我在应用开发的世界中找到了新的航标。”…

02 | 该如何选择消息队列?

RabbitMQ RabbitMQ 一个比较有特色的功能是支持非常灵活的路由配置&#xff0c;和其他消息队列不同的是&#xff0c;它在生产者&#xff08;Producer&#xff09;和队列&#xff08;Queue&#xff09;之间增加了一个 Exchange 模块&#xff0c;你可以理解为交换机。 问题 Ra…

【循环程序设计-谭浩强适配】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a;纯干货、纯干货、纯干货&#xff01;&#xff01;…

浅谈电动汽车充电站的电气安全

1 引言 1月14日日上午10点左右&#xff0c;青岛市市北区辽宁路63号公交停车场内&#xff0c;一辆报废公交车突然起火&#xff0c;由于大风天气&#xff0c;大火很快引燃了停在旁边的几辆报废车。消防人员快速赶到&#xff0c;迅速控制住火势。11时30分&#xff0c;停车场内的…

鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main

阅读之前的说明 先说明&#xff0c;本篇很长&#xff0c;也很枯燥&#xff0c;若不是绝对的技术偏执狂是看不下去的.将通过一段简单代码去跟踪编译成ELF格式后的内容.看看ELF究竟长了怎样的一副花花肠子&#xff0c;用readelf命令去窥视ELF的全貌&#xff0c;最后用objdump命令…

Image to Music V2 :只需上传一张照片,自动转换成与图片内容匹配的音频!

前言 我们之前肯定已经见过了很多文本生成图片、文本生成声音以及AI翻唱歌曲 等多种AI产品&#xff08;模型&#xff09;。 其实音乐和图片从某种意义上来说都是艺术创作的一种形式&#xff0c;它们可以相互配合&#xff0c;共同呈现出一种更加丰富、感性的表达方式。 将图片…

弘君资本:人形机器人概念走强,盛通股份涨停,怡合达、鼎智科技等拉升

人形机器人概念14日盘中拉升走高&#xff0c;到发稿&#xff0c;盛通股份涨停&#xff0c;怡合达、鼎智科技涨约6%&#xff0c;索辰科技、伟创电气、丰立智能等涨超4%。 音讯面上&#xff0c;5月13日&#xff0c;宇树发布人形智能体Unitree G1&#xff0c;身高127cm,体重35kg&…

[240514] OpenAI 发布 GPT-4o,人机交互的历史性时刻 | 苹果芯片进军服务器剑指AI​ | 谷歌大会以AI为主

目录 OpenAI 发布 GPT-4o&#xff0c;人机交互的历史时刻苹果芯片进军服务器&#xff0c;剑指生成式 AI2024年谷歌开发者大会将围绕 AI 展开 OpenAI 发布 GPT-4o&#xff0c;人机交互的历史时刻 OpenAI 发布了 GPT-4o&#xff0c;大家一直都想要现在终于等到的语音助手 : 勿需…

618值得入手的数码产品怎么选?2024 买过不后悔的数码好物分享

在数字时代的浪潮中&#xff0c;每一次的购物狂欢节都如同一场科技盛宴&#xff0c;让我们有机会接触到最前沿、最实用的数码产品&#xff0c;而“618”无疑是这场盛宴中最为引人瞩目的日子之一。面对琳琅满目的商品&#xff0c;如何选择那些真正值得入手的数码好物&#xff0c…

易宝OA-ExecuteQueryForDataSetBinary处sql注入

免责声明&#xff1a; 本文内容为学习笔记分享&#xff0c;仅供技术学习参考&#xff0c;请勿用作违法用途&#xff0c;任何个人和组织利用此文所提供的信息而造成的直接或间接后果和损失&#xff0c;均由使用者本人负责&#xff0c;与作者无关&#xff01;&#xff01;&#…