下記構成のWebサーバーを、現RouterがもつNAT機能で提供しております。


---
 Client
  | (Global IP)
 Net
  | (Global IP)
[現Router]
  | (192.168.0.1)
  | (192.168.0.2)
[Server]
---

今回、ISPの回線切り替えを行いたいのですが、IPアドレスにてWebを公開していたため、もう一回線増設し、暫くは二回線を併用したいと考えております。具体的には次の構成にて実現可能でしょうか?

---
<既存>

 Client
  | (Global IP)
 Net
  | (Global IP)
[現Router]
  | (192.168.0.1)
  | (192.168.0.2)
[Server]
---
  | (192.168.1.2)
  | (192.168.1.1)
[新Router]
  | (Global IP)
 Net
  |

<追加>
---

作業詳細は次の通りです。
(1)Server(eth0)に新サブネットに属したIPアドレスを追加
(2)新Routerにも、新サブネットに属したIPアドレスを設定
(3)ServerのDefault Gatewayを新RouterのプライベートIPに

この場合、現Routerを経由したServerへのWebアクセスは、問題なく現Routerを経由しクライアントに届くのでしょうか? それとも、Default Gatewayが新ルーターに設定されるため、新Routerを経由しするため、(クライアント側のFirewall等によって)、通信が遮断されてしまうのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/12/26 11:15:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント20pt

そのままじゃ無理ですね。

旧ルーターのグローバールIP(A)と新ルーターのグローバルIP(B)は同じにはできません。

ので、Aに来たアクセスを(デフォルトルートの設定に従い)Bに返してしまい新ルーターのファイヤーウォールではじいてしまうか、はじかなくてもクライアント側から見ればAにつなぎに行ったのにBから返事が来たのではそもそもコネクションが成立しません。


そういうことをやるときは iproute2 を使う必要があります。

概念図はこんな感じ。

Linuxでマルチホーム (複数のISPの同時利用)

【ぷりんこ研究所】複数のグローバルIPをiproute2で運用

つまり、旧ルーターから来たアクセスは旧ルーターに。

新ルーターから来たアクセスは新ルーターに帰してやる必要があります。

id:tanukichi800 No.2

回答回数31ベストアンサー獲得回数3

ポイント20pt

全く問題は無いです。


>b-windさん

>旧ルーターのグローバールIP(A)と新ルーターのグローバルIP(B)は同じにはできません。

質問をよく読みましょう。

>もう一回線増設し、暫くは二回線を併用したいと考えております

とありますので、明らかに別のグローバルIPアドレスです。


>Aに来たアクセスを(デフォルトルートの設定に従い)Bに返してしまい

サーバーが常にデフォルトゲートウェイに返事をしてしまうなら、LAN内で立てた同じセグメント内にあるクライアントからはサーバーに問い合わせは出来ないことになってしまいます。そんなおかしな話はありません。

返事を返す先とデフォルトゲートウェイは関係ありません。

id:harvard

そうしますと、確認ばかりで申し訳ないのですが、回線A経由にて飛んできたパケットは、回線A経由で返信がされる(問題が出ない)と考えて宜しいでしょうか。

反対に回線B経由で飛んできたパケットは回線Bを経由して返信される。

新規の接続に関しては、デフォルトゲートウェイに設定された回線Bを経由して接続される。

2007/12/19 13:51:19
id:tanukichi800 No.3

回答回数31ベストアンサー獲得回数3

ポイント20pt

>回線A経由にて飛んできたパケットは、回線A経由で返信がされる(問題が出ない)と考えて宜しいでしょうか。

問題ありません。


>反対に回線B経由で飛んできたパケットは回線Bを経由して返信される。

勿論です。


>新規の接続に関しては、デフォルトゲートウェイに設定された回線Bを経由して接続される。

「新規の接続」とはなんでしょうか?

新RouterのグローバルIPに宛てて来た接続のことなら、その通りです。

ただしそれは「デフォルトゲートウェイに設定された」こととは関係ありません。

デフォルトゲートウェイは、サーバーが能動的に外部に接続を行う時に関係します。

(wgetを使ったりDNS問い合わせをしたりサーバーに入った後にコンソール上で外部を見に行ったりとか・・)

id:JULY No.4

回答回数966ベストアンサー獲得回数247

ポイント20pt

あの~、根本的にパケットの中継がどのようにされるか分かってらっしゃらないような気が...。

まず、

サーバーが常にデフォルトゲートウェイに返事をしてしまうなら、LAN内で立てた同じセグメント内にあるクライアントからはサーバーに問い合わせは出来ないことになってしまいます。そんなおかしな話はありません。

サーバは自分が直接つながっているネットワークに関しては、デフォルトゲートウェに投げることはありません。別に、サーバじゃなくても通常のクライアントであっても同じですが、質問のケースだと、サーバには2つの NIC があって、それぞれ、192.168.0.0/24 と 192.168.1.0/24 のネットワークにつながっている(ネットマスクが記載されていないので、通常、24 bit マスクであろうと仮定)ことになります。このときサーバは、この2つのネットワークアドレスに収まる IP アドレスに対してパケットを送出する場合、直接、相手の MAC アドレスに対して Ethernet のパケットを送出します。

例えば、宛先のアドレスが 192.168.1.123 だったとすれば、192.168.1.2 の IP アドレスを持っている NIC から、まず、192.168.1.123 の IP アドレスに該当する MAC アドレスを調べ(ARP を使って、ネットワーク上にその IP アドレスを持っている人を探す)、得られた MAC アドレスを送出先として、Ethrnet のパケットを組み立てて送信します。

サーバが直接つながっていないネットワークのアドレスへパケットを送出する必要がある場合、初めてデフォルトゲートウェイに対してパケットが送出されます。回線AだろうがBだろうが、グローバルな IP アドレスはサーバから見て、直接つながったネットワークではないわけですから、サーバはデフォルトゲートウェイへパケットを投げようとします。サーバは自分に設定されているデフォルトゲートウェイの IP アドレスから、デフォルトゲートウェイの MAC アドレスを調べ、Ethernet のパケットを組み立てます。

このとき、MAC アドレスの宛先はルータの MAC アドレスになりますが、IP アドレスの宛先は本当に通信したい相手の IP アドレスになります。ルータは、自分宛の MAC アドレスですので、Ethernet パケットとしては自分のものとして扱いますが、その中に入っている IP パケットの宛先は自分の IP アドレスではないので、その IP パケットを別のネットワークへ転送します。

ですので「LAN内で立てた同じセグメント内にあるクライアントからは~」のくだりは、そもそも、デフォルトゲートウェイ以前の問題です。

>回線A経由にて飛んできたパケットは、回線A経由で返信がされる(問題が出ない)と考えて宜しいでしょうか。

問題ありません。

>反対に回線B経由で飛んできたパケットは回線Bを経由して返信される。

勿論です。

サーバにとって、そのパケットが何かのパケットの返信パケットである、ということは、IP パケットを送信する上では意識されません。確かに、TCP のレベルではパケットのつながりは意識されますし、Firewall でそういったつながりをフォローして何らかの処理を行う、といったことはありますが、純粋に IP パケットの送出のレベルでは関係ありません。パケットのルーティングは IP のレベルので行われるのであって、IP パケットの中身が TCP だろうが、UDP だろうが、ICMP だろうが影響を受けません。

ですので、回線がAだろうがBだろうが、サーバは相手の IP アドレスに対してパケットを送信するだけであって、先のデフォルトゲートウェイに Ethernet パケットが送られるのと全く同じ理屈で、パケットの送り先が決まります。

ですので、元のパケットがどちらの回線が使われようが、サーバで設定されているデフォルトゲートウェイに向かって戻りのパケットが送られます。

id:harvard

ということは、やはりiproute2等を利用しないといけないというわけでしょうか?

[通信経路]

クライアントPC → 旧ルーター → Webサーバー → 新ルーター → クライアントPC

したがって、クライアントPCには返信パケット自体は届くが、返信元IPアドレスが異なるため、パケットを無視する。

2007/12/19 17:37:48
id:ttomo No.5

回答回数16ベストアンサー獲得回数0

ポイント20pt

「暫くは」2つのIPアドレスでサービス継続するとしても、サービスを継続している以上「暫く」を終えることができなくなりませんか?

別の回答になってしまいますが、Webということなので、

旧IPアドレスではSorryサーバを立てて新URLを案内するかmod_rewriteで新サーバに誘導し、

サービス自体は新IPアドレスで提供するのがよいと思います。

  • id:JULY
    補足しておきますと、何も考えないと、戻りパケットはサーバで指定されたゲートウェイに向けて送られるため、インターネット越しのクライアントからは、「パケットは届いているだけど、通信として成り立たない」という状態になると思います。

    デフォルトゲートウェイが新しいルータを向いているときに、クライアント側から、旧ルータ側で割り当てられている IP アドレスにつなぎにいったとすると、確かにクライアントから送ったパケットはサーバに届き、それに応答するパケットもクライアント側に届くと思いますが、その戻ってきたパケットの送信元アドレスは、新ルータ側のグローバルアドレスになります。すると、IP より上位のプロトコル、例えば TCP の接続を考えた場合、自分がつなごうとした相手と違うとところから「接続受け付けますよ」というパケット届くことになり、クライアント側ではこの戻りパケットを無視します。
  • id:tanukichi800
    tanukichi800 2007/12/19 18:36:50
    すみません。


    >サーバにとって、そのパケットが何かのパケットの返信パケットである、ということは、IP パケットを送信する上では意識されません。
    >サーバが直接つながっていないネットワークのアドレスへパケットを送出する必要がある場合、初めてデフォルトゲートウェイに対してパケットが送出されます。
    >サーバにとって、そのパケットが何かのパケットの返信パケットである、ということは、IP パケットを送信する上では意識されません。


    の3点について私の誤解があったようです。
    2つ目の回答に際してローカルで簡単な実験を行ったのですが、質問に対して有効な実験になっていなかったことになります。
    いい加減な回答をしたつもりはなかったのですが、結果的に嘘を回答したことになり申し訳ありません。
  • id:JULY
    > ということは、やはりiproute2等を利用しないといけないというわけでしょうか?

    iproute2 自体は詳しくないのですが、b-wind さんが示されているリンク先を読むと、まさにお望みの経路制御が出来ると思います。

    iproute2 以外の方法があるかどうかは分かりませんが、少なくともサーバが Windows OS の場合、デフォルトゲートウェイは NIC がいくつあっても1つしか持てないので、iproute2 のように、送信元の IP アドレスをルーティング情報として使えるものが間に入らないと無理です。

    サーバが他の OS の場合、NIC 毎にデフォルトゲートウェイが設定出来れば、iproute2 が無くても出来そうな気がちょっとしますが、済みませんが、調べてみないと本当の所は分かりません。
  • id:b-wind
    なんだか物言いがついたようですが、補足の必要は無いと見ていいのかな?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません