インターフェースから別のインターフェースへのパケットのコピー


9

私は2つのイーサネットカード、つまりeth0とeth1が2つのまったく関係のないLANに接続されているLinuxシステム(Aとします)を使用しています。

基本的にeth0は通常のアプリケーショントラフィックに使用され、eth1はデバッグ目的でのみ使用されます。デバッグとは、クロスケーブルを使用してeth1がWiresharkを実行する別のLinuxボックス(Bとする)にリンクされていることを意味します。WiresharkがAのeth0を移動するアプリケーションパケットを処理できるようにしたい。

基本的に、ボックスBのWiresharkがパケットを傍受できるように、eth0インターフェイスからインターフェイスeth1に移動パケットをコピーする必要があります(何らかの理由で、LAN eth0に物理的にアクセスできません)。また、いくつかの規則に従って(ところでTCP / IPフィールドのみに基づいて)eth0からeth1にコピーするパケットを指定する必要があります。

また、Aを宛先とするパケットのサブセットのみをコピーしたいので、Aのeth0を無差別モードにする必要がないことにも注意してください。

iptablesだけを使用してこれを達成する方法はありますか?または、これを機能させるためにアプリケーションを作成する必要がありますか?パケットを「コピー」するにはどうすればよいですか?

回答:



4

tc mirredアクションを使用できます。例:着信トラフィックの場合:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 1:1 \
   action mirred egress mirror dev eth1

発信トラフィックの場合:

tc qdisc replace dev eth0 parent root handle 10: prio
tc filter add dev eth0 parent 10: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 10:1 \
   action mirred egress mirror dev eth1

3

ネットでtcpbridgeを検索します。tcpbridgeはまさにその仕事です。仮想マシンとの通信にも使用できます。


1

rinetdの ようなものが機能する可能性がありますが(TCPのリダイレクター/サーバーだけなので、ARP、レイヤー2などはありません)、正直なところ、ポートミラーリング機能を備えた管理されたスイッチを取得するか、そのボックスがWiresharkにのみ使用されている場合、別のNICを追加して、2つのインターフェースをブリッジし、マシンAのeth0の前に配置し、専用のスニッフィングマシンを用意することができます。


1

イーサネットフレームを1つのインターフェイスから別のインターフェイスにコピーするデバイスはブリッジです。Linuxシステムをブリッジとして機能するように構成できます。いくつかのドキュメントはここにあります:

レイヤ2トラフィックのアナログであるebtablesを使用して、フィルタリングされたトラフィックにフィルタリングルールを適用できますiptables


0

私のセットアップでは、マルチキャストTXトラフィックはiptablesによってマークされましたが、新しいルーティングテーブルを使用したポリシールーティングは機能しませんでした。ユニキャストTXパケットでは機能しましたが(元のパケットをeth0からeth5にリダイレクトします)。tcを使用すると、eth0 mcastトラフィックをeth5に取得できます。srcmacおよびsrc ipアドレスはeth5のアドレスに変更されるため、スイッチの学習で問題が発生しません。カーネルパケットスケジューリングのすべてのカーネルサポートCONFIG_NET_SCHEDを有効にする必要があります

eth0からeth5にリダイレクトするユニキャストおよびマルチキャストトラフィックのWORKSの下

Netfilterは、カーネル内のパケットを表す構造と直接対話するために使用できます。この構造であるsk_buffには、変更する「__u32 nfmark」と呼ばれるフィールドが含まれています。次に、TCはその値を読み取って、パケットの宛先クラスを選択します。

IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' iptables -t mangle -A OUTPUT -s $ {IP_ADDR_ETH0} -p udp --match multiport --dports 329,330 -o eth0 -j MARK --set-mark 2

スケジューリングポリシーを表すツリーを作成し、PRIO qdisc(パケットスケジューラ)を使用します(他の利用可能なものを試すことができます)。デバイスのルートに接続するqdiscs

tc qdisc add dev eth0ルートハンドル15:prio

これで、片側にトラフィックシェーピングポリシーがあり、反対側にパケットマーキングがあります。2つを接続するには、フィルターが必要です。

refer man tc-mirred(8):mirredアクションは、受信したパケットのミラーリング(コピー)またはリダイレクト(盗用)を可能にします。ミラーリングは、スイッチポートアナライザー(SPAN)と呼ばれることもあり、フローの分析やデバッグによく使用されます。

man tc-fw(8)を参照してください:fw-fwmarkトラフィック制御フィルターfwフィルターは、iptablesによって以前に設定されたfwmarkに基づいてパケットを分類することを許可します。フィルターの「ハンドル」と同一の場合、フィルターは一致します。iptablesは、単一のパケットをMARKターゲットでマークしたり、CONNMARKを使用して接続全体をマークしたりできます。

MAC_ADDR_ETH1 = cat /sys/class/net/eth1/address IP_ADDR_ETH1 = ifconfig eth1 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' tc filter add dev eth0 parent 15:0 protocol ip prio 1 handle 0x2 fw action pedit ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} pipe \ action mirred e開発者eth1

上記の設定ルールを表示:tc qdisc show dev eth0 tc filter show dev eth0

上記の設定ルールの削除/設定解除:tc qdisc del dev eth0 root

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.