送信元アドレスに基づいて、宛先ポートタプルの動的短期UDPポート転送を実行しています。マッピング、ルックアップ、および適切なルールでnftableを使用するとうまく機能します(pre-route / nat destチェーンのnatおよびpost-route / nat srcチェーンのmasq)。
ただし、nftablesでNATを使用すると、フローの後続の(設定された)パケットに対してルールルックアップは行われません(参照:文書)。これは、マップから要素を削除したり、マップにフィルタリングルールを追加したりして既存のプロセスを終了できないことを意味します。
この問題を処理する最も簡単な方法は、ステートレスNATを実行することです。ただし、ネイティブ優先順位を持つ事前ルーティングされたフィルタチェーンの単純なルール(例を簡素化するためにマップを使用せずに変数を使用)は機能しないようです。トレースは見えますが、$targetにパケットが到着しません。
ip saddr $client ip protocol udp notrack ip daddr set $target nftrace set 1 return
私が欠けているnftablesのステートレスNATを構築する方法の詳細なドキュメントはありますか? $targetから$clientに戻るフローのルールも追加する必要がありますか?
それとも、積極的な接続追跡タイムアウトを追加するなど、私が知らない既存のNATフローをフィルタリングする方法はありますか(CTがnftablesを介してNATとも機能しているかどうかわからない)。
ベストアンサー1
まあ、文書が少し誤解を招く可能性があることがわかりました。 「フローの後続パケットに対してルール照会は発生しません」と言われていますが、これは後続の処理ルールが適用されないことを意味します。
元の優先順位でフィルタチェーンを追加すると、まだアクティブなNATフローからパケットが破棄されます。フォワードフックフィルタリング(ターゲットポート、アドレスなどの変更)でも同様です。
私はまだこの無状態をモデル化する方法を理解することに非常に興味がありますが、優先順位のある生の操作を使用して事前ルーティングされたフィルタチェーンにフィルタルールを追加します。