AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 528600
Accepted
schweik
schweik
Asked: 2019-07-06 13:11:18 +0800 CST2019-07-06 13:11:18 +0800 CST 2019-07-06 13:11:18 +0800 CST

如何快速配置/启动linux box L2 switch

  • 772

我有一个完全隔离的 LAN 192.168.22.0/24,有两个硬件交换机:1Gbit 和 10Gbit。旧的 10Gbit 交换机也可以处理 1Gbit,因此将两个交换机连接在一起没有问题。上周我们得到了无法处理 1Gbit 的新 10Gbit 交换机。我必须立即连接这些突然断开的网络部分,因为在 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,我无法重新启动。

欢迎任何帮助和提示,我很高兴在星期一早上之前重新加入 LAN。

linux bridge
  • 1 1 个回答
  • 2741 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2019-07-07T15:56:41+08:002019-07-07T15:56:41+08:00

    为简化起见,我将只讨论以太网和 IPv4(同样适用于 IPv6/ ip6tables)。如果这个问题让其他人感兴趣,我有时会尝试用比需要更多的细节来解决每一点。

    1. 设置

      要完整,您应该在初始设置中添加它,以防之前没有完成:

      ip link set eth0 up
      ip link set eth1 up
      

      如果您不启动网桥端口,则处于活动状态的网桥将无法接收也无法发送任何帧。这可能是您的问题的原因。

    2. 桥接端口和第 3 层

      TL;DR:对于最简单的设置,IP 和路由配置应该在桥接接口br0上,并且只在它上面。这应该只影响主机的 IP 连接,而不是它的桥接能力。因此,如果之前在eth0上设置了 IP,则应改为在br0上应用它们。如果您不这样做,这将阻止与系统的 IP 连接(但不会阻止桥接)。

      附带说明一下,ARP 用于本地系统,由 ARP 协议处理,而不是由网桥以任何特殊方式处理。在网桥上有用的是查看 FDB(转发数据库条目)。

      本地系统 ARP 状态:

      ip neighbour show
      

      监控变化:

      ip monitor neigh
      

      网桥 MAC 转发状态:

      bridge fdb show br br0
      

      监控变化:

      bridge monitor fdb
      

      其他设置也是可能的,例如使用额外的veth对接口,一端有 IP,另一端作为第三个桥接端口,桥接上没有 IP,使桥接只做桥接,不参与第 3 层。但是正确设置的时间更长(例如:默认情况下随机MAC地址是什么?等等)。

      一旦接口成为网桥端口(将网桥作为主端口),其第 3 层信息就会被忽略:在其上配置的 IP(如果有)将变得不可用。值得注意的例外是具有网桥名称的特殊隐式自网桥端口,所以在这里br0。如果您为其分配一个 IP,那么除了在第 2 层交换帧外,网桥还将在第 3 层 (IP) 工作。如果您不这样做,它将只能进行交换。

    3. iptables/netfilter 和桥接层交互

      TL;DR:如果你没有使用任何iptables规则,包括在网络命名空间(容器)中,你不必做任何事情,也不必关心是否加载了一些iptables相关模块。详细解答如下...

      在第 2 层(以太网桥)过滤(或修改等)帧应该由ebtables完成,而在第 3 层过滤 IP 数据包应该由iptables完成。所以iptables通常不应该看到帧(除非它们注定要发送到本地系统并作为 IP 数据包到达第 3 层)并且不会对桥接的帧进行任何交互,但是......

      ebtables受到更多限制,例如不能直接访问netfilter的conntrack也不能直接访问iptables可用的所有扩展。如果没有这个,就很难实现一个好的第 2 层防火墙(它充当交换机而不是路由器)。这就是为什么除了ebtables之外,还有一种特殊模式允许桥接代码调用iptables(将帧临时更改为 IP 数据包以供iptables使用) 。它在什么是 bridge-netfilter?在基于 Linux 的桥上的 ebtables/iptables 交互中,最突出的交互示例在7. 帧/数据包通过iptables PREROUTING、FORWARD 和 POSTROUTING 链的两种可能方式。Netfilter 和通用网络示意图的链路层侧的数据包流详细说明了蓝色( ebtables)和绿色(iptables)的处理。

      通过加载br_netfilter模块(例如)启用此模式modprobe br_netfilter,但只需使用带有physdev匹配的iptables规则将自动加载它。

      当这个模块被加载(并且默认的 sysctl 仍然存在:)net.bridge.bridge-nf-call-iptables=1然后iptables将与网桥交互,特别是当网桥有 IP 时,因为这将在网桥层完成额外的时间,而不仅仅是从网络层。因此,按照前面第 7 章中的示例,如果您要桥接 LAN 192.168.22.0/24 并且还有第三个接口,而不是用于通过 NAT 访问 Internet 的桥接器的一部分,则此规则(如果单独使用):

      iptables -t nat -A POSTROUTING -s 192.168.22.0/24 -j MASQUERADE
      

      除了 NATing路由流量到外部之外,还将 NAT桥接流量:每个接收桥接帧的系统都会将桥接的 IP 视为源,而不是原始 IP。这就是为什么这通常是这样写的(你会看到像 LXC 这样的应用程序设置的):

      iptables -t nat -A POSTROUTING -s 192.168.22.0/24 ! -d 192.168.22.0/24 -j MASQUERADE
      

      所以是的,你甚至可以使用iptables,但你应该小心不要使用bridge-nf(br_netfilter模块)或调整规则。一些处理网络的应用程序,尤其是与容器相关的(Docker、Kubernetes ...)可能会激活它。

      关于网络命名空间的注意事项:bridge-nf很快就会变成 per-namespace,但事实并非如此。可以加载模块,停用选项,然后设置每个网桥选项,但我认为现在它只能在初始命名空间中正常工作。此外,从任何网络命名空间触发模块自动加载(通过使用physdev)将影响所有其他网络命名空间,初始包括在内,这就是为什么规则应该始终为此做好准备。

      注意 2:一旦nftables可以使用网桥连接跟踪,就没有理由使用bridge-nf了。

    4. 转发

      默认情况下,如果没有其他选项,网桥会在其端口和自身启动后几秒钟转发帧(并且不处理 STP)。所以如果你知道不可能有任何循环,它应该已经准备好了。

    5. DHCP

      是的,网桥应该转发 DHCP 查询和回答,这里的网桥级别没有什么特别的。

    6. 杂项

      • VLAN

        您的设置似乎在任何地方都没有 VLAN ID,因此不需要与 VLAN 相关的任何特殊内容。只是让您知道,如果涉及 VLAN 标记的帧,网桥将需要额外的设置来正确处理它们(从 开始ip link set dev br0 type bridge vlan_filtering 1,然后是一些适当的bridge vlan ...命令)。

      • 故障排除

        您应该在每个接口上运行tcpdump ,例如:

        tcpdump -e -l -n -s0 -i eth0
        tcpdump -e -l -n -s0 -i br0
        tcpdump -e -l -n -s0 -i eth1
        

        同时帮助查看发生了什么。

      • 配置

        如果您在 Debian 上使用ifupdown的那种配置,安装包含过时命令brctl的bridge-utils包还将添加bridge-utils-interfaces钩子以在接口节中配置网桥。对于简单的网桥配置应该足够好。

    • 2

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve