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.pswp.cn/web/11871.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11871.shtml
英文地址,請注明出處:http://en.pswp.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;&#…