当前位置: 首页 > news >正文

【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实现了点对点的虚拟连接&#xff0c;可以通过veth连接两个namespace&#xff0c;如果我们需要将3个或者多个namespace接入同一个二层网络时&#xff0c;就不能只使用veth了。 在物理网络中&#xff0c;如果需要连接多个主机&#xff0c;我们会使用bridge&#xff08;网桥&…...

ES6新特性:let关键字详解

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

鸿运主动安全监控云平台任意文件下载漏洞复现 [附POC]

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

使用pycharm远程连接到Linux服务器进行开发

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

JavaScript 中 BOM 基础知识有哪些?

浏览器对象模型&#xff08;Browser Object Model&#xff0c;简称 BOM&#xff09;是 JavaScript 的组成部分之一&#xff0c;BOM 赋予了 JavaScript 程序与浏览器交互的能力。 window 对象是 BOM 的核心&#xff0c;用来表示当前浏览器窗口&#xff0c;其中提供了一系列用来…...

【PointNet—论文笔记分享】

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

Mysql8.1.0 windows 绿色版安装

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

何为自制力?如何提高自制力?

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

第1篇 目标检测概述 —(3)目标检测评价指标

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标&#xff0c;主要包括几个指标&#xff1a;精确率&#xff08;Precision&#xff09;、召回率&#xff08;Recall&#xff09;、交并比&#xff08;IoU&#xff09;、平均…...

剑指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 域协议并不是一个实际的协议族&#xff0c;而是在单个主机上执行客户/服务通信的一种方式。是进程间通信&#xff08;IPC&#xff09;的一种方式。 它提供了两类套接字&#xff1a;字节流套接字 SOCK_STREAM&#xff08;有点像 TCP&#xff09;和数据报套接字 SOCK_…...

分类预测 | MATLAB实现SSA-CNN-BiGRU-Attention数据分类预测(SE注意力机制)

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

基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 设置较大的干扰&#xff0c;PSNR15。 设置较小的干扰&#xff0c;PSNR25。 2.算法运行软件版本 matlab2022a vivado2019.2 3.部分核心程序 ti…...

算法进修Day-38

算法进修Day-38 77. 组合 难度&#xff1a;中等 题目要求&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 示例1 输入&#xff1a;n 4, k 2 输出&#xff1a; [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例2 输入&#…...

8.MySQL内外连接

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 表的内连和外连 内连接 外连接 左外连接 右外连接 我们进行演示的表结构是这样的&#xff1a; 表的内连和外连 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们前面学习的…...

使用.NET设计一个Epub电子书生成工具

1. 背景 可能我们接触到更多的小说文件都是普普通通的TXT格式&#xff0c;用于分享的文档更多的是PDF。TXT虽然轻巧&#xff0c;但是不如PDF丰富和强大。而 Epub 电子书格式因为其丰富的展示效果和较小的文件大小&#xff0c;这样一个微妙的平衡就刚刚好。作为一个喜欢看小说的…...

2023-10-26 用C语言实现一个大整数加法

点击 <C 语言编程核心突破> 快速C语言入门 用C语言实现一个大整数加法 前言一、思路和代码设计数字对齐:字符对齐: 二、代码总结 前言 要解决问题: 实现大整数加法 想到的思路: 用字符代替数字, 逐个计算, 过10进位. 其它的补充: 同样思路可以解决减法, 乘法, 但除法…...

[hive] 窗口函数 ROW_NUMBER()

文章目录 ROW_NUMBER() 示例窗口函数 ROW_NUMBER() 在 Hive SQL 中&#xff0c;ROW_NUMBER()是一个用于生成行号的窗口函数。 它可以为查询结果集中的每一行分配一个唯一的行号。 以下是 ROW_NUMBER() 函数的基本语法&#xff1a; ROW_NUMBER() OVER (PARTITION BY column…...

TensorFlow和Pytorch两种机器学习框架的比较及优缺点

TensorFlow是一个开源的机器学习框架&#xff0c;由Google开发并发布&#xff0c;它被用来构建各种类型的机器学习模型&#xff0c;例如图像识别、语音识别、自然语言处理等。TensorFlow主要有以下几个基本概念&#xff1a; Tensor&#xff1a;TensorFlow中最基本的数据结构&am…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...