我有一个完全隔离的 LAN 192.168.22.0/24,带有两个硬件交换机:1Gbit 和 10Gbit。旧的 10Gbit 交换机也可以处理 1Gbit,因此将两个交换机连接在一起没有问题。上周我们购买了新的 10Gbit 交换机,但无法处理 1Gbit。我必须立即连接这些突然断开的网络部分,因为在 10Gbit 上主要是服务器(包括 dhcp),并且大多数工作站都连接到 1Gbit。幸运的是,我有一个 debian linux 盒子连接到这两个部分,我可以将其临时配置为 1/10 Gbit 交换机。我按照提示操作,但没有观察到桥接 - 例如,arp 表没有影响,从 wks 到服务器没有 ping。我写了一个脚本:
#!/bin/bash
ip link add name br0 type bridge
ip link set dev br0 up
ip link set dev eth0 master br0 #1Gb
ip link set dev eth1 master br0 #XGb
请你回答我一些问题:
- eth0 和 eth1 可以有(相同的)IP 地址吗?或者IP地址可以得到br0?
- iptables 必须被禁用/刷新/卸载? (iptables未使用)
- 是否有一些“转发”启用位需要设置?
- 这样的软件交换机真的可以转发dhcp广播吗?
我的 Linux 机器上有一个正在运行的任务,因此我没有测试如何配置 /etc/network/interfaces 的提示 - 我很高兴我禁用了 NetworkManager,我无法重新启动。
欢迎任何帮助和提示,我很高兴在周一早上之前重新加入局域网。
答案1
为了简单起见,我将只讨论以太网和 IPv4(这同样适用于 IPv6/ip6表)。如果其他人对这个问题感兴趣,我有时会尝试用比需要的更多细节来解决每一点。
设置
为了完整起见,您应该将其添加到初始设置中,以防之前未完成:
ip link set eth0 up ip link set eth1 up
如果您不打开网桥端口,则处于活动状态的网桥将不会接收也无法发送任何帧。这可能是您出现问题的原因。
桥接端口和第 3 层
长话短说:为了最简单的设置,IP 和路由配置应该在桥接接口上
br0
并且仅在桥接接口上。这应该只影响主机的 IP 连接,而不影响其桥接能力。因此,如果之前 IP 设置为以太网0你应该将它们应用到br0反而。如果您不这样做,则会阻止与系统的 IP 连接(但不会阻止桥接)。附带说明一下,ARP 适用于本地系统,由 ARP 协议处理,而不是由网桥以任何特殊方式处理。在网桥上有用的是查看 FDB(转发数据库条目)。
本地系统ARP状态:
ip neighbour show
监控变化:
ip monitor neigh
网桥MAC转发状态:
bridge fdb show br br0
监控变化:
bridge monitor fdb
其他设置也是可能的,例如使用额外的韦斯一对接口,一端有 IP,另一端作为第三个桥接端口,桥上没有 IP,使桥只做桥接,不参与第 3 层。但正确设置的时间较长(例如:什么默认情况下使用随机 MAC 地址等)。
一旦接口成为桥接端口(将桥接为主端口),其第 3 层信息将被忽略:其上配置的 IP(如果有)将变得不可用。值得注意的例外是具有桥名称的特殊隐式自桥端口,因此此处
br0
.如果您为其分配一个 IP,那么除了在第 2 层交换帧之外,网桥还将在第 3 层 (IP) 上工作。如果您不这样做,它将只能进行交换。iptables/netfilter 和桥接层交互
长话短说: 如果你没有使用任何iptables规则,包括在网络命名空间(容器)中,您不必执行任何操作,也不必关心是否存在某些规则iptables相关模块已加载。详细解答如下...
在第 2 层(以太网桥)过滤(或破坏等)帧应该由ebtables,而在第 3 层过滤 IP 数据包应该是通过iptables。所以iptables通常不应看到帧(除非它们发往本地系统并作为 IP 数据包到达第 3 层)并且不会与网桥的帧进行任何交互,但是...
ebtables受到更多限制,例如无法直接访问网络过滤器的连线也不所有的扩展有空iptables。如果没有这个,就很难实现良好的第 2 层防火墙(充当交换机而不是路由器)。这就是为什么有一种特殊的模式允许桥接代码调用iptables(帧暂时改为IP数据包iptables用法)除了ebtables。它的描述在什么是桥接网络过滤器?并在基于 Linux 的桥上的 ebtables/iptables 交互,其中最突出的交互示例7. 帧/数据包通过iptablesPREROUTING、FORWARD 和 POSTROUTING 链。这Netfilter 和通用网络中的数据包流原理图的链路层侧面详细介绍了蓝色的处理(ebtables)和绿色(iptables)。
该模式通过加载br_netfilter模块(例如
modprobe br_netfilter
),但只需使用iptables规则与物理开发匹配会自动加载它。当加载此模块时(并且默认的 sysctl 仍然存在:)
net.bridge.bridge-nf-call-iptables=1
然后iptables将与网桥交互,特别是当网桥有 IP 时,因为这将在网桥层额外完成一次,而不仅仅是从网络层完成。所以按照前面的例子第7章,如果您要桥接 LAN 192.168.22.0/24,并且还有一个不属于用于通过 NAT 访问互联网的桥接器的第三个接口,则此规则(如果单独使用):iptables -t nat -A POSTROUTING -s 192.168.22.0/24 -j MASQUERADE
除了 NAT 之外路由的到外部的流量,也会 NAT桥接的流量:每个系统接收桥接的帧将把网桥的 IP 而不是原始 IP 视为源。这就是为什么通常这样写(你可以看到 LXC 等应用程序设置的):
iptables -t nat -A POSTROUTING -s 192.168.22.0/24 ! -d 192.168.22.0/24 -j MASQUERADE
所以是的,你甚至可以使用iptables但你应该小心不要使用桥接NF(这br_netfilter模块)或者调整规则。一些处理网络的应用程序,特别是与容器相关的应用程序(Docker、Kubernetes ...)可能会激活它。
关于网络命名空间的注意事项:桥接NF将要很快就会成为每个命名空间,但情况仍然并非如此。可以加载模块,停用该选项,然后设置每个桥选项,但我认为目前它只能在初始命名空间中正常工作。还可以从任何网络命名空间触发模块自动加载(通过使用物理开发)将影响所有其他网络名称空间(包括初始名称空间),这就是规则应始终为此做好准备的原因。
转发
默认情况下,如果没有其他选项,网桥将在其端口和自身启动后几秒钟转发帧(并且不处理 STP)。因此,如果您知道不可能有任何循环,则应该准备就绪。
动态主机配置协议
是的,桥接器应该转发 DHCP 查询和应答,这里的桥接器级别没有什么特别的。
杂项
虚拟局域网
您的设置似乎在任何地方都没有 VLAN ID,因此不需要与 VLAN 相关的任何特殊内容。只是让您知道,如果涉及 VLAN 标记帧,网桥将需要额外的设置来正确处理它们(从 开始
ip link set dev br0 type bridge vlan_filtering 1
,然后是一些适当的bridge vlan ...
命令)。故障排除
你应该跑tcp转储在每个界面上,类似:
tcpdump -e -l -n -s0 -i eth0 tcpdump -e -l -n -s0 -i br0 tcpdump -e -l -n -s0 -i eth1
同时帮助了解发生了什么。
配置
如果你正在使用如果向上向下Debian 上的配置,安装桥接工具包,其中包含过时的命令brctl还将添加桥接工具接口钩子来配置一个桥接口节。对于简单的桥接配置来说应该足够了。