网络桥接

🏷️ beat365体育亚洲网址 🕒 2025-12-29 04:03:43 👤 admin 👁️ 1604 ❤️ 376
网络桥接

相关文章

使用 netctl 配置桥

网络配置#聚合或 LAG

网络桥是一种虚拟网络设备,用于在两个或多个网络段之间转发数据包。桥的行为类似于虚拟网络交换机,并且透明工作。网络中的其他机器无需了解其存在。物理网络设备(例如 eth1)和虚拟网络设备(例如 tap0)都可以连接到它。

创建桥

创建网络桥有多种方法。本节概述了设置至少一个以太网接口的桥所需的步骤。这对于 QEMU 的桥接模式、设置基于软件的接入点等非常有用。

警告 如果您正在远程服务器上创建桥,并且计划将主网络接口添加到桥中,请确保您首先将主网络接口的 IP 地址添加到桥中,设置好桥,并设置好备用的默认路由,**然后**再将接口添加到桥中。否则,服务器将丢失网络连接,您将无法通过 SSH 重新连接到它。

使用 iproute2

本节介绍使用 `iproute2` 包中的 `ip` 工具管理网络桥。`iproute2` 包是 `base` 元包必需的。

创建一个新的桥并将其状态更改为 up

# ip link add name bridge_name type bridge

# ip link set dev bridge_name up

要将接口(例如 eth1)添加到桥中,其状态必须为 up

# ip link set eth1 up

通过将接口的 master 设置为 bridge_name 来将接口添加到桥中

# ip link set eth1 master bridge_name

要显示现有的桥和关联的接口,请使用 `bridge` 工具(也包含在 `iproute2` 包中)。有关详细信息,请参阅 bridge(8)。

# bridge link

这是如何从桥中移除接口

# ip link set eth1 nomaster

接口仍将处于 up 状态,因此您可能还希望将其 down

# ip link set eth1 down

要删除桥,请发出以下命令

# ip link delete bridge_name type bridge

这将自动从桥中删除所有接口。但从属接口仍将处于 up 状态,因此您可能还希望在之后将其 down。

添加主网络接口

如果您在远程服务器上进行此操作,并且计划将主网络接口(例如 eth0)添加到桥中,请首先记下当前的网络状态

$ ip address show eth0

$ ip route show dev eth0

对于此示例,这是相关信息

附加到 eth0 的 IP 地址:10.2.3.4/8

默认网关:10.0.0.1

桥名称:br0

桥的初始设置

# ip link add name br0 type bridge

# ip link set dev br0 up

# ip address add 10.2.3.4/8 dev br0

# ip route append default via 10.0.0.1 dev br0

然后,快速连续执行这些命令。建议将它们放入脚本文件中并执行该脚本

# ip link set eth0 master br0

# ip address del 10.2.3.4/8 dev eth0

说明

一旦将 eth0 添加到桥中,它将不再用于路由。br0 将取而代之,因此它需要一个 IP 地址并附加默认路由。

我们不能在将接口添加到 br0 之前删除 eth0 上的 IP 地址,否则网络连接将丢失。

但是,我们需要快速删除 eth0 上的 IP 地址,否则网络连接将在短时间内丢失。

Linux 不允许在同一个路由表中存在两个默认路由。简单的解决方法是追加新的默认路由。

一旦删除了 eth0 的 IP 地址,附加到它的默认路由也会自动删除。

使用 bridge-utils

本节介绍使用 `bridge-utils` 包中的旧版 `brctl` 工具管理网络桥。有关选项的完整列表,请参阅 brctl(8)。

注意 `brctl` 的使用已被弃用并被视为过时。有关详细信息,请参阅 brctl(8) § NOTES 中的“注意事项”部分。

创建一个新桥

# brctl addbr bridge_name

将设备添加到桥中,例如 eth1

注意 将接口添加到桥中将导致接口丢失其现有的 IP 地址。如果您通过您打算添加到桥的接口进行远程连接,您将丢失连接。此问题可以通过编写脚本在系统启动时创建桥来解决。

# brctl addif bridge_name eth1

显示当前桥及其连接的接口

$ brctl show

将桥设备设置为 up

# ip link set dev bridge_name up

删除桥,您需要先将其设置为 down

# ip link set dev bridge_name down

# brctl delbr bridge_name

注意 要启用 bridge-netfilter 功能,您需要手动加载 `br_netfilter` 模块。# modprobe br_netfilter

您也可以 在启动时加载模块。

添加主网络接口

首先,记下当前网络状态

$ ip address show eth0

$ ip route show dev eth0

对于此示例,这是相关信息

附加到 eth0 的 IP 地址:10.2.3.4/8

默认网关:10.0.0.1

桥名称:br0

桥的初始设置

# brctl addbr br0

# ip address add 10.2.3.4/8 dev br0

# ip link set dev br0 up

然后,快速连续执行这些命令。建议将它们放入脚本文件中并执行该脚本

# brctl addif br0 eth0

# ip address del 10.2.3.4/8 dev eth0

使用 netctl

请参阅 Bridge with netctl。

使用 systemd-networkd

请参阅 systemd-networkd#Bridge interface。

使用 NetworkManager

GNOME 的网络设置可以创建桥,但目前不会自动连接到它们或其从属/附加接口。打开网络设置,添加一个类型为 Bridge 的新接口,添加一个新的桥接连接,然后选择要连接到桥的设备的 MAC 地址。

KDE 的 plasma-nm 可以创建桥。为了查看、创建和修改桥接口,可以通过右键单击系统托盘中的网络小部件并选择 “配置网络连接…” 或从 “系统设置 > 连接” 中打开“连接”窗口。单击模块左下角的“配置”按钮并启用“显示虚拟连接”。需要重新启动会话才能使用启用的功能。

nm-connection-editor 可以以与 GNOME 网络设置相同的方式创建桥。 此页面 以截图形式展示了这些步骤。

来自 `networkmanager` 的 `nmcli` 可以创建桥。例如,要创建一个带有禁用 STP 的桥 `br0`(以避免桥在网络上被广播),请运行

$ nmcli connection add type bridge ifname br0 stp no

将您的以太网接口(例如此示例中的 enp30s0,有关查找名称的说明,请参阅 网络配置#网络接口)设置为桥的从属接口

$ nmcli connection add type bridge-slave ifname enp30s0 master br0

将现有连接 down(您可以使用 `nmcli connection show --active` 获取连接名称)

$ nmcli connection down Connection

将新桥 up

$ nmcli connection up bridge-br0

$ nmcli connection up bridge-slave-enp30s0

如果 NetworkManager 默认连接到您添加到桥的设备,您可能希望通过在网络设置中点击其旁边的齿轮图标来禁用它,并在“身份”下取消选中“自动连接”,或使用命令

$ nmcli connection modify Connection connection.autoconnect no

分配 IP 地址

本文章或章节需要扩充。

原因:本节需要与 QEMU#Tap networking with QEMU 中描述的链路层部分连接。目前,请参阅那里提供的说明。(在 Talk:Network bridge 中讨论)

当桥完全设置好后,可以为其分配 IP 地址

使用 iproute2

# ip address add dev bridge_name 192.168.66.66/24

使用 NetworkManager

赋予它所需的地址

# nmcli connection modify Connection ipv4.addresses desired_IP

设置 DNS 服务器(这也将避免在应用更改后无法加载任何页面)

# nmcli connection modify Connection ipv4.dns DNS_server

将 IP 地址设置为静态

# nmcli connection modify Connection ipv4.method manual

应用更改

# nmcli connection up Connection

技巧与提示

桥上的无线接口

要将无线接口添加到桥中,您必须首先将无线接口分配给一个接入点,或者使用 hostapd 启动一个接入点。否则,无线接口将不会被添加到桥中。

另请参阅 Debian:BridgeNetworkConnections#Bridging with a wireless NIC。

加速发往桥本身流量

在某些情况下,桥不仅作为桥接盒,还与其他主机通信。发往桥本身、到达桥端口的数据包默认会以逻辑桥端口作为输入设备进入 iptables INPUT 链。这些数据包会被网络代码排队两次:第一次在接收到网络设备后排队;第二次是在桥代码检查了目标 MAC 地址并确定它是本地目标数据包,因此决定将帧传递给更高层协议栈之后排队。[1]

让本地目标数据包只排队一次的方法是使用 broute 表的 BROUTING 链进行 brouting。假设 br0 有一个 IP 地址,并且 br0 的桥端口没有 IP 地址。使用以下规则应该可以让所有本地定向流量只排队一次。

# ebtables -t broute -A BROUTING -d $MAC_OF_BR0 -p ipv4 -j redirect --redirect-target DROP

桥的响应将通过 br0 设备发出(假设您的路由表正确并将所有流量通过 br0 发送),因此一切都能顺利工作,而不会因数据包排队两次而导致性能损失。

需要 `redirect` 目标,因为桥端口的 MAC 地址不一定等于桥设备的 MAC 地址。发往桥盒的数据包的目标 MAC 地址将等于桥 br0 的 MAC 地址,因此该目标地址必须更改为桥端口的 MAC 地址。

故障排除

桥配置后无法联网

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:此问题在 #With bridge-utils 中作为注意事项指出。应在所有其他部分中明确这一点,并在 #Assigning an IP address 中添加运行 DHCP 客户端的说明。(在 Talk:Network bridge 中讨论)

尝试移除已添加到桥中的接口(例如 eth1)的所有 IP 地址和路由,并改为此类参数配置桥可能会有帮助。

首先,确保没有针对 eth1 运行 `dhcpcd` 实例,否则已删除的地址可能会被重新分配。

从 eth1 接口移除地址和路由

# ip addr del address dev eth1

# ip route del address dev eth1

现在必须为先前配置的桥设置 IP 地址和路由。这通常通过为该接口启动 DHCP 客户端来完成。否则,请查阅 网络配置 进行手动配置。

桥配置后托管服务器无法联网

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:“托管服务器”不是一个普遍易懂的术语。(在 Talk:Network bridge 中讨论)

由于桥的 MAC 地址不一定等于服务器通常使用的网卡的 MAC 地址,服务器提供商可能会丢弃来自桥的流量,导致在桥接例如服务器以太网接口时出现连接丢失。因此,对于托管服务器,可能需要配置桥以克隆以太网接口的 MAC 地址。

连接到桥连接后无法连接到普通连接

在 Network Manager 小程序中,如果您有普通的以太网/无线连接(不是桥的从属连接),并且您先连接到它,然后再尝试连接到桥接连接(无论是否先断开普通连接),则您无法连接到它。出于某种原因,桥的从属连接(未在网络小部件中列出)未激活,即使自动连接复选框已启用。

解决方法是通过终端手动激活它

nmcli connection up br1\ slave\ 1

然后您的桥连接立即就可以工作了。

本文章或章节需要扩充。

原因:是否有关于此的 bug 报告?(在 Talk:Network bridge 中讨论)

桥在一侧网络上似乎无法工作

请参阅 QEMU#Internal networking。

参见

iproute2 的官方文档

Linux 桥上的 ebtables/iptables 交互

相关文章

华为高通基带芯片谁厉害?一文带你全面解析
365体育手机版下载安装

华为高通基带芯片谁厉害?一文带你全面解析

📅 08-09 👁️ 8656
2025年催收新规:这3种催收行为违法!可索赔精神损失费
beat365体育亚洲网址

2025年催收新规:这3种催收行为违法!可索赔精神损失费

📅 10-17 👁️ 3306
2016年欧洲杯决赛 葡萄牙1
365bet体育在线网址

2016年欧洲杯决赛 葡萄牙1

📅 07-15 👁️ 2915