在新的虚拟机 (Debian 10) 上使用 nftables 时,我安装并配置了 nftables 作为自动服务 (systemd)。我还使用 LXC 并使用附加接口 (lxcbr0)。
我意识到了重启后 nftables 服务无法成功启动的问题。错误:/etc/nftables.conf:56:32-39: Error: Interface does not exist
看来只有在 nftables 服务启动后界面才会起来: nftables 的启动日期(日志输出):
Apr 05 11:41:23 WEB01 systemd[1]: Starting nftables...
接口启动日期:
Apr 05 11:41:25 WEB01 ifup[397]: Waiting for lxcbr0 to get ready
--> 两次启动之间有 2 秒延迟
有没有通用的解决方案或常见的解决方法?在 nftables 的 wiki 上我没有找到类似的东西。
提前致谢
答案1
最简单的方法是像这样在 nftables 中更改规则:
- 替换所有出现
iif lxcbr0
的iifname lxcbr0
- 替换所有出现
oif lxcbr0
的oifname lxcbr0
- 有集合的等效替代品,如果给出了规则集,我可以写一些相关内容。
这样做的原因是,iif
并oif
期望一个接口指数而不是界面姓名为此,接口必须在引用它的规则之前创建。iifname
并oifname
检查当前接口是否具有匹配名称的接口。
更多解释请参见其他问答。
其他方法需要与接口创建同步:在接口创建之后但在启动之前,以避免出现没有防火墙/NAT 的窗口。这可能取决于所使用的网络管理器。
答案2
define
我在使用界面时遇到了这个问题bridge
,例如:
define PRIV_IF = br0
(所以iifname
/oifname
技巧不起作用)
添加覆盖以nftables
修复它:
systemctl edit nftables --drop-in=any-name
添加到打开的控制台编辑器靠近顶部:
[Unit]
After=network-online.target
&systemctl daemon-reload