如何在Linux KVM桥上禁用netfilter

时间:2020-02-23 14:30:30  来源:igfitidea点击:

最近,由于Netfilter阻止了所有到VM的流量和从VM流出的流量,我的KVM服务器Linux桥出现了问题。我只能从管理程序访问虚拟机。在进行进一步的故障排除时,我注意到问题出在Netfilter过滤流量上。解决此问题的解决方案是防止桥接流量通过主机iptables规则推送。

什么是netfilter和iptables?

Netfilter是Linux提供的框架,它允许以自定义处理程序的形式实现各种与网络相关的操作。 iptables是一种广泛使用的防火墙工具,可与内核netfilter数据包过滤框架进行交互。

iptables防火墙通过与Linux内核网络堆栈中的数据包筛选挂钩进行交互来工作。这些内核挂钩称为netfilter框架。

在KVM桥接器上禁用netfilter

为了防止桥接流量通过主机iptables规则推送,我们需要在/proc/sys /目录中设置内核设置。这可以是运行时更改,也可以是永久更改。

要快速浏览/proc/sys /目录中所有可配置的设置,请执行以下命令:

sudo sysctl -a

可以使用sysctl命令代替echo来为/proc/sys /目录中的可写文件分配值。因此,请在KVM桥上禁用netfilter,以更改运行时,运行:

echo 0 | sudo tee /proc/sys/net/bridge/bridge-nf-call-arptables
echo 0 | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables
echo 0 | sudo tee /proc/sys/net/bridge/bridge-nf-call-ip6tables

请注意,重新启动计算机后,/proc/sys /中的这些特殊设置会丢失。要保留自定义设置,请将它们添加到/etc/sysctl.conf文件。

sudo tee -a /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
EOF

重新加载:

sudo sysctl -p /etc/sysctl.conf

每次系统启动时,init程序都会运行/etc/rc.d/rc.sysinit脚本,该脚本包含使用/etc/sysctl.conf执行sysctl以确定传递给内核的值的命令。

有了这个设置,我们就可以开始了。现在测试网桥连接是否正常。