「Linux」- 网桥、网络桥接、网卡桥接

问题描述

桥接网络连接,可以将一台电脑的互联网连接在多台电脑之间分享。尤其是在没有路由器或者接口不够的时候,极其有用。

基本上,「桥接」是将一台「HostA(未联网)」连接到「HostB(已经联网)」,并让HostA使用HostB的网络连接。为此,联网网络HostB需要有两个以太网端口,一个用于大型网络,另一个用于桥接HostA。

使用桥接的另一个示例场景是提供冗余网络功能。例如使用两个网络接口连接到两个支持生成树的交换机,在电缆、接口、交换机故障的情况下提供冗余连接。这需要在桥接器和交换机上启用生成树。

解决方案

系统环境:Kali GNU/Linux Rolling

在开始之前,请确保要连接的HostB有两个以太网端口,并且硬件能够桥接以太网连接(可能应该是)。

第一步、安装软件

网桥的配置需要使用brctl(8)命令,该命令位于bridge-utils软件包中。执行apt-get install bridge-utils安装。

桥接网口在ip link中显示为新接口,很像eth0或eth1。它不存在于计算机上,而是一个虚拟接口,只需从一个物理接口接收数据包,并透明地将它们路由到另一个物理接口。

第二步、配置网桥

设置时使用命令是在联网的计算机上执行的,即已经联网的HostB。要设置要桥接的HostA,只需正常设置,就像其他计算机一样。您可以使用DHCP,也可以使用静态地址。桥接HostA不需要做额外的配置,像普通的计算机一样就好了。

在使用网桥接口后,如果发现网络链路死机、无法上网,可能是路由器/交换机上游可能会阻塞网络中的“未授权交换机(unauthorized switches)”(例如,通过检测BPDU报文) 。你必须更改其配置,以显式的允许主机/网络端口作为“交换机”。

下面是在已经联网的HostB上执行的命令:

# 创建网桥接口
brctl addbr br0

# 添加接口到网桥
brctl addif br0 eth0 eth1

# 启动所有的网络接口
ip link set dev br0 up

常见问题处理

持久化网桥设置

https://wiki.debian.org/BridgeNetworkConnections#Configuring_bridging_in_.2Fetc.2Fnetwork.2Finterfaces
https://wiki.debian.org/BridgeNetworkConnections#Useful_options_for_virtualised_environments

与网桥有关的内核变量

https://wiki.debian.org/BridgeNetworkConnections#Setting_up_bridge-related_kernel_variables

KVM的网桥设置

https://wiki.debian.org/BridgeNetworkConnections#Libvirt_and_bridging

无线网卡的桥接设置(Bridging with a wireless NIC)

https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC

链路聚合(LACP)与VLAN

https://wiki.debian.org/BridgeNetworkConnections#Link_Aggregation_.28LACP.29_with_VLANs

参考文献

Debian/Bridging Network Connections
Wikipedia/Bridging (networking)
What can you do with a second Ethernet port?
2. Bringing interfaces up/down/Chapter 5. Configuring interfaces
Bridge traffic between two or more Ethernet interfaces on Linux