質問
'redirect'
あるポートから別のポートへのトラフィックが必要です。ただし、そのポートを介して通信するときに使用されるINPUT
ANDバイト数を計算できるはずです。OUTPUT
半分理解しました
iptables -t nat -A PREROUTING -p udp --dport 50000 -j REDIRECT --to-port 3478
ソリューションはすべてのトラフィックをここにあるすべてのエントリ50000
にリダイレクトするのに問題はありませんが、ポートを通過するトラフィック3478
はカウントできません。これは重要な質問です。INPUT & OUTPUT
50000
現在の設定
firewall-cmd --zone=public --add-port=50000/udp;
iptables -I INPUT -p udp --dport 50000;
iptables -I OUTPUT -p udp --sport 50000;
INPUT
この設定を使用して、どれだけのANDデータが使用されているかを計算しますOUTPUT
が、これがそうでない場合にのみ機能します'redirected'
。
流れ?
Packet -> 50000(adds bytes to INPUT) -> 3478;
Packet <- 50000(adds bytes to OUTPUT) <- 3478
より良い方法がある場合は、iptables
提案を受け取ります。
答え1
以下が必要です。
# Tag UDP packets of the "connection" with mark 50000
iptables -t mangle -A PREROUTING -p udp --dport 50000 -j CONNMARK --set-mark 50000
# Make the port redirection
iptables -t nat -A PREROUTING -p udp --dport 50000 -j REDIRECT --to-port 3478
# Count the bytes with mark 50000
iptables -m connmark -t mangle -A OUTPUT -p udp --sport 3478 --mark 50000
iptables -t mangle -nvL
これにより、次のようになります。
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
4 132 CONNMARK udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:50000 CONNMARK set 0xc350
...
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
2 66 udp -- * * 0.0.0.0/0 0.0.0.0/0 connmark match 0xc350 udp spt:3478
説明する:
- 実際のパケットにUDPソースポート50000ネットワークキャプチャが表示されていても、ポート
-j REDIRECT
50000の接続に出るすべてのパケットは一致します--sport 3478
が、一致しないため、ポート50000から出るパケットを一致させるルールを作成することはできません。--sport 50000
これがバグか予想される動作かわかりません(iptables 1.8.2(nf_tables)でテスト) - この問題を解決するには、次のものを使用できます。
CONNMARK
ターゲットPREROUTING側で、任意の32ビット整数で接続内のすべてのパケットにタグを付け、同じタグを次のものと組み合わせます。コマックモジュール出力側に。