連載
mangleテーブルでQoSを実現:iptablesテンプレート集 改訂版(6)(2/3 ページ)
この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部)
mangleテーブル実行例≫
iptablesのmagleテーブルを使って、IPパケットのTOS/DSCP/ECN/MARKといった値を書き換える方法を解説します。
TOSベースのQoSに対応させる
TOSベースのQoSに対応するよう、以下のようにiptablesを実行し、パケットを書き換えます。優先順位付には文字列や数値(10進数または16進数)を用います。
iptablesでパケットをTOSベースのQoSに対応させる
- サーバへのssh(TCPポート22番)のパケットについて、遅延(daley)を最小限(Minimize-Delay)にするようTOSを設定する
$ sudo /sbin/iptables -A PREROUTING -t mangle -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
- サーバへのHTTP(TCPポート80番)のパケットについて、高いスループット(Maximize-Throughput)の経路を探すようTOSを設定する
$ sudo /sbin/iptables -A PREROUTING -t mangle -p tcp --dport 80 -j TOS --set-tos Maximize-Throughput ※--set-tos TOS名または数値 ※指定可能なTOS名や数値は表1参照
DiffServベースのQoSに対応させる
DiffServベースのQoSに対応するようDSフィールドを書き換えるには、次のようにiptablesを実行します。
iptablesでパケットをDiffServベースのQoSに対応させる
- サーバへのHTTP(TCPポート80番)のパケットについて、DSフィールドを設定する
$ sudo /sbin/iptables -A PREROUTING -t mangle -p tcp --dport 80 -j DSCP --set-dscp-class EF --set-dscp DSCPの数値 DSフィールド内のDSCPの数値(10進または16進)を設定します --set-dscp-class DiffServクラス DSフィールド内のDSCPのDiffServクラス(BE、EF、AF○、CS○[○:数字])を設定します。
ECNビットを削除する
ECN(Explicit Congestion Notification)は、ルータから末端のノードに対しネットワークの輻輳(ふくそう)状態を通知するのに使います。TOSフィールドの最後の2ビットを「ECNビット」として利用します。なお、ECNに対応しないネットワーク機器で問題が起こる場合には、iptablesを使ってECNビットを削除します。
- iptablesを使ってECNビットを削除する
$ sudo /sbin/iptables -A PREROUTING -t mangle -p tcp --dport 80 -j ECN --ecn-tcp-remove --ecn-tcp-remove ECNビットを削除します。
MARK値を設定する
LinuxでQoSを制御するために、iproute2を利用します。iproute2を使う際、次のようにiptablesでMARK値を設定します。MARK値は、Linux内部でパケットを処理するときにだけ使用し、それ以外の用途では使用しません。
- iptablesでMARK値を設定する
$ sudo /sbin/iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 15 --set-mark mark マーク値 マーク値には符号なしの整数(32ビットのシステムでは4294967296通り)を指定します。
Copyright © ITmedia, Inc. All Rights Reserved.