2 个 TAP 接口之间的网桥是否需要 IP 地址?

Byt*_*ger 3 networking linux openvpn ip

我正在尝试在机器上设置 openvpn,以便我有 2 个不同的 Tap 接口(tap0 和 tap1),然后是连接这些接口的网桥。openvpn 为每个 TAP 接口设置了服务器桥接配置。这个想法是 tap0 上的客户端将能够与 tap1 上的客户端交谈,反之亦然。

桥中不涉及物理 NIC,桥接口设置为没有 ip/netmask/broadcast。刚刚提出了一个“ifconfig brX up”

当两个客户端都连接到 openvpn 服务器时,我能够在它们之间 ping,每个客户端都连接到上面提到的自己的 Tap 接口,但是在尝试 tcpdump 桥接接口时我看不到流量。

我对一些事情有点困惑:

  1. 我需要在网桥接口上配置一个 ip 吗?我不太明白这样做的原因,因为它所做的只是让虚拟接口相互通信

  2. 网桥接口没有分配的 ip/netmask/broadcast 是否是我在 tcpdumping 接口时看不到网桥接口上的 ping 流量的原因?

  3. 如果第 2 项的答案是肯定的,我认为不可能使用 iptables 来阻止/允许该接口上的流量,对吗?如果是这样,有没有其他方法可以在这样的界面上完成对 iptables 的处理?

use*_*686 5

我需要在网桥接口上配置一个 ip 吗?我不太明白这样做的原因,因为它所做的只是让虚拟接口相互通信

不,纯网桥只在以太网级别工作——它甚至不查看 IP 标头。当您将 IP 地址分配给 br0 时,您实际上是将它分配给了连接到该网桥的主机操作系统。

但是,您并未提及将tap接口实际添加为桥接端口。您需要明确告诉网桥它管理哪些端口:

  • brctl addif br0 tap0

  • ip link set tap0 master br0

网桥接口没有分配的 ip/netmask/broadcast 是否是我在 tcpdumping 接口时看不到网桥接口上的 ping 流量的原因?

不。

但桥可能仍处于“学习”模式;它仍然默认为 30 秒 - 检查使用brctl showstp br0. 端口可能没有添加到网桥(见上文)。端口接口本身可能仍处于关闭状态。

(还有,天啊,为什么人们认为他们需要设置广播地址。真的,操作系统已经可以通过 IP | ~netmask 计算它。手动配置广播地址几乎没有用,只是更容易意外获取它错了。)

如果第 2 项的答案是肯定的,我认为不可能使用 iptables 来阻止/允许该接口上的流量,对吗?如果是这样,有没有其他方法可以在这样的界面上完成对 iptables 的处理?

是的,您需要ebtables过滤流量;它不通过 IP 防火墙。

(不过,我想这并不总是正确的。例如,Untangle 防火墙似乎在跨品种路由器/桥接模式下工作,这有点令人困惑。)

  • @ByteFlinger,我认为网桥的路由策略仍然受到主机 iptable 的影响,尤其是源 IP NAT。`Docker` 默认添加一个 `MASQURADE` 规则到 `POSTROUTE` 表的源为 `172.17.0.0/16`,因此来自 `172.17.0.0/16` 网络的任何数据包都将更改其源 IP,这可能导致接收者向错误的 IP 发送响应。这是我遇到的问题。 (2认同)