アクティブな接続のnft flowtableハッシュを更新する方法は?

アクティブな接続のnft flowtableハッシュを更新する方法は?

私のFlowtableオフロードは私のルータで完全に動作します。場合によっては、進行中の一部のトラフィックがフローテーブルを介して処理されるのをブロックしたい場合があります。通常のルート処理に新しいブロックルールを追加すると、アクティブなオフロード接続には影響しません。したがって、いくつかの新しいルールを追加した後、フローテーブルのハッシュを更新して再構築したいと思います。しかし、どのように? nftコマンドを使用してオフロード接続を消去する方法が見つかりませんでした。フローテーブルを破壊して再生成することもできますが、より良い方法はありませんか?

答え1

オフロードされたトラフィックはまだつながるこの属性を持つエントリ[OFFLOAD](オフロードされたエントリはデフォルトの30秒の非アクティブタイムアウトを持ち、オフロードされていないconntrackエントリに戻ります。このエントリは、再ロードする機会があるまでトラフィックを表示できません)。フローテーブルエントリを削除するには、delete conntrack itemを使用しますconntrack -D

修正する:この機能はすでに提供されています。犯罪:

netfilter:ctnetlink:削除のためのconntrackエントリの削除をサポート

現在オフロードされているconntrackエントリ(フロー)は、タイムアウト、tcpステータスの変更、またはtc ctルールの削除によってオフロードから削除された後にのみ削除できます。これにより、既存のアイテムを手動で削除したり更新したいユーザーに問題が発生する可能性があります。

カーネル6.4または新しいカーネルが必要です。LTS 6.1.x(〜> = 6.1.32)コミットの参照例を介してバックポートされました。

Example usage:
 # Delete all offloaded (and non offloaded) conntrack entries
 # whose source address is 1.2.3.4
 $ conntrack -D -s 1.2.3.4
 # Delete all entries
 $ conntrack -F

次のLTSカーネルもコミットされます。十分に新しいカーネルを使用していることを確認してください。4.195.45.105.15

以前のカーネルでは、このクラスを削除してみてください。つながるエントリはEBUSYを返します(見てわかるように、このエラーはコミットから削除されました)。

すべてのアイテムのみを削除[OFFLOAD]する最も簡単な方法は次のとおりです。

conntrack -D --status OFFLOAD

またはハードウェア削除(テストされていない)は次のとおりです。

conntrack -D --status HW_OFFLOAD

ただし、間違った時間にストリームがアンマウントされていない状態に戻る可能性があるため、完全に信頼できないため、除去フィルタに含めないことが最善です。添付プロパティの使用つながるconntrack -L ...プロトコル、ソースアドレス、ポートなどのエントリ(表示されているように)のエントリを削除することをお勧めします。

だからこんなツール失敗2禁止これにより、一般的な ESTABLISHED 状態ルールの前に設定されたブラックリストに項目が追加されます。このルールには、5-uple(単一ストリームの削除)またはソースアドレス(そのアドレスに対する関連するすべてのストリームの削除)を含める必要があります。たとえば、現在の OFFLOAD 状態で (ソース) ソース 192.0.2.11 をブロックまたはブロックしない場合は、削除ルールで使用されるセットを更新することに加えて、OFFLOAD 状態を特に考慮せずに次のように実行できます.

conntrack -D -s 192.0.2.11

関連情報