LoginSignup
42
40

More than 5 years have passed since last update.

ipfw コマンドで品質の悪い回線をエミュレートする (OS X)

Last updated at Posted at 2013-12-03

はじめに

ipfw コマンドは OS X 10.11 でなくなってしまったので、以下の文章は役立たない

過去役に立った話

Mac OS X に標準搭載の ipfw コマンドの便利な使い方。

ipfw のパイプ機能で回線の品質を自在にエミュレートできるので、 GSM / 3G などの遅いモバイルネットワークや、海外からのアクセスにも最適化しなくてはいけないときに有用。

パイプを通す

# すべての通信を制御する場合
sudo ipfw add pipe 1 ip from any to any

# TCP 80 だけ制御する場合
sudo ipfw add pipe 1 tcp from any to any 80

# 特定の IP アドレス帯だけ制御する場合 (from と to を逆にすれば着信も制御できる)
sudo ipfw add pipe 1 ip from me to 172.16.0.0/24

パイプに遅延や帯域制限を設定する

# 1Mbps, 80msec, パケットロス率 10% (それなりな LTE 程度)
sudo ipfw pipe 1 config bw 1Mbit/s delay 80ms plr 0.1

# 180kbps, 300msec, パケットロス率 30% (MVNOの遅いやつ程度)
sudo ipfw pipe 1 config bw 180Kbit/s delay 300ms plr 0.3

# 100kbps, 800msec, パケットロス率 50% (パケ詰まり)
sudo ipfw pipe 1 config bw 100Kbit/s delay 800ms plr 0.5

設定状況の確認

$ sudo ipfw list
00100 pipe 1 tcp from any to any dst-port 80
65535 allow ip from any to any

$ sudo ipfw pipe 1 list
00001: 100.000 Kbit/s  800 ms   50 sl.plr 0.500000 1 queues (1 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
  0 tcp   192.168.100.24/52102  173.194.79.109/993   11560  2753527  0    0 1680

設定を戻す

sudo ipfw flush
# "Are you sure? [yn]" と聞かれるので y

このように、通信相手とパケットロス率をこと細かに指定できるので、デバッグだけではなく「ナントカモバイルの 300kbps SIM ってどうなんだろう」というときに体感を掴むのにも役立つかもしれない。

なお、今回取り上げた ipfw(8) は DEPRECATED なので pfctl(8) でやるのが本筋かもしれないが、こちらは設定ファイルを作り込まなくてはいけない、OS ビルトインのファイアウォール機能と衝突するなど煩雑なのでおすすめできない。

42
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
40