iptables 拦截 bridge 包的问题排查
💡
原文中文,约2600字,阅读约需7分钟。
📝
内容提要
最近排查网络问题时发现,两个 IP 之间不通是因为 bridge 的数据包被 iptables 的 FORWARD 链丢弃。可以通过设置 sysctl 参数关闭 bridge 包调用 iptables 的功能,从而解决此问题。此功能为内核模块,可能会影响 nftables 和 iptables-nft。
🎯
关键要点
- 最近排查网络问题时发现,两个 IP 之间不通是因为 bridge 的数据包被 iptables 的 FORWARD 链丢弃。
- 可以通过设置 sysctl 参数关闭 bridge 包调用 iptables 的功能,命令为:sysctl -w net.bridge.bridge-nf-call-iptables=0。
- 默认情况下,bridge 的包会被 iptables 处理,设置为 1 时会调用 iptables,设置为 0 时则不会。
- 此功能是内核模块,可能会影响 nftables 和 iptables-nft,关闭时可能会遇到模块未加载的错误。
- 可以通过 udev 创建事件,在每次创建 bridge 时执行 sysctl 命令来禁用 net.bridge.bridge-nf-call-iptables。
❓
延伸问答
为什么两个 IP 之间的网络不通?
因为 bridge 的数据包被 iptables 的 FORWARD 链丢弃。
如何解决 bridge 包被 iptables 拦截的问题?
可以通过设置 sysctl 参数,执行命令:sysctl -w net.bridge.bridge-nf-call-iptables=0 来关闭此功能。
bridge 包默认情况下是如何处理的?
默认情况下,bridge 的包会被 iptables 处理,设置为 1 时会调用 iptables,设置为 0 时则不会。
关闭 bridge 包调用 iptables 时可能遇到什么问题?
可能会遇到模块未加载的错误,提示 'net.bridge.bridge-nf-call-iptables' 是一个未知的键。
如何在每次创建 bridge 时自动禁用 net.bridge.bridge-nf-call-iptables?
可以通过 udev 创建事件,在每次创建 bridge 时执行 sysctl 命令来禁用该功能。
iptables 和 nftables 之间有什么关系?
nftables 是下一代的 iptables,可能会受到 bridge 包处理的影响。
➡️