Just MyShopへ
Princo.org は Justsystem を応援します
技術関連情報サイト http://wiki.princo.org/ をオープンしました.
dum
logo01 logo02
Linux Tips
TOP > tips > iproute2.html
メニュー

Just MyShopへ
Justsystem
応援します!
border01 border02 border03
border04

複数のグローバルIPをiproute2で運用

はじめに

Linuxを含む多くのOSは、default gw(デフォルトゲートウェイ)の 送出先を1カ所しか設定できません。このため、複数のプロバイダを契約して 接続をしていても、実際に使うことの出来る回線は1本のみとなってしまいます。

iproute2を使うと、2つのプロバイダに接続をした1台の LinuxBoxからそれぞれの接続に対して正しく通信することが可能です。

ここでは、2つのグローバルIPアドレスをDNSラウンドロビンにより リクエストを分散し、1台のWWWサーバーでそれぞれの経路から来たリクエストに 応答できるように設定を実施します。

接続概念図

ここでは、下記の接続図を想定して設定を行います。

別に3階層のネットワークでなくても良いのですが、 この構成でならばウェブサーバを100台程度まで増やすことが可能になります。

       (ISP:210.149.88.1)        (ISP:61.114.8.1)
          default gw               default gw
               |                        |
      +------------------+     +------------------+
      |ppp0 210.149.88.70|     |ppp0 61.114.8.111 |
      |------------------|     |------------------|
      |eth0 192.168.2.254|     |eth0 192.168.2.253|
      +------------------+     +------------------+
               |                        |
               --------------------------
                            |
                  +------------------+
                  |eth0 192.168.2.1  |  
                  |------------------|  ← ここにiproute2設定を実施する
                  |eth1 192.168.1.254|
                  +------------------+
                            |
                 +--------------------+
                 |eth0   192.168.1.100| default gw 192.168.1.254
                 |eth0:0 192.168.1.101| ← これWWWサーバ
                 +--------------------+

設定手法

想定環境にて理想的な動作をさせるために、 ここでは下記の設定をおこないます。

  • DNSラウンドロビンの設定 : 210.149.88.70, 61.114.8.111に、ユーザからのリクエストが分散するように 設定する。
  • NAT(iptables)の設定 : グローバルIPを持っているサーバ(210.149.88.70, 61.114.8.111)から、 ウェブサーバ(192.168.1.100,192.168.1.101)にリクエストをFORWARDする。
  • ウェブサーバの設定 : ウェブサーバにIPを2つ持たせる。
  • iproute2の設定 : ウェブサーバから外に出る通信を振り分ける。

DNSラウンドロビンの設定

概要

古代から負荷分散の方法として、DNSラウンドロビンというしくみがあります。 DNSラウンドロビンは、1つのホスト名に対して、複数のIPを割り当てることで、 WWWなどのリクエストを複数のIPアドレスに分散させる事ができます。

ZONE設定ファイル

www.hoge.comの名前を 210.149.88.70 61.114.8.111 の2つのIPに設定するには、 DNSのZONE設定ファイルのAレコードを 下記のように設定します。(BIND8 or 9)

sv1    IN   A   61.114.8.111
sv2    IN   A   210.149.88.70

rr     IN   A   61.114.8.111
rr     IN   A   210.149.88.70

www    IN   CNAME rr

sv1,sv2のアドレスレコードは、本題と直接関係が無いのですが、 確認作業の為必要なので、単独で引けるアドレスレコードを 用意しておいた方が 良いでしょう。

設定の確認

設定が成功すれば、下記のようにnslookupで確認できるはずです。

# nslookup www.hoge.com
Server: 192.168.2.254
Address: 192.168.2.254#53

www.hoge.com canonical name = rr.hoge.com.
Name: rr.hoge.com
Address: 210.149.88.70
Name: rr.hoge.com
Address: 61.114.8.111

NAT(iptables)の設定

概要

グローバルIPを持っているルーターにて、 httpリクエストをWWWサーバにFORWARDする(向け直す)設定をします。

  • 210.149.88.70 -> 192.168.1.100
  • 61.114.8.111 -> 192.168.1.101

外部→210.149.88.70:80へのリクエストを192.168.1.100:80にFORWARD

下記コマンドを210.149.88.70のルータで実行します。

# iptables -t nat -A PREROUTING \
  -p tcp -d 210.149.88.70 --dport 80 \
  -j DNAT --to 192.168.1.100

外部→61.114.8.111へのリクエストを192.168.1.101:80にFORWARD

下記コマンドを61.114.8.111のルータで実行します。

# iptables -t nat -A PREROUTING \
  -p tcp -d 61.114.8.111 --dport 80 \
  -j DNAT --to 192.168.1.101

ウェブサーバの設定

概要

ウェブサーバが192.168.1.100,192.168.1.101 のIPでリクエストを受けられるように ipalias を設定します。

設定

ウェブサーバで下記コマンドを実行します。

# ifconfig eth0:0 192.168.1.101

# ifconfig を実行してみて、下記のように なっていればOKです。

eth0      Link encap:Ethernet  HWaddr 00:02:B3:3A:8D:63
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:35989558 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48820453 errors:0 dropped:0 overruns:1 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:1166431589 (1112.3 Mb)  TX bytes:2056789305 (1961.5 Mb)
          Interrupt:5 Base address:0xa000

eth0:0    Link encap:Ethernet  HWaddr 00:02:B3:3A:8D:63
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:5 Base address:0xa000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3554 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3554 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:212262 (207.2 Kb)  TX bytes:212262 (207.2 Kb)

宛先の向け直しはiproute2が行うので ルーティングテーブルの設定は不要です。 (default gwが192.168.1.254に設定されていればOK)

iproute2の設定

概要

192.168.1.254のルータにて、iproute2の設定を実施します。

192.168.1.101のホストから送出されたパケットは192.168.2.253に転送し、 その他のホストから送出されたパケットは192.168.2.254に転送するようにします。

iproute2の設定概念は主に、

  • ルーティングテーブルを定義する
  • ルーティング優先順位を設定する

の2つの手順で構成できます。

設定

下記コマンドを実行します。

# パラメータを設定
echo "1" > /proc/sys/net/ipv4/ip_forward

# デフォルトルートを2つ設定する
route add default gw 192.168.2.254
route add default gw 192.168.2.253 metric 1

# テーブルを定義する。
/sbin/ip route add 0/0 via 192.168.2.253 table 1

# ルーティング優先順位を設定する。
/sbin/ip rule add from 192.168.1.101 table 1 pref 30001

設定確認

iproute2の経路情報は、下記コマンドで確認できます。

# ip rule

0: from all lookup local
30001: from 192.168.1.101 lookup 1
32766: from all lookup main
32767: from all lookup 253

192.168.1.101のホストからのパケットは table 1 を通過 その他のホストからのパケットは table main(default gw)を通過します。

  • http://210.149.88.70/
  • http://61.114.8.111/

を外部からブラウザで閲覧して、両方とも見えれば成功です。

dum
border05 dum dum

(c) 2002 Princo.org