検索
連載

mangleテーブルでQoSを実現iptablesテンプレート集 改訂版(6)(2/3 ページ)

この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部)

Share
Tweet
LINE
Hatena

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.

ページトップに戻る