natテーブルを利用したLinuxルータの作成・3(外部から内部サーバへのアクセスと負荷分散)iptablesテンプレート集 改訂版(5)(3/3 ページ)

» 2010年04月27日 00時00分 公開
[鶴長鎮一@IT]
前のページへ 1|2|3       

テンプレート10
負荷分散(ロードバランシング)の実現

サーバとして
 受信パケットは破棄。ただしステートフル性を確認しサーバから送信されたパケットに関連するものは許可
 送信パケットは基本的にすべて許可
 ループバックアドレスに関してはすべて許可
 メンテナンスホスト(内部)からのping、メンテナンスホストへのpingを許可
 メンテナンスホスト(内部)からのssh(TCP 22)を許可

ルータとして
 転送パケットで、内部ネット→外部ネットのものは許可。外部ネット→内部ネットへの転送パケットはステートフル性を確認できたものだけ許可
 Linuxサーバを経由して外部へ出ていくパケットのソースアドレスを変換 
 内部アドレスやプライベートアドレスが外部に漏れないようにブロック

負荷分散のため
 外部ネットからHTTPサーバへの転送を許可
 外部ネットからLinuxルータに入ってくるパケットのうちディスティネーションポーがTCP 80番であるHTTPサービスのものを2台のWebサーバに分散

テンプレート10の表示(別ウィンドウで開く)

テンプレート10の解説

 テンプレート9では、外部から送られてくるパケットの送信先を「--to-destination」で内部ネットのサーバのアドレスに変換することで、外部ネットから内部ネットのサーバにアクセスできるように設定しました。

 テンプレート9では、転送先サーバは1台だけ指定しましたが、「--to-destination」には複数のアドレスが指定可能です。これを利用すれば負荷分散(ロードバランシング)を実現できます。

 テンプレート5をベースに、負荷分散機能を追加します。

 「--to-destination」に複数のIPアドレスを指定すると、ラウンドロビン方式でIPアドレスの書き換えが行われます。例えば「--to-destination サーバ1-サーバ2」と指定すると、セッションが張り直されるたび、パケットの送信先を「サーバ1」と「サーバ2」に交互に書き換えます。

 負荷分散を実現するため、新たに53〜58行目を加えています。

    53    http_port='80'
    54    http_server1='192.168.0.3'
    55    http_server2='192.168.0.4'
    56    /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $http_port -j DNAT --to-destination $http_server1-$http_server2
    57    /sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d $http_server1 --dport $http_port -j ACCEPT
    58    /sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d $http_server2 --dport $http_port -j ACCEPT

 53行目でHTTPサービスのポート番号を、54・55行目で分散先サーバ(分散ノード)のIPアドレスを設定します。

 56行目が負荷分散の要です。外部ネットからLinuxルータへのアクセスのうち、HTTPサービスのパケットを2台のサーバに転送します。テンプレート10では、192.168.0.3と192.168.0.4の2台のサーバにアクセスを分散しています。

 なおDNATのディスティネーション指定(--to-destination)では、「-」を使って複数アドレスをレンジ指定できます。例えば10台指定する場合は「192.168.0.3-192.168.0.12」と指定します。

 ただしFORWARDチェインのデフォルトルールで破棄(DROP)が設定されているため(24行目)、このままではeth0から入ってきたパケットを内部のサーバへ転送できません。そこで57・58行目のように、分散先サーバへの転送を許可(ACCEPT)します。

 shスクリプトの用意ができたら、テンプレート9と同じようにshスクリプトを実行します。外部ネットからブラウザを使ってLinuxルータのアドレスにアクセスし、動作を確認します。別のクライアントからアクセスすると、先ほどとは別の分散ノードからレスポンスが返され、アクセスが分散していることが確認できます。

 HTTPサービスを例に説明しましたが、HTTPSならポート番号を443番に、SMTPならポート番号を25番に変更するだけでほかのサービスにも応用可能です。

次回予告

 第1回第2回の「filter」テーブルに続き、「nat」テーブルを使ったテンプレートを3回にわたり紹介しました。次回はもう1つのテーブル「mangle」を使ったQoSの設定例を紹介します。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。