Linux网桥

大熊 发表于: 2021-04-30   最后更新时间: 2021-05-03 12:38:12  
{{totalSubscript}} 订阅,277 游览

简单来说,桥接就是把一台机器上的若干个网络接口连接起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。类似交换机

linux内核支持网口的桥接与交换机有一点点不同不同,交换机只是一个二层设备,对于接收到的报文,要么转发、要么丢弃。而运行着linux内核的机器本身就是一台主机,有可能就是网络报文的目的地。其收到的报文除了转发和丢弃,还可能被送到网络协议栈的上层(网络层),从而被自己消化。

网桥是工作在 TCP/IP 二层协议的虚拟网络设备,与现实世界中的交换机功能相似。与其他虚拟网络设备一样,可以配置 IPMAC。Bridge 的主要功能是在多个接入 Bridge 的网络接口间转发数据包。

对于普通的网络设备,就像一个管道,只有两端,数据从一端进,从另一端出。而 Bridge 有多个端口,数据可以从多个端口进,从多个端口出。

如下图,Bridge (设备名 br0)充当主设备,连接了四个从设备,分别是 tap1tap2veth1eth0

Bridge网桥

Bridge设备br0绑定了实际设备eth0与虚拟设备tap0tap1veth1,此时,对于Hypervisor的网络协议栈上层来说,只看得到br0,并不会关心网桥的细节。当这些从设备接收到数据包时,会将其提交给br0,它来决定数据包的去向,br0会根据MAC地址端口的映射关系进行转发。

因为Bridge工作在第二层,所以绑定在br0上的从设备eth0tap0tap1veth1均不需要再设置IP,对上层路由器来说,它们都位于同一子网,因此只需为br0设置IP,比如10.0.1.0/24,此时,eth0、tap0、tap1、veth1均通过br0出入10.0.1.0/24网段。

因为具有自己的IP,所以br0可以被加入到路由表,并利用它来发送数据,而最终实际的发送过程则是由某个从设备来完成。

如果eth0本身具有自己的IP,比如192.168.3.7,在绑定br0之后,它的IP会失效,用户程序不能接收到发送到这个IP的地址,只有目的地址为br0 IP的数据包才会被Linux接收。

桥的使用

ip命令建桥

ip link add br2 type bridge             # 创建网桥
ip link set dev eth0 master br2         # 为网桥添加物理接口
ip link del br2 type bridge             # 删除网桥
ip link set dev eth0 nomaster           # 删除网桥接口
ip addr show type bridge                # 显示网桥列表信息
ip addr show type bridge br2            # 显示网桥br2的信息

如果需要查看网卡挂载桥信息,可以采用ip addr命令实现,如下图所示,master后面表示挂载得网桥名称。

桥的持久化

对于centos而言,如果重启网络服务,则所有的配置则会消失,所以我们需要修改配置文件,才能永久保存网桥配置;

配置文件如下:

cd /etc/sysconfig/network-scripts/
cp ifcfg-enp1s0 ifcfg-br0
#编辑配置文件
vim ifcfg-br0
  TYPE=Bridge  #注意,这个地方一点要大写
  BOOTPROTO=none
  DEVICE=br0  #指定设备名称,一定要与文件名中ifcfg-br0后的"br0"相同
  ONBOOT=yes  #开机启动
  IPADDR=192.168.1.1  #配置网桥的地址
  NETMASK=255.255.255.0
  GATEWAY=192.168.238.1  #指定网关
  :wq

vim ifg-enp1s0
  TYPE=Ethernet
  BOOTPROTO=none
  NM_CONIROLLED=no
  NAME=enp1s0
  DEVICE=enp1s0
  ONBOOT=yes
  BRIDGE=br0  #将该网卡桥接到br0上面去
  :wq

systemctl restart network    #重启网络服务


您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容



提问