【Docker】Linux网桥连接多个命名空间
veth实现了点对点的虚拟连接,可以通过veth连接两个namespace,如果我们需要将3个或者多个namespace接入同一个二层网络时,就不能只使用veth了。
在物理网络中,如果需要连接多个主机,我们会使用bridge(网桥),或者又称为交换机。Linux也提供了网桥的虚拟实现。下面我们试验通过Linux bridge来连接三个namespace。
创建3个Network Namespace
$ ip netns add ns0$ ip netns add ns1$ ip netns add ns2$ ip netns list
ns2
ns1
ns0
创建3对veth pair
$ ip link add type veth$ ip link add type veth$ ip link add type veth$ ip link
23: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000link/ether 02:31:8e:3f:e3:41 brd ff:ff:ff:ff:ff:ff
24: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000link/ether a6:fa:24:af:7e:25 brd ff:ff:ff:ff:ff:ff
25: veth2@veth3: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000link/ether b6:44:af:1c:9d:34 brd ff:ff:ff:ff:ff:ff
26: veth3@veth2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000link/ether 02:89:cd:6d:91:5e brd ff:ff:ff:ff:ff:ff
27: veth4@veth5: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000link/ether d6:44:b0:6d:f2:af brd ff:ff:ff:ff:ff:ff
28: veth5@veth4: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000link/ether 4e:9d:92:7f:97:6e brd ff:ff:ff:ff:ff:ff
创建网桥
创建名为bridge0的网桥
$ ip link add bridge0 type bridge
启动bridge0网桥:
$ ip link set dev bridge0 up
查询bridge0网桥:
$ ip addr
29: bridge0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000link/ether c2:a8:ec:6b:f5:9e brd ff:ff:ff:ff:ff:ffinet 172.16.0.1/16 brd 172.16.255.255 scope global bridge0valid_lft forever preferred_lft forever
绑定网口
Network Namespace、veth pair、bridge都创建完毕,下面通过命令将每对veth pair的一端绑定在network namespace,另一端绑定在docker0网桥上,用于实现网络互通。
配置第一个网络命名空间ns0:
// 将veth1添加进ns0
$ ip link set dev veth1 netns ns0// 为ns0中的veth1配置ip
$ ip netns exec ns0 ip addr add 172.16.0.11/16 dev veth1// 启动ns0中的veth1网卡
$ ip netns exec ns0 ip link set dev veth1 up// 将veth0添加加网桥bridge0
$ ip link set dev veth0 master bridge0// 启动veth0网卡
$ ip link set dev veth0 up$ ip netns exec ns0 ip addr
24: veth1@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether a6:fa:24:af:7e:25 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.16.0.11/16 scope global veth1valid_lft forever preferred_lft foreverinet6 fe80::a4fa:24ff:feaf:7e25/64 scope linkvalid_lft forever preferred_lft forever
配置第二个网络命名空间ns1:
// 将veth3添加进ns1
$ ip link set dev veth3 netns ns1// 为ns1中的veth3配置ip
$ ip netns exec ns1 ip addr add 172.16.0.33/16 dev veth3// 启动ns1中的veth3网卡
$ ip netns exec ns1 ip link set dev veth3 up// 将veth2添加加网桥bridge0
$ ip link set dev veth2 master bridge0// 启动veth2网卡
$ ip link set dev veth2 up$ ip netns exec ns1 ip addr
26: veth3@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 02:89:cd:6d:91:5e brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.16.0.33/16 scope global veth3valid_lft forever preferred_lft foreverinet6 fe80::89:cdff:fe6d:915e/64 scope linkvalid_lft forever preferred_lft forever
配置第三个网络命名空间ns2:
// 将veth5添加进ns2
$ ip link set dev veth5 netns ns2// 为ns2中的veth5配置ip
$ ip netns exec ns2 ip addr add 172.16.0.55/16 dev veth5// 启动ns2中的veth5网卡
$ ip netns exec ns2 ip link set dev veth5 up// 将veth4添加加网桥bridge0
$ ip link set dev veth4 master bridge0// 启动veth4网卡
$ ip link set dev veth4 up$ ip netns exec ns2 ip addr
28: veth5@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 4e:9d:92:7f:97:6e brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.16.0.55/16 scope global veth5valid_lft forever preferred_lft foreverinet6 fe80::4c9d:92ff:fe7f:976e/64 scope linkvalid_lft forever preferred_lft forever
验证多个namespace之间的通信
$ ip netns exec ns0 ping 172.16.0.33 -c 2
PING 172.16.0.33 (172.16.0.33) 56(84) bytes of data.
64 bytes from 172.16.0.33: icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from 172.16.0.33: icmp_seq=2 ttl=64 time=0.038 ms--- 172.16.0.33 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.026/0.032/0.038/0.006 ms$ ip netns exec ns0 ping 172.16.0.55 -c 2
PING 172.16.0.55 (172.16.0.55) 56(84) bytes of data.
64 bytes from 172.16.0.55: icmp_seq=1 ttl=64 time=0.047 ms
64 bytes from 172.16.0.55: icmp_seq=2 ttl=64 time=0.036 ms--- 172.16.0.55 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.036/0.041/0.047/0.008 ms
通过上面的试验,我们验证了可以使用Linux bridge来将多个namespace连接到同一个二层网络中。你可能注意到,在分配IP地址的时候,我们只为veth在namespace中那一端的虚拟网卡分配了地址,而没有为加入bridge那一端分配地址。这是因为bridge是工作在二层上的,只会处理以太包,包括ARP解析,以太数据包的转发和泛洪;并不会进行三层(IP)的处理,因此不需要三层的IP地址。
使用brctl
上面我们是借助ip link
来创建网桥的,要想更好的操作网桥可以使用brctl,这个命令来自bridge-utils
安装包。
brctl
相关的命令如下:
$ brctl help
never heard of command [help]
Usage: brctl [commands]
commands:addbr <bridge> add bridgedelbr <bridge> delete bridgeaddif <bridge> <device> add interface to bridgedelif <bridge> <device> delete interface from bridgehairpin <bridge> <port> {on|off} turn hairpin on/offsetageing <bridge> <time> set ageing timesetbridgeprio <bridge> <prio> set bridge prioritysetfd <bridge> <time> set bridge forward delaysethello <bridge> <time> set hello timesetmaxage <bridge> <time> set max message agesetpathcost <bridge> <port> <cost> set path costsetportprio <bridge> <port> <prio> set port priorityshow [ <bridge> ] show a list of bridgesshowmacs <bridge> show a list of mac addrsshowstp <bridge> show bridge stp infostp <bridge> {on|off} turn stp on/off
查看网桥绑定的端口
使用brctl show
命令来查询网桥下绑定的网卡。
$ brctl show
bridge name bridge id STP enabled interfaces
bridge0 8000.02318e3fe341 no veth0veth2veth4
给bridge删除接口
使用brctl delif
可以给bridge删除接口。
$ brctl delif bridge0 veth0$ brctl show bridge0
bridge name bridge id STP enabled interfaces
bridge0 8000.327eef22246d no veth2veth4
给bridge增加接口
使用brctl addif
可以给bridge增加接口。
$ brctl addif bridge0 veth0$ brctl show bridge0
bridge name bridge id STP enabled interfaces
bridge0 8000.327eef22246d no veth0veth2veth4
创建网桥
使用brctl addbr
可以创建网桥。
$ brctl addbr bridge1$ brctl show
bridge name bridge id STP enabled interfaces
bridge0 8000.327eef22246d no veth0veth2veth4
bridge1 8000.000000000000 no
相当于命令ip link add bridge1 type bridge
。
删除网桥
使用brctl delbr
可以删除网桥。
$ brctl delbr bridge1$ brctl show
bridge name bridge id STP enabled interfaces
bridge0 8000.327eef22246d no veth0veth2veth4
相当于命令ip link delete bridge1
。
相关文章:

【Docker】Linux网桥连接多个命名空间
veth实现了点对点的虚拟连接,可以通过veth连接两个namespace,如果我们需要将3个或者多个namespace接入同一个二层网络时,就不能只使用veth了。 在物理网络中,如果需要连接多个主机,我们会使用bridge(网桥&…...

ES6新特性:let关键字详解
文章目录 1 声明提升2 作用域3 重复声明 在JavaScript中,let 和 var 都是声明变量的关键字,但在用法和作用域方面有一些区别。 let 是ES6引入的新的声明变量的关键字,它与 var 相比,更加严格,语法更加规范,…...

鸿运主动安全监控云平台任意文件下载漏洞复现 [附POC]
文章目录 鸿运主动安全监控云平台任意文件下载漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 鸿运主动安全监控云平台任意文件下载漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术…...

使用pycharm远程连接到Linux服务器进行开发
预计达到的效果 本地的 PyCharm 能达到和远程服务器之间的文件同步;本地的 PyCharm 能够使用远程服务器的开发环境; 环境配置 PyCharm:PyCharm 2021.3 (Professional Edition)Linux服务器:Ubuntu20.04 步骤 1.进入配置项 配…...

JavaScript 中 BOM 基础知识有哪些?
浏览器对象模型(Browser Object Model,简称 BOM)是 JavaScript 的组成部分之一,BOM 赋予了 JavaScript 程序与浏览器交互的能力。 window 对象是 BOM 的核心,用来表示当前浏览器窗口,其中提供了一系列用来…...

【PointNet—论文笔记分享】
第一个直接基于原始点云数据进行分割、分类的模型,之前都是基于多视图或者体素的方式。 论文: PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation代码: TensorFlow版 Pytorch版 基本模型架构: 分别对每个点进行特征提取…...

Mysql8.1.0 windows 绿色版安装
Mysql8.1.0 windows 绿色版安装 目录 Mysql8.1.0 windows 绿色版安装1、下载mysql8.1.0_windows(mysql-8.1.0-winx64.zip)2、解压到安装目录3、添加环境变量4、新建mysql配置文件5、安装mysql服务6、初始化数据文件7、启动mysql服务8、进入mysql管理模式…...

何为自制力?如何提高自制力?
什么是自制力? 自制力也即是自我控制能力,是一个人如何去抵御外部诱惑力,从而坚持自己的原本计划,坚定去完成目标。除了外部诱惑力,也可以指的是面对困境,不良情绪等外部因素。 自制力是自我管理能力的体…...

第1篇 目标检测概述 —(3)目标检测评价指标
前言:Hello大家好,我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标,主要包括几个指标:精确率(Precision)、召回率(Recall)、交并比(IoU)、平均…...

剑指JUC原理-3.线程常用方法及状态
常用方法 start和run 调用run public static void main(String[] args) {Thread t1 new Thread("t1") {Overridepublic void run() {log.debug(Thread.currentThread().getName());FileReader.read(Constants.MP4_FULL_PATH);}};t1.run();log.debug("do othe…...
MYSQL8-sql语句使用集合。MYCAT-sql语法使用集合
MYSQL 1.MYSQL事务与锁问题处理 SELECT * FROM information_schema.INNODB_LOCKs; -- 查询锁select * from information_schema.INNODB_LOCK_WAITS; -- 查询等待锁SELECT * FROM information_schema.INNODB_TRX; -- 查询事务select * from information_schema.processlist wh…...
UNIX 域协议(本地通信协议)
概述 Unix 域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务通信的一种方式。是进程间通信(IPC)的一种方式。 它提供了两类套接字:字节流套接字 SOCK_STREAM(有点像 TCP)和数据报套接字 SOCK_…...

分类预测 | MATLAB实现SSA-CNN-BiGRU-Attention数据分类预测(SE注意力机制)
分类预测 | MATLAB实现SSA-CNN-BiGRU-Attention数据分类预测(SE注意力机制) 目录 分类预测 | MATLAB实现SSA-CNN-BiGRU-Attention数据分类预测(SE注意力机制)分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLA…...

基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 设置较大的干扰,PSNR15。 设置较小的干扰,PSNR25。 2.算法运行软件版本 matlab2022a vivado2019.2 3.部分核心程序 ti…...
算法进修Day-38
算法进修Day-38 77. 组合 难度:中等 题目要求: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 示例1 输入:n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例2 输入&#…...

8.MySQL内外连接
个人主页:Lei宝啊 愿所有美好如期而遇 目录 表的内连和外连 内连接 外连接 左外连接 右外连接 我们进行演示的表结构是这样的: 表的内连和外连 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的…...
使用.NET设计一个Epub电子书生成工具
1. 背景 可能我们接触到更多的小说文件都是普普通通的TXT格式,用于分享的文档更多的是PDF。TXT虽然轻巧,但是不如PDF丰富和强大。而 Epub 电子书格式因为其丰富的展示效果和较小的文件大小,这样一个微妙的平衡就刚刚好。作为一个喜欢看小说的…...

2023-10-26 用C语言实现一个大整数加法
点击 <C 语言编程核心突破> 快速C语言入门 用C语言实现一个大整数加法 前言一、思路和代码设计数字对齐:字符对齐: 二、代码总结 前言 要解决问题: 实现大整数加法 想到的思路: 用字符代替数字, 逐个计算, 过10进位. 其它的补充: 同样思路可以解决减法, 乘法, 但除法…...
[hive] 窗口函数 ROW_NUMBER()
文章目录 ROW_NUMBER() 示例窗口函数 ROW_NUMBER() 在 Hive SQL 中,ROW_NUMBER()是一个用于生成行号的窗口函数。 它可以为查询结果集中的每一行分配一个唯一的行号。 以下是 ROW_NUMBER() 函数的基本语法: ROW_NUMBER() OVER (PARTITION BY column…...
TensorFlow和Pytorch两种机器学习框架的比较及优缺点
TensorFlow是一个开源的机器学习框架,由Google开发并发布,它被用来构建各种类型的机器学习模型,例如图像识别、语音识别、自然语言处理等。TensorFlow主要有以下几个基本概念: Tensor:TensorFlow中最基本的数据结构&am…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...