Linux brctl 命令,虚拟网络设备 LinuxBridge 管理工具

Posted catoop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux brctl 命令,虚拟网络设备 LinuxBridge 管理工具相关的知识,希望对你有一定的参考价值。

基本概念

bridge是一个虚拟网络设备,具有网络设备的特性(可以配置IP、MAC地址等);而且 bridge 还是一个虚拟交换机,和物理交换机设备功能类似。网桥是一种在链路层实现中继,对帧进行转发的技术,根据MAC分区块,可隔离碰撞,将网络的多个网段在数据链路层连接起来的网络设备。

对于普通的物理设备来说,只有两端,从一段进来的数据会从另一端出去,比如物理网卡从外面网络中收到的数据会转发到内核协议栈中,而从协议栈过来的数据会转发到外面的物理网络中。而bridge不同,bridge有多个端口,数据可以从任何端口进来,进来之后从哪个口出去原理与物理交换机类似,需要看mac地址

bridge是建立在从设备上(物理设备、虚拟设备、vlan设备等,即attach一个从设备,类似于现实世界中的交换机和一个用户终端之间连接了一根网线),并且可以为bridge配置一个IP(参考LinuxBridge MAC地址行为),这样该主机就可以通过这个bridge设备与网络中的其他主机进行通信了。另外它的从设备被虚拟化为端口port,它们的IP及MAC都不在可用,且它们被设置为接受任何包,最终由bridge设备来决定数据包的去向:接收到本机、转发、丢弃、广播。

作用

bridge是用于连接两个不同网段的常见手段,不同网络段通过bridge连接后就如同在一个网段一样,工作原理很简单就是L2数据链路层进行数据包的转发。

通过Linux bridge来实现打通容器网络是一个非常有效的方法,我们可以连接同宿主机内所有容器的虚拟网络。通过bridge将数据转发到真实的往里网卡eth0中将容器内网与外网打通。

默认情况下 docker 容器的IP 都是 docker0 这个 bridge 下独立网段的虚拟子网。我们可以通过手工配置 bridge 来实现每一个docker 的IP都和宿主机IP在同一个网段。

brctl 命令的安装和使用

本文对 bridge 进行了科普,不做详细使用指导,但是要想手工配置 bridge 我们需要用到管理工具包 bridge-utils,以下为安装 brctl 命令的方法和常用命令。

1、安装

Centos系统(Ubuntu系统使用 apt-get)

$ yum install bridge-utils -y

2、常用命令

查看

# 查看所有bridge信息
$ sudo brctl show

# 查看某个具体的bridge信息
$ sudo brctl show br0

添加

# 添加网桥(名称为br0)
$ sudo brctl addbr br0

# 设置br0的网段信息
$ sudo ifconfig br0 192.168.100.1 netmask  255.255.255.0

# 将eth0端口加入网桥br0(此处的eth0不是固定的,实际名称请以你服务的网卡名称为准,比如我的就是ens192)
$ sudo brctl addif br0 eth0

删除

# 从网桥br0中删除eth0端口
$ sudo brctl delif br0 eth0

# 删除网桥(br0)
$ sudo brctl delbr br0

所有命令

[root@harbor ~]# brctl
Usage: brctl [commands]
commands:
	addbr     	    <bridge>		            add bridge
	delbr     	    <bridge>		            delete bridge
	addif     	    <bridge> <device>	        add interface to bridge
	delif     	    <bridge> <device>	        delete interface from bridge
	hairpin   	    <bridge> <port> on|off	turn hairpin on/off
	setageing 	    <bridge> <time>		        set ageing time
	setbridgeprio	<bridge> <prio>		        set bridge priority
	setfd     	    <bridge> <time>		        set bridge forward delay
	sethello  	    <bridge> <time>		        set hello time
	setmaxage 	    <bridge> <time>		        set max message age
	setpathcost	    <bridge> <port> <cost>	    set path cost
	setportprio	    <bridge> <port> <prio>	    set port priority
	show      	    [ <bridge> ]		        show a list of bridges
	showmacs  	    <bridge>		            show a list of mac addrs
	showstp   	    <bridge>		            show bridge stp info
	stp       	    <bridge> on|off	        turn stp on/off

其他事项

1、bridge不区分接入进来的是物理设备还是虚拟设备,对于bridge来说都是一样都是网络设备,所以当eth0加入bridge之后,它就和其他veth一样了,从外面网络到eth0收到的数据包将无条件的转发给br0,eth0自己变成一根网线的角色。这时通过eth0 ping网关则失败,由于bridge通过eth0这根网线连接上了外面的物理机,所以只有连接到bridge上的设备才可以ping通网关。br0可以理解为自己有一块自带的网卡。

2、由于eth0已经变成了和网线差不多的功能,所以在eth0上配置IP已经没有什么意义了,并且还会影响协议栈的路由选择,比如如果上面ping的时候不指定网卡的话,协议栈有可能优先选择eth0,导致ping不通,所以最好将eth0上的IP配置去掉。

3、当一个设备attach到bridge上时,该设备上原来配置的IP则变为无效,Linux不再使用原来那个IP在三层接受数据。此时应该把原来的IP赋值给bridge设备。


以下网络示意图摘自互联网:

1、虚拟机


2、docker


(END)

以上是关于Linux brctl 命令,虚拟网络设备 LinuxBridge 管理工具的主要内容,如果未能解决你的问题,请参考以下文章

kvm网络虚拟化管理

kvm网络虚拟化管理

kvm网络虚拟化管理

怎么让linux有通过brctl 配置网桥的功能

Linux bridge-utils tunctl 使用

linux下brctl配置网桥