(netdev)エントリフックを使用するためにチェーンを宣言するときにデバイス名変数をどのように使用しますか?

(netdev)エントリフックを使用するためにチェーンを宣言するときにデバイス名変数をどのように使用しますか?

netdevフィルタテーブルフック​​の場合は、ingressデバイス名を変数に保存したいが、正しい構文がわかりません。

仕組みは次のとおりです。

table netdev filter {
    chain ingress {
        type filter hook ingress device ens33 priority -500;

        # ...
    }
}

...しかし代わりに変数を使いたいのですがens33

type filter hook ingress device ens33 priority -500;

次のコマンドを使用するとエラーが発生します。

define extif = ens33

table netdev filter {
    chain ingress {
        type filter hook ingress device $extif priority -500;

        # ...
    }
}

エラーは次のとおりです。

Error: syntax error, unexpected '$', expecting string or quoted string or string with a trailing asterisk

今私はそれがinに似ていることを望みましたが、ens*間違ったデバイス名を指定したときに発生したエラーに変わりました。ens+iptables

Error: Could not process rule: No such file or directory
        chain ingress {
              ^^^^^^^

同じ引用符は私には効果がありません。文書また、それが機能するようにする手がかりもありません。

deviceセクションでパラメータとして使用できるように、外部インターフェイスの名前を変数に入れることはできますかtype filter hook ...


カーネルは5.8で、システムはUbuntu 20.04です。nftablesとして報告されましたv0.9.3 (Topsy)

答え1

ああ、この機能が追加されました。今回提出してくださいそれ以降のみ利用可能nftables 0.9.7。 nftables 0.9.8でテストすると、ルールセットはそのまま機能します。

src:フローテーブルとチェーンデバイスで変数を使用できます。

このパッチは、以下のサポートを追加します。チェーン内のデバイスの変数の使用 フロー可​​能な定義、例:

define if_main = lo

table netdev filter1 {
   chain Main_Ingress1 {
       type filter hook ingress device $if_main priority -500; policy accept;
   }
}

署名者: Pablo Nela Ayuso[Eメール保護]


netdevファミリーチェーンは、または多くの種類カーネル5.5とnftables 0.9.3から始まる)インタフェースはチェーン定義の前にすべて存在する必要があります。ワイルドカード文字は使用できません。

これ複数のデバイスチェーン構文は少し異なります。

table netdev filter {
    chain ingress {
        type filter hook ingress devices = { ens33, ens34 } priority -500;

        # ...
    }
}

またはnftables>= 0.9.7:

define extifs = { ens33, ens34 }

table netdev filter {
    chain ingress {
        type filter hook ingress devices = $extifs priority -500;

        # ...
    }
}

古い既存の構文を使用して、1つのインターフェース(たとえば{ ens33 })のみが再表示されます。

関連情報