単一の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ダンプ変更されたポートや重複したパケットはキャプチャされません。