如果一个接口被删除并重新创建,iptables 规则会继续工作吗?

iBu*_*Bug 16 iptables

我的服务器通过 OpenVPN 连接到一些奇怪的资源,每次 OpenVPN 客户端启动时,ovpn都会带出一个接口。

我只想向这个接口公开选定的端口(比如 MySQL),所以我的 iptables 中有这个规则:

iptables -A INPUT -i ovpn -p tcp --dport 3306 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

但是,由于 OpenVPN 客户端可以在没有干预的情况下断开连接和重新连接,因此链接 ID(如 所示ip link show ovpn)可能会发生变化。

上面的iptables规则会在链接消失并再次出现(使用不同的ID)后继续工作吗?

A.B*_*A.B 26

是的,它将继续工作,因为iptables不使用接口的索引,而是在评估-i/--in-interface参数时与当前接口的名称进行字符串比较。实际上它似乎总是被评估,即使没有提供参数,但内联函数是相当优化的。

相比之下,nftablesiptables的当前候选继承者)提供了两种不同的表达方式:iifname直接等价于-i、比较当前名称和iif比较接口索引,这会导致您的用例出现问题。当iptables被翻译成nftables(对于较新的 iptables-over-kernel-nftables API使用iptables-translateiptables -nft)时,为了兼容性而-i被翻译iifname成预期的。


Nik*_*nov 5

是的,它会。删除引用的接口时不会删除规则。

更重要的是,还有通配符规则,例如您可以指定“任何 pppX 接口”与匹配-i ppp+-o ppp+. 根本没有这个名字的接口,所以它不能引用任何东西。但如果有涉及 ppp2 接口的流量,该规则将立即适用。

一般来说,规则是在界面出现之前还是之后创建的都没有关系。