Linux-虚拟网络设备-LinuxBridge

基本概念

       bridge是一个虚拟网络设备,具有网络设备的特性(可以配置IP、MAC地址等);而且bridge还是一个虚拟交换机,和物理交换机设备功能类似。网桥是一种在链路层实现中继,对帧进行转发的技术,根据MAC分区块,可隔离碰撞,将网络的多个网段在数据链路层连接起来的网络设备。
       对于普通的物理设备来说,只有两端,从一段进来的数据会从另一端出去,比如物理网卡从外面网络中收到的数据会转发到内核协议栈中,而从协议栈过来的数据会转发到外面的物理网络中。而bridge不同,bridge有多个端口,数据可以从任何端口进来,进来之后从哪个口出去原理与物理交换机类似,需要看mac地址。
       bridge是建立在从设备上(物理设备、虚拟设备、vlan设备等,即attach一个从设备,类似于现实世界中的交换机和一个用户终端之间连接了一根网线),并且可以为bridge配置一个IP(参考LinuxBridge MAC地址行为),这样该主机就可以通过这个bridge设备与网络中的其他主机进行通信了。另外它的从设备被虚拟化为端口port,它们的IP及MAC都不在可用,且它们被设置为接受任何包,最终由bridge设备来决定数据包的去向:接收到本机、转发、丢弃、广播。

作用

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

工作原理

基本原理图如下(来源于网络):


这里写图片描述

数据流向(来源于网络):

这里写图片描述

      bridge和route比较相似,都可以用来分发网络数据包,它们的本质不同在于:route在L3网络层,使用路由协议、bridge在L2数据链路层,通过学习和缓存在链路上传输的数据包中的源地址以及物理层的输入端口:

  • 收到新数据包时,记录源MAC地址和输入端口

  • 根据数据包中的目的MAC地址查找本地缓存,如果能找到对应的MAC地址记录

  • 若发现记录不在本地网络,直接丢弃数据包
  • 若发现记录存在对应的端口,则将数据包直接从该端口转发出去
  • 如果本地缓存中不存在任何记录,则在本网段中进行广播。


这里写图片描述

因此,通过Linux bridge来实现打通容器网络是一个非常有效的方法,同步bridge,我们可以做到:

  • 连接同宿主机内所有容器的虚拟网络
  • 打通容器内网与外网,通过bridge将数据转发到真实的往里网卡eth0中。

常用命令

brctl

安装与配置

#安装bridge-utils软件包,并加载bridge模块和开启内核转发。
root@ubuntu:/home/sunld# apt-get install bridge-utils
root@ubuntu:/home/sunld# modprobe bridge
root@ubuntu:/home/sunld# echo "1">/proc/sys/net/ipv4/ip_forward

命令显示

root@ubuntu:/home/sunld# 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

创建bridge

#增加一个网桥
root@ubuntu:/home/sunld# brctl addbr br0
#将现有网卡连接到往前,由于该网卡开启了混杂模式,可以不需要配置IP,因为bridge工作在L2链路层
root@ubuntu:/home/sunld# ifconfig eth0 0.0.0.0 promisc
root@ubuntu:/home/sunld# ifconfig eth1 0.0.0.0 promisc
root@ubuntu:/home/sunld# brctl addif br0 eth0 eth1
#查看已有网桥
root@ubuntu:/home/sunld# brctl show
root@ubuntu:/home/sunld# bridge link
#给bridge配置IP
root@ubuntu:/home/sunld# ifconfig br0 10.10.1.1 netmask 255.255.0.0 up

删除bridge

root@ubuntu:/home/sunld# brctl delbr br0

关闭生成树

#关闭生成树协议,减少数据包污染
root@ubuntu:/home/sunld# brctl stp br0 off

配置bridge开机激活

root@ubuntu:/home/sunld# echo "modprobe bridge">>/etc/rc.local

#配置eth0 eth1 br0开机启动,eth0,eth1未设置IP信息,在启动br0网卡时,开启了eth0,eth1的混杂模式,并桥接了它们。
vim /etc/network/interfaces

auto lo eth0 eth1 br0
iface lo inet loopback
iface br0 inet static
address 10.10.10.1
netmask 255.255.0.0
gateway 10.10.10.254
pre-up ip link set eth0 promisc on
pre-up ip link set eth1 promisc on
pre-up echo "1">/proc/sys/net/ipv4/ip_forward   
bridge_ports eth0 eth1

一步一步实现bridge

创建bridge

root
  • 16
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值