nftables:特定の宛先IP:ポートから(2番目)宛先IP:ポートにUDPパケットを複製します。

nftables:特定の宛先IP:ポートから(2番目)宛先IP:ポートにUDPパケットを複製します。

単一のIPポートとUDPポートに向かう非常に限られた量のパケットトラフィックは同じIPですが、2番目のポートにミラ​​ーリングしたいと思います。閉じ込められていたhttps://superuser.com/questions/1593995/iptables-nftables-forward-udp-data-to-multiple-targetsしかし、nftableのdupステートメントは、他のIPにのみコピーを許可し、同じIPおよび他のポートにはコピーを許可しないようです。

たとえば、127.0.0.1ポート123へのトラフィックは127.0.0.1ポート456にコピーする必要があります。これが唯一の反復であるため、元のポート番号が失われる問題はありません。これで、127.0.0.1が「倍数」/発信インターフェイスではなく、レプリケーションの最終ターゲットであるため、このレプリケーションが可能かどうか疑問に思います。これをDNATと組み合わせる方法はありますか?

着信UDPトラフィックを使用してeBPFプローブをnetdevに接続する以外に、利用可能な他のメカニズムはありますか?

ベストアンサー1

これは次の方法で行うことができます。nftablesそしてWeb開発者家族と入り口チェーンと繰り返す氏名。無限ループを防ぐには、マーカーを使用する必要があります。特定のユースケースに応じて、レプリケーションを次のように実行することもできます。出口(ここに位置しているのでループバックインターフェース、繰り返し出口パケットは次のように表示されます。入り口)しかし、これをサポートするにはカーネル> = 5.17が必要です。入り口長く使えました。

カーネル> = 4.10が必要です(状態の非保存UDP変更に対する正しいチェックサムサポートのため)。

# nft -f - <<'EOF'
table netdev t_dup        # for idempotency
delete table netdev t_dup # for idempotency

table netdev t_dup {
    chain c_ingress {
        type filter hook ingress device "lo" priority filter; policy accept;
        iif lo udp dport 123 meta mark != 1 meta mark set 1 dup to lo udp dport set 456
    }
}
EOF
  • 候補パケットがタグ付けされていることを確認し、タグ付けされていない場合にのみ処理します。タグを最初に設定すると、後でループが防止されます。

  • 繰り返しです。マークはレプリカの一部です。sk_buff、また繰り返す

    冗長パケットは、実際には変更されていないパケットです。同じ場所(lo)とポート123に送信されます。

  • このdup声明はどんなものとも反対しています。iptables'ターゲットはTEEターゲットを含むターゲットではありません。ルール氏名を終了します。ルールは、パケットの状態非保存変更に続く。 UDPポートが456に変更されました。

  • 重複したパケットも到着しました入り口ただし、ラベルが付けられているため、ルールはこれを無視します。ループがブロックされました。

次のコマンドを使用して冗長ポートをテストできます。ソカット:

socat -u udp4-recv:456,bind=127.0.0.1 -

メモ:

  • コピーされたポートにリッスンしているポートがないと、ICMPポートは接続できませんが、このポート(456)はトランスポートアプリケーションが送信するポート(123)と一致しないため、ネットワークスタックはそれを無視します。

  • Webフィルタ入り口AF_PACKETの後に発生します。TCPダンプ変更されたポートや重複したパケットはキャプチャされません。

おすすめ記事