bridge是一种用来连接两个ethernet, 数据帧是基于MAC address 转发,而不是基于IP address, 转发是基于Layer 2, 所以数据包都可以通过bridge.
bridge and Firewalling
Linux bridge 比纯硬件的bridge更加强大,因为它可以过滤filter和修改数据帧, bridgeing和firewalling 是基于ebtales实现。
bridge的功能现在在kernel 2.4以上的都支持,用户层可以通过bridge-utils 是控制。
用户手册
网络接口
在开始配置之前,需要保证网络接口正常,不需要设置IP地址,也不需要运行dhcp脚本。IP地址需要在bridge配置之后才能设置。
ifconfig命令可以查看接口的状态,他们需要处于down状态。
模块加载
通常bridge code模块是被编译进内核系统的,在系统开机的时候会自动加载该模块。
#brctl
#commands:
addbr <bridge> addbridge
delbr <bridge> deletebridge
addif <bridge><device> addinterfacetobridge
delif <bridge><device> deleteinterfacefrombridge
setageing <bridge><time> setageingtime
setbridgeprio <bridge><prio> setbridgepriority
setfd <bridge><time> setbridgeforwarddelay
sethello <bridge><time> sethellotime
setmaxage <bridge><time> setmaxmessageage
setpathcost <bridge><port><cost> setpathcost
setportprio <bridge><port><prio> setportpriority
show showalistofbridges
showmacs <bridge> showalistofmacaddrs
showstp <bridge> showbridgestpinfo
stp <bridge><state> turnstpon/off
Creating a bridge device
brctl addbr br-lan
br-lan: 是bridge的名字。
delete bridge
brctl delbr br-lan
Adding devices to a bridge
brctl addif br-lan eth0
br-lan: 是bridge名称。
eth0: 是需要添加到bridge上的设备名。
添加到bridge种的设备都可以认为是一个大的网络,一个设备不能同时添加到多个bridge种。
从bridge种删除设备
brctl delif br-lan eth0
查看bridge中的设备:
brctl show
portno mac_address is local? aging time
aging time: 表示 mac地址在 mac转发表中老化的时间。一般是自动维护的。
也可以通过如下命令修改:
brctl setageing br-lan time
time设置为0, 则永远都不会老化。
Spanning Tree Protocol 生成树协议
如果运行多个bridge,则需要是能生成树协议防止环路。
brctl show stp br-lan
生成树协议参数配置
STP tuning
bridge priority 优先级
每一个bridge 都有一个关联的优先级priority 和cost. 每一个接口都分配一个port number 在STP code中。用于决定最短路径转发,通常最短路径都被使用除非其他路径都down. 如果有多个bridge和interface就需要调整优先级实现最佳性能。
brctl setbridgeprio bridgename priority
最低优先级的bridge被选为root bridge, root bridge 在spanning tree中是central bridge.
path priority and cost
在bridge中的接口拥有不同的速率,这个值被用来决策哪一个链路被使用,faster interfaces 需要拥更低的优先级。
brctl setpatchcost bridge port cost
多个端口有相同的cost也有一个priority.
Forwarding delay
foewarding delay是在进入fowarding状态之前listening 和learning states状态的时间。
brctl setfd bridgename time
hello time
brctl sethello bridgename time
发包保活时间。
Max age
如果其他bridge在spanning tree中长期不发送hello packet. 这个bridge就是处于dead状态。
brctl maxage bridgename time
Multicast IGMP snoonping
IGMP snooping 支持与否包含在bridge-utils or iproute2, 也可以通过syfs接口控制。对于brN, 在/sys/devices/virtual/net/brN/bridge 设置。
multicast_snooping
multicast_snooping: 用于使能IGMP snooping
multicast_router: 允许某个接口可以接收到所有报文。