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 }
)のみが再表示されます。