「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>
「ルール」ステートメント各IP(10.0.0.1、10.0.0.2)は独立して処理されます。
Q:しかし、パラメータを複雑な構造に渡すことは可能ですか?
たとえば、IPを「no-ip-spoofing」に送信したいだけでなく、MASKも「no-ip-spoofing」に送信したいと思います。次のようなものです(もちろん、次のリストは正しい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)。 2つのパラメータ配列と1つのイテレータを使用するだけで十分です。
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:
ただし、フィルタにパラメータを渡すことについてまだ頭を傷つけているので、これらのパラメータを提供する方法はわかりません。このトピックに関するご意見をいただきありがとうございます。
注:同じ章では、各パラメータに対して別々のイテレータを使用してパラメータ行列を取得することが可能であることを示しました。
編集する: パラメータ配列は、質問の上部に示すようにストリーム形式で提供する必要があります。 2つのアレイの場合は、2つの別々のストリームを提供できます。
<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/