送信パケットを静かにドロップするにはどうすればよいですか?


8

作業中のアプリケーションのテストを行っています。発生する可能性のある障害モードを複製するために、送信UDPパケットを短時間、静かにドロップできる必要があります。

これを行う方法はありますか?

注:iptables DROP は送信メッセージに対してサイレントではありません!ときsend()または類似の呼び出しがで落とされiptables、それが返されますEPERMいくつかの奇妙な理由(参照のためにここに。私の目的地が離れて、単一のホップであるとして残念ながら、私はその答えを使用することはできません)。

xtables-addons 以前STEAL動詞がありましたが、数年前に削除されましたが、理由はわかりません。


私は今、ルーティングテーブルに偽のルートを使用してみましたが、残念ながら、それは破るために表示され、両方の COMMトラフィックの方向を。
私がする必要があるテストでは、私が持ってできるように、インバウンド UDPトラフィックを、そしてソースはまだそれらを送信しているかのようにすぐに私は、偽のルート、ストリーミング着信パケットただちに停止をインストールして。


1
完全で整然とした解決策には程遠いですが、過去に同様のテスト条件が必要でした。私の場合、接続しているサーバーに偽の静的ルートを追加するとうまくいきました。
2015

@steve - A偽のルートはで物事を破るように見えるの両方の方向、と私はRX方向の機能を維持する必要があります。
架空の名前

回答:


2

ダミーのインターフェースを追加して、そのインターフェースへのルートを設定するのはどうですか?

# ip link add dummy0 type dummy
# ip link set dev dummy0 up
# ip route add 8.8.8.8/32 dev dummy0
# ping -c3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2015ms

は常に、の任意の(ネイバーまたはリモート)アドレスにパケットを送信しますdummy0

# tshark -i dummy0
Running as user "root" and group "root". This could be dangerous.
Capturing on 'dummy0'
  1   0.000000   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=1/256, ttl=64
  2   1.007348   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=2/512, ttl=64
  3   2.015394   10.10.0.59 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x1ce0, seq=3/768, ttl=64

残念ながら、これは他のインターフェイスからのルートに一致する着信パケットを許可しないようです。そのため、実際には機能しません(続行するために許可する必要がある開いているUDP rxストリームが壊れます)。
架空の名前

2

ルートを追加すると、リバースパスフィルタリングが原因で着信トラフィックが遮断されます。簡単な解決策:インターフェースでリバースパスフィルタリングを無効にします。

echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

eth0上記の代わりに着信インターフェースを使用してください)。

REDIRECTターゲットを使用することもできます(たとえば、パケットを受信するnetcatにパケットを送信します— nc -l -u -p 1234 > /dev/null)。より複雑なバージョンはNFQUEUEです。

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