web-dev-qa-db-ja.com

合計の50%のパケットをドロップする方法

私のマシンでは、50%のパケットだけを受信するようにしたいと思います。

私はcentOS5.5に取り組んでいます。

そのために私はネットで検索しました。 IPtablesを入手しました。 IPtablesのランダムパッチを使用しました。

コマンド

Sudo iptables -A INPUT -p icmp --icmp-type echo-request -m random --average 50 -j DROP

出力

iptables v1.3.5: Couldn't load match `random':/lib64/iptables/libipt_random.so: cannot open shared object file: No such file or directory

Try `iptables -h' or 'iptables --help' for more information.

しかし、上記はそのライブラリが欠落していることを示しています。

次に、合計の50%のパケットをドロップするにはどうすればよいですか。上記の方法を修正するか、新しい方法を提案してください。

これらのライブラリをIPtablesの既存のパッケージに追加する方法を教えてください。 [試しましたが、これらのライブラリはインターネット上にありません]

編集番号1

ドロップされたパケットのログをさらに記録する必要があるため、iptablesルールセットを次のように変更しました。

iptables -L -n -v出力は[これはシステム1で実行されています]

Chain INPUT (policy ACCEPT 1875K packets, 114M bytes)
 pkts bytes target     prot opt in     out     source               destination
   23  2392 random_drops  icmp --  *      *       0.0.0.0/0            0.0.0.0/0           statistic mode random probability 0.500000

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 2121K packets, 206M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain random_drops (1 references)
 pkts bytes target     prot opt in     out     source               destination
   23  2392 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `dropped randomly: '
   23  2392 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

次に、スクリプトを実行します(このスクリプトは、トラフィックを増やすために2つのインスタンスでシステム2で実行されています)

while [ 1 ]; do
    rsh a.b.c.d pwd;
done

2つのシステムで。しかし、ログは形成されません。

  1. / var/log/messagesの権限は-rw ------- root:rootです。
  2. / var/log/syslogが存在しません。

何が足りないのですか?

3
devsda

CentOS 5.5には、ipt_randomモジュールもipt_statisticモジュールもプリインストールされていません。 CentosALTリポジトリ (ロシア語を失礼します)に戻り、そこから簡単にコンパイルできる統計モジュールを使用できます。

wget http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
# [...]
rpm -Uvh centalt-release*rpm
# [...]
yum install ipt_statistic

と実行中

Sudo iptables -A INPUT -p icmp --icmp-type echo-request -m statistic --mode random --probability 0.50 -j DROP

必要なルールが得られるはずです。

Netemのドキュメントからの注意:

警告

損失がローカルで(ブリッジやルーターではなく)使用される場合、損失は上位レベルのプロトコルに報告されます。これにより、TCPが再送信され、損失がなかったかのように動作する可能性があります。損失に対するプロトコルの応答をテストする場合は、ブリッジまたはルーターでnetemを使用するのが最適です。

ただし、INPUTチェーンでドロップしている限り、これは明らかに適用されません。

5
the-wabbit

これはカーネル構成の問題です。 iptables-extensions(8)を参照してください。statisticモジュールについて説明しています。

iptables ... -m statistic --mode random --probability 0.5 ...

(必要に応じて...を入力してください)。

これはカーネル構成CONFIG_NETFILTER_XT_MATCH_STATISTICであり、ここでモジュールに設定されています(Fedora 18、kernel-3.8.3-201.fc18.x86_64、iptables-1.4.16.2-5.fc18.x86_64)。 iptablesユーザーランド実行可能ファイルに一致するipt_statistic共有オブジェクトはありません。

0
vonbrand