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 管理工具的主要内容,如果未能解决你的问题,请参考以下文章