libvirt nwfilter,多个参数

libvirt nwfilter,多个参数

可以使用“parameter”关键字将多个参数传递给“filterref”。像这样:

<filterref filter='no-ip-spoofing'>
   <parameter name='IP' value='10.0.0.1'/>
   <parameter name='IP' value='10.0.0.2'/>
</filterref>

并在“rule”语句内的“no-ip-spoofing”中使用它们:

<rule action='return' direction='out' priority='500'>
  <ip srcipaddr='$IP'/>
</rule>

“rule”语句中的每个IP(10.0.0.1、10.0.0.2)将被独立处理。

问:但是是否可以将参数作为复杂结构传递?
例如,我不仅要向“no-ip-spoofing”发送IP,还要向“no-ip-spoofing”发送MASK。类似的东西(当然下一个列表是不正确的 xml 结构):

<filterref filter='no-ip-spoofing'>
   <parameter name='IP' value='10.0.0.1', name='MASK' value='255.255.255.0'/>
   <parameter name='IP' value='10.0.0.2', name='MASK' value='255.255.255.0'/>
</filterref>

并像这样处理它们:

<rule action='return' direction='out' priority='500'>
  <ip srcipaddr='$IP' srcipmask='$MASK'/>
</rule>

我怎样才能做到这一点?

答案1

不要将其视为 RTFM,但文档正好适合此类用途(https://libvirt.org/formatnwfilter.html#usage-of-variables-in-filters)。使用两个参数数组和一个迭代器就足够了,我引用:

Accessing the same variables using a single iterator, for example by
using the notation $SRCIPADDRESSES[@1] and $DSTPORTS[@1], would result
in parallel access to both lists and result in the following combinations:

然而,我不知道如何提供此类参数,因为我仍在为将参数传递给过滤器而绞尽脑汁。对此主题的评论将不胜感激。

旁注:在同一章中,我们展示了可以获取参数矩阵,每个参数都有一个单独的迭代器。

编辑: 需要以流的形式提供参数数组,如问题顶部所示。对于两个数组,只需提供两个单独的流:

<filterref filter='no-ip-spoofing'>
   <!-- Array of IP values -->
   <parameter name='IP' value='10.0.0.1'/>
   <parameter name='IP' value='10.0.0.2'/>
   <!-- Array of MASK values -->
   <parameter name='MASK' value='255.255.255.0'/>
   <parameter name='MASK' value='255.255.255.0'/>
</filterref>

现在,必须更改规则以并行迭代(单循环):

<rule action='return' direction='out' priority='500'>
  <ip srcipaddr='$IP[@1]' srcipmask='$MASK[@1]'/>
</rule>

[自我推销]我贴了一篇关于nwfilters的有点相关的入门教程:https://blog.cbugk.com/post/kvm-guest-network-isolation/

相关内容