Linux: ルーティングでネットワーク遅延環境を構築 – iptables, tc

LinuxにiptablesのNAT設定とtcコマンドでネットワーク遅延環境を模擬的に構築してみたので、その手順を以下に記載する。欲を言えばクライント、サーバ側はStatic Routeに従ってルーティング出来るようルータールールの設定をしたかったが、リソース(主に時間)の関係上割愛。

環境

今回はMacのVMWare fusionで下記の3環境を用意した。左下のCentOS(ルーター部)以外は特にLinuxでなくとも良い。

検証のイメージとしては、BackTrackからCentOS当てへのHTTPリクエストをKail Linux側へ転送、そのレスポンスをKali Linux経由でBackTrackが受信、Webページの表示を行う。CentOS側のインターフェイスに対してdelayをかけることで疑似的な遅延環境となる。(BackTrack側でtcコマンドを実行すれば話が早いのだが、上記であれば両端の環境がLinux以外のOSでかつ遅延設定できない環境でも対応できる)

IPフォワード設定

先ずは、CentOS上でiptables関連の設定を実施。

再起動後も有効にしたい場合は /etc/rc.d/rc.localにecho 1 >/proc/sys/net/ipv4/ip_forwardを追記する。
/etc/sysctl.confに、以下を追記し

/etc/sysctl.confの再読み込みを行う。

続いて、/etc/sysconfig/networkに以下の設定を追記。

最後に/etc/sysctl.confのnet.ipv4.ip_forwardを1に設定し、再起動する。

iptablesの修正

/etc/sysconfig/iptablesを下記の通り修正する。

設定の再読み込みと確認

ネットワークdelayの設定

分かり易く1秒に設定する。in/out時にそれぞれ遅延が発生するので実際のWebページ表示は2秒以上となる。

Webサーバの立ち上げ

Kail Linux上でなにかサーバを立ち上げるが手っ取り早くPythonで簡易Webサーバを立ち上げることにする。

web.py

実行するとport 8000で待ち受けを開始する。

念のためListenポートを確認する。

Webページへアクセスする

BackTrack側からCentOSのport8000番に対してアクセスを試みると数秒待たされてページが表示されることが確認できる。下図だと左上がBackTrackクライアント画面。
linux_router_network_delay
表示時間がどれくらいか気になるのであれば、hping3等で8000番を指定し打ってみる。

何か上手くいかないときは、hping3、traceroute、tcpdump等で設定状態の確認をする。

遅延設定の解除

因みにtcコマンドは遅延幅の設定の他にパケットロス、パケットの重複、パケットの到着順の変更等色々ある。

コメント

  1. […] Linux: ルーティングでネットワーク遅延環境を構築 – iptables, tc […]