0

tcGRE-Tunnelを使用して、1 つのインターフェイスから「すべての」ネットワーク トラフィックをミラーリングしようとしていますtun0。GRE トンネルは正常に動作しています。問題なく ping を実行してパケットを送信できます。次のコマンドでtc-qdiscandを追加しました。tc-filter

tc qdisc add dev ens5 ingress

tc filter add dev ens5 parent ffff: \
protocol all \
u32 match u8 0 0 \
action mirred egress mirror dev tun0

tc qdisc add dev ens5 handle 1: root prio

tc filter add dev ens5 parent 1: \
protocol all \
u32 match u8 0 0 \
action mirred egress mirror dev tun0

このチュートリアルのように

問題

問題は、イングレス トラフィックだけが GRE トンネルを通過することです。インターフェイスを介して別のコンピューターにpingを実行すると、インターフェイスを介してens5のみ取得されます。私は何を間違っていますか?icmp echo repliestun0

デバッグ

ubuntu@switch:~$ tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:23:28.952197 IP 192.168.20.12 > 192.168.20.15: ICMP echo reply, id 3453, seq 1, length 64
10:23:29.954454 IP 192.168.20.12 > 192.168.20.15: ICMP echo reply, id 3453, seq 2, length 64
10:23:30.952864 IP 192.168.20.12 > 192.168.20.15: ICMP echo reply, id 3453, seq 3, length 64
10:23:31.953207 IP 192.168.20.12 > 192.168.20.15: ICMP echo reply, id 3453, seq 4, length 64
10:23:32.955350 IP 192.168.20.12 > 192.168.20.15: ICMP echo reply, id 3453, seq 5, length 64
10:23:33.957000 IP 192.168.20.12 > 192.168.20.15: ICMP echo reply, id 3453, seq 6, length 64
10:23:34.956313 IP 192.168.20.12 > 192.168.20.15: ICMP echo reply, id 3453, seq 7, length 64
4

2 に答える 2

2

自分で問題を解決しました。

tc は、イーサネット ヘッダーのある出力トラフィックとイーサネット ヘッダーのない入力トラフィックをミラーリングします。GRE トンネルは IP パケットのみを想定しているため、ヘッダーの不一致がありました。GRE の代わりに VXLAN を使用している場合、問題なく動作します。

于 2016-12-15T13:04:39.493 に答える
0

私はGRE-Tunnelsを使ったことはありませんが、あなたが投稿したチュートリアルのリンクに基づいて、ブリッジインターフェースと関係がありますか? 現在、ブリッジ インターフェイスで Linux トラフィック コントロール (tc) も使用しています。私の場合、これは Docker によって作成されたブリッジであり、トラフィックを操作する必要があります (リダイレクトするだけではありません)。

私の経験に基づいて、ブリッジ インターフェイスに tc クラス/フィルターを追加すると、tc が期待どおりに動作しないことがわかります。これは主に、ブリッジ上のイングレス トラフィックとエグレス トラフィックの定義に基づいているため、(私にとっては) 非常にわかりにくいものです。また、ICMP-Ping 機能を使用して tc の構成をテストしましたが、あなたと同様に、ICMP 応答しか操作できませんでした。

私の仮定では、tc は ICMP 要求に反応していないということでした。私の場合は、ブリッジ ポート間で切り替えられただけで、ルーティングされなかったからです。ebtables ( http://ebtables.netfilter.org ) で ICMP リクエストをドロップすることで tc で ICMP リクエストを処理できたため、ブリッジ ポート間で切り替えられるのではなく、強制的にルーティングされました。

GRE-Tunnelsがどのように機能するか、またはそれらがどのように実装されるかがわからないため、これがあなたの問題の解決策になるかどうかはまだわかりません.

于 2016-12-13T08:44:23.803 に答える