
| ・ |
ドキュメントセンターを初めてご利用する方や運営方針についての基本的な姿勢をご覧になりたい方へ。
|
| ご利用の皆様から多く寄せられる質問にお答えしています。 |
|
| ・ |
ディーエーオフィスなどが利用する用語に関する解説を行います。
|
|
|
 |
 |  |
ipfw DUMMYNET |
帯域制御を行うには、DUMMYNETという仕組みが必要。カーネルの再構築も。なお、ipfw、ファイアウォールが必須となる。dummynetの動作だけならば、ブリッジは必要ない。制御は、パイプを作った上で、条件を設定する。maskやフローといった考え方も留意したい。
今回の導入では、複数のマシンがネットワークを共有する環境で、メインマシンの操作だけを最優先させる大胆な設定をすることとする。当然、極端な制御は一般的には行わない。なお、IPごとの制限には、maskの設定を学ぶべき。
・カーネル再構築・導入
・rc、sysctlなどの設定
・ipfwの設定
試験環境(test): FreeBSD4.11 / PentiumII 266MHz
---
FreeBSD4.11の場合、カーネルの再構築を必要とすることなく、ipfwを利用できる。しかし、dummynetの追加方法はよく分からず、最終的にはカーネルを再構築した。なお、有効かどうかは、dmesgコマンドで確認できる。
dmesg|more
たくさんの記事が出てくるが、moreを使っているのでカーソルにて上下スクロールができる。今回は、dummynet、ip packet filtering、bridgeを探して見つかれば、有効化されていることになる。ip packet filteringに続く、細かな設定はsysctlで変更できる。
DUMMYNET initialized (011031)
IP packet filtering initialized, divert enabled, rule-based forwarding enabled,
default to accept, logging disabled
BRIDGE 020214 loaded
以下、カーネルの再構築を示す。
cd /usr/src/sys/i386/conf
cp GENERIC dummynet
ee dummynet
# identに付与する名前を変更する
ident dummynet
# 以下を適当な場所へ必要に応じて追加
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT
options IPFIREWALL_DEFAULT_TO_ACCEPT
options DUMMYNET
options IPDIVERT
options BRIDGE
options HZ=1000
options NMBCLUSTER
# 上述を上から順番に対応して説明
# FIREWALLを有効化、dummynetに必要
# ipfwログの取得
# ipfwログの取得を制限する
# 標準状態ではファイアウォール制限をしない
# 帯域制御の有効化
# NATを有効化
# ブリッジの有効化
# 処理の細かさを指定(1000以上を設定推奨・ネット上の記事では初期値が1と100を散見)
# ネットワークパケットのバッファの大きさ
config dummynet
cd ../../compile/dummynet
make depend
make
make install
reboot
---
# SYSCTLを設定
ee /etc/sysctl.conf
# 1度だけパケットがipfwを通る、1=有効,0=無効
net.inet.ip.fw.one_pass
# ブリッジ設定されたパケットがipfwを通る、1=有効,0=無効
net.link.ether.bridge_ipfw
# run commandを設定
ee /etc/rc.conf
# 以下を必要に応じて追加、すでにgatewayやnatの設定を終えていると想定
firewall_method="dummynet"
# 制御は、firewall_typeで設定したもので行う。firewall_typeには、ファイル名を指定できるので、テスト環境では、 /etc/firewall を作っている。
---
帯域制御の設定
以下の記事は参考程度に示します。現在、設定を行っていますが、パケットの確認はできるものの、帯域制御が実感できてはいません。マシン別に大きめのファイルをダウンロードすると、1:1の比率でほぼ同じ時間にて終了するため、制御はできていないと推定しています。
制御には、まずパイプと呼ばれる管を作ります。パイプ毎に帯域をまとめ、中を流れるパケットへ制御を行います。次に、キューと呼ばれる単位にパケットを分割します。また、maskを設定することで、フローと呼ばれる単位でさらに分割する考え方があります。下記の設定例では、pipeを作るのが先となっており、ネット上の記事では後として紹介されている例も散見します。
FreeBSD Expert 2003では、技術的な問題や考え方を丁寧に解説してありますが、若干難しい内容です。ip毎の制御などで参考になるのは、UNIX USERの2001/4です。maskの考え方を紹介しています。テスト環境でも、以下の「bw 1024K」などの設定により、確かに帯域が制限できることを実感できていますが、おそらく、maskの手法などが不完全であるため、中を通るパケットのip毎での制御はできていません。UNIX USERの2005/3は手元にありませんが、執筆者の方がネット上へ草稿を公開されているのも参考になります。
さらに、「pipe 1 config bw 768K」と設定することで、意図した動作をするようになりました。例えば、800Kなどとより大きな値を設定したとき、複数の端末でブロードバンド用のスピードテストを受けると、明らかに1:1などの比になりますが、768K以下では9:1などの以下に設定した値になります。(意図した状態からは差があるなどの記述も散見しますが、往々にして誤差の範囲であってほとんどの場合、指定値に近い状態となります。)
・mask タイプ 設定値
・bw 1024K・・・1Mbpsで制限
・weight・・・帯域の使用比率を1〜100で指定
ee /etc/firewall
pipe 1 config bw 768K
pipe 2 config bw 768K
queue 3 config weight 90 mask dst-ip 0x000000ff queue 76Kbytes pipe 1
queue 4 config weight 10 mask dst-ip 0x000000ff queue 76Kbytes pipe 1
queue 5 config weight 90 mask src-ip 0x000000ff queue 76Kbytes pipe 2
queue 6 config weight 10 mask src-ip 0x000000ff queue 76Kbytes pipe 2
add queue 3 all from any to 192.168.1.10 via any
add queue 4 all from any to 192.168.1.11 via any
add queue 5 all from 192.168.1.10 to any out via tun0
add queue 6 all from 192.168.1.11 to any out via tun0
---
制御の状況を確認するには、以下のコマンドを参考にします。
ipfw show
パケットフィルタリングを含めて、現在の設定状況と流れたパケット等が見られます。なお、ipfw -a listと同義です。
ipfw pipe show
帯域制御の状況が見られます。
---
以下参考
0x000000ff 最後の1桁を見る。
192.168.1.50 指定できてしまったが、あまり意図した動作をしている印象はない
0xffffffff 全部を見る。
# in via anyというようなviaがanyでも構わないらしい
add queue 11 all from any to 192.168.1.10 in via any
tun0
# ipfw jmanに掲載されているip毎の制約という例
ipfw add pipe 1 ip from 192.168.2.0/24 to any out
ipfw add pipe 2 ip from any to 192.168.2.0/24 in
ipfw pipe 1 config mask src-ip 0x000000ff bw 200Kbit/s queue 20Kbytes
ipfw pipe 2 config mask dst-ip 0x000000ff bw 200Kbit/s queue 20Kbytes
# 作者ページに掲載されているip毎の制約という例
ipfw add queue 1 ip from any to 10.1.2.0/24
ipfw queue 1 config weight 5 pipe 2 mask dst-ip 0x000000ff
ipfw pipe 2 config bw 300Kbit/s
# maskをpipeに対して指定すれば、均等に割り当てられるとする表記がjmanにある
pipe 1 config bw 1024K mask dst-ip 0x000000ff
# 途中の例
pipe 1 config bw 1024K mask dst-ip 0x000000ff
pipe 2 config bw 1024K mask src-ip 0x000000ff
queue 11 config weight 99 mask dst-ip 0x000000ff pipe 1
queue 12 config weight 1 mask dst-ip 0x000000ff pipe 1
queue 21 config weight 99 mask src-ip 0x000000ff pipe 2
queue 22 config weight 1 mask src-ip 0x000000ff pipe 2
add queue 11 all from any to 192.168.1.10 via fxp0
add queue 12 all from any to 192.168.1.11 via fxp0
add queue 21 all from 192.168.1.10 to any via fxp0
add queue 22 all from 192.168.1.11 to any via fxp0
|
| 文書番号 |
05469 |
| 日付 |
2006.02.11 |
| 参照数 |
1114 |
|