配置bridge后,透传的数据包未经过iptables问题的解决

初始环境为两台运行LinuxMint的虚拟机,一台linux内核为3.19(1),另一台内核为3.13(2)。

希望在两台虚拟机中配置bridge防火墙,配置bridge后两台虚拟机都成功成为桥接设备(到达eth0的数据包,经过bridge接口透明传输至eth1,反之亦然)。

配置iptables:

iptables -P FORWARD DROP

配置后,数据包无法透明传输通过机器(2),但依然能通过机器(1)。

这说明经过机器(1)bridge接口的数据包未经过iptables,经过一番搜寻,原因可能为bridge-nf-call-iptables未配置。通过sysctl进行设置报错:

sysctl -w net.bridge.bridge-nf-call-iptables=1
:cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory

查看/proc文件夹下,/proc/sys/net/bridge文件夹都不能存在。

又经过一番搜寻,可能是某些模块未加载,但此时bridge模块肯定是加载了的,不然bridge功能都应当无法工作。

查看/lib/modules/$(uname -r)/kernel/net/bridge文件夹下面的文件,机器(1)比机器(2)在bridge.ko和netfilter文件夹外还多了一个br_netfilter.ko文件。立刻加载之,再查看/proc/sys/net/bridge文件夹就有了,bridge-nf-call-iptables也有了。

查看两个系统在/boot下面的内核config文件,搜索bridge,有一条配置不同:

机器(1)中为:CONFIG_BRIDGE_NETFILTER=m

机器(2)中为:CONFIG_BRIDGE_NETFILTER=y​

猜想这应该就是导致br_netfilter以模块的形式存在于机器(1)中的原因吧。真是坑。。。。

记录在此,如果有人遇到类似的问题,希望能够搜索到。

转载于:https://my.oschina.net/ureyishere/blog/631751

你可能感兴趣的:(配置bridge后,透传的数据包未经过iptables问题的解决)