案例:使用網絡命名空間模擬多主機并通過網橋訪問外部網絡

在這里插入圖片描述


案例目標
  1. 隔離性:在同一臺物理機上創建兩個獨立的網絡命名空間(模擬兩臺主機),確保其網絡配置完全隔離。
  2. 內部通信:允許兩個命名空間通過虛擬設備直接通信。
  3. 外部訪問:通過宿主機的網橋和 NAT 規則,使兩個命名空間能夠訪問外部互聯網。

核心要求
  • 使用 ip netnsveth pair 實現網絡隔離。
  • 通過網橋(Bridge)連接命名空間與宿主機物理網絡。
  • 配置 NAT 實現外網訪問。
  • 驗證隔離性、內部通信及外部連通性。

實現步驟


步驟 1:清理舊配置(如有)
# 刪除可能存在的舊命名空間和網橋
sudo ip netns delete ns1 2>/dev/null
sudo ip netns delete ns2 2>/dev/null
sudo ip link delete br0 2>/dev/null
sudo ip link delete veth1-host 2>/dev/null
sudo ip link delete veth2-host 2>/dev/null

步驟 2:創建網絡命名空間
# 創建兩個命名空間 ns1 和 ns2
sudo ip netns add ns1   # 模擬主機 A
sudo ip netns add ns2   # 模擬主機 B

步驟 3:創建網橋并連接物理網絡
# 1. 創建網橋 br0
sudo ip link add br0 type bridge
sudo ip link set br0 up# 2. 將物理網卡 eth0 綁定到網橋(假設 eth0 是宿主機的外網接口)
sudo ip link set eth0 master br0
sudo dhclient br0   # 自動獲取 IP(或手動分配:sudo ip addr add 192.168.1.100/24 dev br0)

步驟 4:為每個命名空間創建 veth pair 并連接網橋
# 為 ns1 創建 veth pair(宿主機端:veth1-host,命名空間端:veth1-ns)
sudo ip link add veth1-host type veth peer name veth1-ns
sudo ip link set veth1-host master br0   # 宿主機端加入網橋
sudo ip link set veth1-host up# 為 ns2 創建 veth pair(宿主機端:veth2-host,命名空間端:veth2-ns)
sudo ip link add veth2-host type veth peer name veth2-ns
sudo ip link set veth2-host master br0   # 宿主機端加入網橋
sudo ip link set veth2-host up# 將 veth 的另一端分配到命名空間
sudo ip link set veth1-ns netns ns1
sudo ip link set veth2-ns netns ns2

步驟 5:配置命名空間的網絡
# 配置 ns1 的網絡
sudo ip netns exec ns1 ip addr add 192.168.1.101/24 dev veth1-ns
sudo ip netns exec ns1 ip link set veth1-ns up
sudo ip netns exec ns1 ip route add default via 192.168.1.1  # 假設網關為 192.168.1.1# 配置 ns2 的網絡
sudo ip netns exec ns2 ip addr add 192.168.1.102/24 dev veth2-ns
sudo ip netns exec ns2 ip link set veth2-ns up
sudo ip netns exec ns2 ip route add default via 192.168.1.1

步驟 6:配置 NAT 允許外網訪問
# 1. 啟用 IP 轉發
sudo sysctl -w net.ipv4.ip_forward=1# 2. 添加 iptables NAT 規則(假設外網接口為 eth0)
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i br0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT

步驟 7:驗證網絡功能
# 1. 驗證 ns1 和 ns2 的互通性
sudo ip netns exec ns1 ping -c 3 192.168.1.102   # ns1 -> ns2
sudo ip netns exec ns2 ping -c 3 192.168.1.101   # ns2 -> ns1# 2. 驗證外網訪問能力
sudo ip netns exec ns1 ping -c 3 8.8.8.8        # ns1 訪問谷歌 DNS
sudo ip netns exec ns2 ping -c 3 8.8.8.8        # ns2 訪問谷歌 DNS# 3. 驗證宿主機無法直接訪問命名空間 IP
ping -c 3 192.168.1.101   # 應失敗(隔離性驗證)

最終網絡拓撲

宿主機網橋 br0 (IP: 自動獲取或手動配置)
│
├─ eth0 (物理網卡,通過 DHCP/NAT 訪問外網)
├─ veth1-host (連接到 ns1 的 veth1-ns, IP: 192.168.1.101)
└─ veth2-host (連接到 ns2 的 veth2-ns, IP: 192.168.1.102)

總結

實現目標回顧
  1. 隔離性:通過 ip netns 創建獨立命名空間,確保 ns1 和 ns2 的網絡配置互不影響。
  2. 內部通信:通過 veth pair 和網橋,兩個命名空間可直接通信(同一子網)。
  3. 外部訪問:通過網橋綁定物理網卡并配置 NAT,命名空間可訪問外網。
關鍵技術點
  • 網絡命名空間:隔離網絡協議棧(IP、路由表、設備)。
  • veth pair:跨命名空間通信的虛擬“網線”。
  • 網橋:連接多個網絡接口,模擬物理交換機。
  • NAT:通過 iptables 實現地址轉換,允許內網訪問外網。
應用場景
  • 容器網絡:Docker/Kubernetes 使用類似機制為容器提供網絡。
  • 多租戶測試:為不同租戶分配獨立網絡環境。
  • 安全實驗:隔離測試環境,防止實驗影響宿主機網絡。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899082.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899082.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899082.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AF3 Rotation 類解讀

Rotation 類(rigid_utils 模塊)是 AlphaFold3 中用于 3D旋轉 的核心組件,支持兩種旋轉表示: 1?? 旋轉矩陣 (3x3) 2?? 四元數 (quaternion, 4元向量) ?? 設計目標: 允許靈活選擇 旋轉矩陣 或 四元數 封裝了常用的 旋轉操作(組合、逆旋轉、應用到點上等) 像 torch.…

DeepSeek面試——模型架構和主要創新點

本文將介紹DeepSeek的模型架構多頭潛在注意力(MLA)技術,混合專家(MoE)架構, 無輔助損失負載均衡技術,多Token 預測(MTP)策略。 一、模型架構 DeepSeek-R1的基本架構沿用…

【web3】

檢測錢包是否安裝 方法一 // npm install metamask/detect-provider import detectEthereumProvider from metamask/detect-provider// 檢測錢包是否安裝 const isProvider await detectEthereumProvider() if(!isProvider) {proxy.$modal.msgError("請安裝錢包")…

husky的簡介以及如果想要放飛自我的解決方案

husky 是一個 Git Hooks 管理工具,它的主要作用是 在 Git 提交(commit)、推送(push)等操作時執行自定義腳本,比如代碼檢查(Lint)、單元測試(Test)、格式化代碼…

JVM之類的加載過程

加載 這一階段是將類的字節碼從外部存儲(如磁盤)加載到JVM的內存中。加載時,JVM會根據類的全限定名(包括包名和類名)查找相應的字節碼文件(.class文件),并將其讀入內存。 鏈接 鏈接…

Java Collection API增強功能系列之六 改進的 ConcurrentHashMap:歸約、搜索、計數與 Set 視圖詳解

Java 8 改進的 ConcurrentHashMap:歸約、搜索、計數與 Set 視圖詳解 Java 8 對 ConcurrentHashMap 進行了重大優化,不僅提升了并發性能,還引入了許多函數式編程方法,使其在處理高并發場景時更加高效和靈活。本文將深入解析 Concu…

AI生成移動端貪吃蛇游戲頁面,手機瀏覽器打開即可玩

貪吃蛇游戲可計分&#xff0c;可穿墻&#xff0c;AI生成適配手機瀏覽器的游戲&#xff0c;代碼如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <meta name"viewport" …

【動手學深度學習】#4 深度學習計算

主要參考學習資料&#xff1a; 《動手學深度學習》阿斯頓張 等 著 【動手學深度學習 PyTorch版】嗶哩嗶哩跟李牧學AI 概述 為了實現更復雜的網絡&#xff0c;我們需要研究比層更高一級的單元塊&#xff0c;在編程中由類表示。通過自定義層和塊&#xff0c;我們能更靈活地搭建網…

如何在 Windows 上安裝并使用 Postman?

Postman 是一個功能強大的API測試工具&#xff0c;它可以幫助程序員更輕松地測試和調試 API。在本文中&#xff0c;我們將討論如何在 Windows 上安裝和使用 Postman。 Windows 如何安裝和使用 Postman 教程&#xff1f;

php寫入\查詢influxdb數據

namespace app\index\controller;use InfluxDB2\Client; use InfluxDB2\Model\WritePrecision; use InfluxDB2\Point;class Demo {/*** 顯示資源列表** return \think\Response*/public function index(){$token 你的TOKEN;$org zzlichi;$bucket initdb;$client new Client…

26考研——圖_圖的基本概念(6)

408答疑 文章目錄 一、圖的基本概念圖的定義非空性非線性結構 頂點和邊的表示頂點邊 有向圖 & 無向圖有向圖有向圖 G 1 G_1 G1? 的表示 無向圖無向圖 G 2 G_2 G2? 的表示 簡單圖 & 多重圖簡單圖多重圖 頂點的度、入度和出度頂點的度有向圖的度 路徑、路徑長度和回路…

面向對象軟件工程實踐軟件案例

智力運動-數字化思維訓練課程介紹 數字化思維訓練是科技賦能素質教育創新實踐項目&#xff0c;通過數字化信息化手段&#xff0c;深度融合優質原創智力運動教育課程資源&#xff0c;服務幼兒園與小學&#xff0c;提供信息時代校園素質教育教學解決方案。在《面向對象軟件工程》…

Linux學習筆記(應用篇一)

基于I.MX6ULL.MINI開發板 標準I/O庫鏈接目錄刪除文件正則表達式系統標識時間堆內存信號標準信號 進程進程組進程間通信線程互斥鎖線程安全 本文章是入門篇的概念&#xff0c;有點零散&#xff0c;后續需要補充復習 **inode&#xff08;索引節點&#xff09;**是 Linux 和 Unix …

Modbus RTU ---> Modbus TCP透傳技術實現(Modbus透傳、RS485透傳、RTU透傳)分站代碼實現、協議轉換器

文章目錄 Modbus RTU到Modbus TCP透傳技術實現1. 透傳技術概述1.1 透傳基本原理- 協議幀格式轉換- 地址映射與管理- 通信時序適配- 錯誤檢測與處理 2. 透傳網關硬件架構2.1 典型硬件結構- 微控制器/處理器(ARM、STM32等)- RS-485/RS-232收發器- 以太網控制器(如W5500)- 電源管理…

MySQL數據庫中常用的命令

登錄&#xff1a; mysql -u username -h ip地址 -P 端口 -p 密碼 mysql -u username -S /path/mysql.sock -P -p 用戶管理&#xff1a; select user,host from mysql.user;//查看數據庫中所用用戶信息 create user username%;//創建用戶 create user username% identifie…

醫學交互作用分析步驟和目的(R語言)

醫學交互作用分析的目的和用途&#xff08;R語言&#xff09; 醫學交互作用分析一直是醫學數據分析的組成部分&#xff0c;總結最近的一些認識。 目的&#xff1a; 在獨立危險因素鑒定的研究中&#xff0c;&#xff08;獨立危險因素的&#xff09;交互作用可以作為獨立危險因…

Javaweb后端登錄會話技術jwt令牌

jwt生成與校驗 是base4補位的 最后面是簽名&#xff0c;簽名不是base64&#xff0c;是通過簽名算法加密后來的 令牌長度不是固定的&#xff0c;長度取決于原始內容&#xff0c;載荷&#xff0c;大小 頭有&#xff0c;類型&#xff0c;簽名算法 base64可以對任意的二進制數據進…

Mybatis操作數據庫(注解+xml兩個方式)

文章目錄 1.個人回顧2.關于mybatis注解的說明3.字段和屬性不匹配的解決方案3.1第一個方案3.2第二個方案3.3第三個方案 4.xml路徑配置5.xml里面的字段映射 1.個人回顧 剛剛翻看了一下自己的這個之前寫的博客&#xff0c;上一次和這個javaee相關的博客還是去年寫的&#xff0c;也…

SysVinit和Systemd的系統運行級別

Linux運行級別 SysVinit系統(init守護進程)Linux系統運行級別SysVinit系統(init守護進程)查看Linux運行級別SysVinit系統(init守護進程)修改運行級別&#xff1a; Systemd守護進程Linux系統運行級別systemd查看運行級別Systemd查看系統當前運行級別 systemd修改運行級別multi-u…

Mysql-經典實戰案例(11):深度解析Sysbench壓測(從入門到MySQL服務器性能驗證)

引言 如何用Sysbench壓測滿足mysql生產運行的服務器&#xff1f; Sysbench返回的壓測結果如何解讀&#xff1f; 別急&#xff0c;本文會教大家如何使用并且如何解讀壓測的結果信息&#xff0c;如何對mysql服務器進行壓測&#xff01; 一、Sysbench核心功能全景解析 1.1 工…