---
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等によって)、通信が遮断されてしまうのでしょうか?
そのままじゃ無理ですね。
旧ルーターのグローバールIP(A)と新ルーターのグローバルIP(B)は同じにはできません。
ので、Aに来たアクセスを(デフォルトルートの設定に従い)Bに返してしまい新ルーターのファイヤーウォールではじいてしまうか、はじかなくてもクライアント側から見ればAにつなぎに行ったのにBから返事が来たのではそもそもコネクションが成立しません。
そういうことをやるときは iproute2 を使う必要があります。
概念図はこんな感じ。
【ぷりんこ研究所】複数のグローバルIPをiproute2で運用
つまり、旧ルーターから来たアクセスは旧ルーターに。
新ルーターから来たアクセスは新ルーターに帰してやる必要があります。
全く問題は無いです。
>b-windさん
>旧ルーターのグローバールIP(A)と新ルーターのグローバルIP(B)は同じにはできません。
質問をよく読みましょう。
>もう一回線増設し、暫くは二回線を併用したいと考えております
とありますので、明らかに別のグローバルIPアドレスです。
>Aに来たアクセスを(デフォルトルートの設定に従い)Bに返してしまい
サーバーが常にデフォルトゲートウェイに返事をしてしまうなら、LAN内で立てた同じセグメント内にあるクライアントからはサーバーに問い合わせは出来ないことになってしまいます。そんなおかしな話はありません。
返事を返す先とデフォルトゲートウェイは関係ありません。
>回線A経由にて飛んできたパケットは、回線A経由で返信がされる(問題が出ない)と考えて宜しいでしょうか。
問題ありません。
>反対に回線B経由で飛んできたパケットは回線Bを経由して返信される。
勿論です。
>新規の接続に関しては、デフォルトゲートウェイに設定された回線Bを経由して接続される。
「新規の接続」とはなんでしょうか?
新RouterのグローバルIPに宛てて来た接続のことなら、その通りです。
ただしそれは「デフォルトゲートウェイに設定された」こととは関係ありません。
デフォルトゲートウェイは、サーバーが能動的に外部に接続を行う時に関係します。
(wgetを使ったりDNS問い合わせをしたりサーバーに入った後にコンソール上で外部を見に行ったりとか・・)
あの~、根本的にパケットの中継がどのようにされるか分かってらっしゃらないような気が...。
まず、
サーバーが常にデフォルトゲートウェイに返事をしてしまうなら、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 パケットが送られるのと全く同じ理屈で、パケットの送り先が決まります。
ですので、元のパケットがどちらの回線が使われようが、サーバで設定されているデフォルトゲートウェイに向かって戻りのパケットが送られます。
ということは、やはりiproute2等を利用しないといけないというわけでしょうか?
[通信経路]
クライアントPC → 旧ルーター → Webサーバー → 新ルーター → クライアントPC
したがって、クライアントPCには返信パケット自体は届くが、返信元IPアドレスが異なるため、パケットを無視する。
「暫くは」2つのIPアドレスでサービス継続するとしても、サービスを継続している以上「暫く」を終えることができなくなりませんか?
別の回答になってしまいますが、Webということなので、
旧IPアドレスではSorryサーバを立てて新URLを案内するかmod_rewriteで新サーバに誘導し、
サービス自体は新IPアドレスで提供するのがよいと思います。
そうしますと、確認ばかりで申し訳ないのですが、回線A経由にて飛んできたパケットは、回線A経由で返信がされる(問題が出ない)と考えて宜しいでしょうか。
反対に回線B経由で飛んできたパケットは回線Bを経由して返信される。
新規の接続に関しては、デフォルトゲートウェイに設定された回線Bを経由して接続される。