私のnftableファイルが大きすぎます。小さなファイルに分割して試してみましたinclude
が、エラーが発生しました。複数の部分がどのように結合されるのか理解できない場合があります。
nftablesは含まれているすべての構成ファイルを読み取り、既存の構成と一緒にメモリーに構成オブジェクトを作成し、1回のアトミック操作で古い構成を新しい構成に置き換えます。
これは動作する小さなnftファイルです(つまり、正常にロードされました)。
# OK
table inet filter {
set deny_ipv4_ipset {
type ipv4_addr
flags interval
}
chain geoip {
type filter hook prerouting priority mangle
policy accept
meta iiftype loopback accept
ct state {related, established} accept
ip saddr @deny_ipv4_ipset drop
}
}
ただし、2つのファイルに分割するとロードされません。ファイルに保存して「論理的に」分割しても機能しません。
# not OK
table inet filter {
set deny_ipv4_ipset {
type ipv4_addr
flags interval
}
}
table inet filter {
chain geoip {
type filter hook prerouting priority mangle
policy accept
meta iiftype loopback accept
ct state {related, established} accept
ip saddr @deny_ipv4_ipset drop
}
}
2番目のファイルでは、次のエラーが発生します。
Error: No such file or directory; did you mean set ‘deny_ipv4_ipset’ in table inet ‘filter’?
ip saddr @deny_ipv4_ipset drop
^^^^^^^^^^^^^^^^
はい、Inet 'filter'テーブルの 'deny_ipv4_ipset'を意味しますが、このエラーが発生するのはなぜですか?
答え1
あなたが言ったように、いくつかのファイルのためではありません。同じテーブルを2回定義するからだと思います。私が正しく覚えているなら、この機能のようなものを使うことができます。
マニュアルにはインクルードの使用例があります。https://wiki.nftables.org/wiki-nftables/index.php/Classic_perimetral_firewall_example
table inet filter {
…
include "./inet-filter-sets.nft"
include "./inet-filter-preroute-chains.nft"
}
inet-filter-sets.nft
set deny_ipv4_ipset {
type ipv4_addr
flags interval
}