具有两个接口的虚拟网桥中的数据包流,centos 7

具有两个接口的虚拟网桥中的数据包流,centos 7

我正在努力使用 iptables 创建桥接防火墙,因为我无法在 centos7 中找到/捕获流经具有两个接口的桥接器的数据包。接口或网桥上未配置 IP 地址。我似乎找不到这个流量,检查了 PREROUTING INPUT FORWARD OUTPUT POSTROUTING 链。尽管 ifconfig 计数器显示流量正在流经桥接接口,但不是桥接 (br0) 本身。

我的网桥配置

# cat ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
IPADDR=0.0.0.0
PREFIX=24
IPV6_AUTOCONF=no
IPV6INIT=no
ONBOOT=yes
DELAY=0`

向外接口

# cat ifcfg-p1p
DEVICE=p1p1
TYPE=Ethernet
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes
BRIDGE=br0
BOOTPROTO=none
IPV6INIT=no
IPV6_AUTOCONF=no
IPADDR=0.0.0.0
PREFIX=24`

向内接口

# cat ifcfg-p1p2
DEVICE=p1p2
TYPE=Ethernet
HWADDR=XX:XX:XX:XX:XX:XX
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
IPV6INIT=no
IPV6_AUTOCONF=no
IPADDR=0.0.0.0
PREFIX=24`

转发被禁用(无 NAT),firewalld 被禁用,ipv6 autoconf 在 sysctl.conf 中被禁用。流量完美地从 p1p2 内部的机器通过 p1p1 流向外部。

我被困住了,感谢任何帮助。

PS:此设置​​与 debian 5(2.6 内核)完美配合,但升级到 debian 6、7 或 8 后,接口驱动程序随机出现内核恐慌。尝试了 Intel 卡和 Broadcom 卡,结果相同。也许是 brctl 中的错误?不过不管怎么说centos7至少稳定运行两天了。

答案1

你混淆了你的网络层。顺便说一句,iptables 适用于网络层转发的 IP 数据包,而不适用于链路层转发的以太网帧,这是由网桥完成的转发类型。

网桥的工作原理是保存在哪些端口上看到哪些 MAC 地址的列表。因此流量可以从 p1p 流向 p1p2,而无需执行任何 IP 路由。

br0 接口是网桥上的一个假装接口。它的处理方式与任何其他界面一样。因此,从通过 p1 的 MAC 到通过 p1p2 的 MAC 的非广播流量不会传输接口 br0(尽管它显然位于网桥 br0 上,而且 Linux 对伪接口和网桥使用相同的名称,这真是太遗憾了) )。

在这个 Shorewall 网站的开头有一个关于您正在尝试做的事情的很好的总结页面。基本上,您配置桥并使其工作。然后设置IP转发sysctl(否则iptables根本不起作用)。在 iptables 规则中,您需要使用 physdev iptables 模块来表达您的规则(当然您可以在此之后列出其他模块)。

答案2

现在明白了。打开转发不会启用一些所需的内核变量,因此我必须手动启用它们。这些都是,

net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-arptables=0

我关闭了 arptables,因为我不需要它。

相关内容