Linuxネットワーキングの初心者で、異なるサブネットから仮想IPアドレスへのルーティングについて質問がありました。
私は3台のサーバーを持っています(それらはすべて互いにpingできます):
[〜#〜] a [〜#〜]10.10.51.182(ルーターYに接続)
[〜#〜] b [〜#〜]10.10.51.183(ルーターYに接続)
[〜#〜] c [〜#〜]10.10.60.10(ルーターZに接続)
サーバー[〜#〜] a [〜#〜]で、1000の仮想インターフェイスを作成しました:
# ifconfig eth0:0 192.168.1.1 netmask 255.255.0.0
# ifconfig eth0:1 192.168.1.2 netmask 255.255.0.0
....
# ifconfig eth0:999 192.168.5.200 netmask 255.255.0.0
各仮想インターフェイスは、カメラシミュレーションソフトウェアを使用してカメラデバイスをシミュレートします。
サーバー[〜#〜] b [〜#〜]で、次のルートを追加しました:
# route add -net 192.168.0.0 netmask 255.255.0.0 eth0
そして出来上がり、[〜#〜] b [〜#〜]はマシンの仮想インターフェースにアクセス/ pingできます[〜#〜] a [〜 #〜]。
別のサブネット(10.10.60.0)にあるサーバー[〜#〜] c [〜#〜]がこのルートを追加しましたが、私が望んでも作業:
# route add -net 192.168.0.0 netmask 255.255.0.0 eth0
予想どおり、サーバーの仮想インターフェイス[〜#〜] a [〜#〜]に到達できなかったため、ルートを削除し、次のルートを使用して追加しましたルーターのゲートウェイIP[〜#〜] y [〜#〜]:
# route add -net 192.168.0.0 netmask 255.255.0.0 gw 10.10.51.1 eth0
SIOCADDRT: Network is unreachable
ゲートウェイ10.10.51.1はサーバー[〜#〜] c [〜#〜]からping可能ですが、エラーメッセージはgwが直接同じサブネット(10.10.60)上にない。
サーバーで構成できる構成/ルート[〜#〜] a [〜#〜]および/または[〜#〜] c [〜 #〜]for[〜#〜] c [〜#〜]はサーバーの仮想インターフェイスにping /アクセスする[〜 #〜] a [〜#〜]。ルーターの設定を変更するアクセス権がありません。
ただし、サーバーの構成のみを変更してもまったく不可能である場合は、ネットワーク用語で[〜#〜] b [〜#〜]が仮想にアクセスできる理由を誰かに説明してもらえますか[〜#〜] a [〜#〜]のインターフェイスですが、[〜#〜] c [〜#〜]それらにアクセスできません。ルーターは[〜#〜] y [〜#〜]が[〜#〜] c [ 〜#〜]と自動的にドロップしますが、同じサブネットから発信されたパケット([〜#〜] b [〜#〜])は許可されますか?
シンプルなソリューションは、2つのサーバー間にトンネルを作成します。例:
サーバーA:
ip tunnel add tunnel mode ipip remote 10.10.60.10
ip addr add 10.1.1.1/24 dev tunnel
sysctl -w net.ipv4.ip_forward=1
最後のコマンドは、新しく作成されたトンネルデバイスから仮想イーサネットデバイスにパケットを転送することです。
サーバーC
ip tunnel add tunnel mode ipip remote 10.10.51.182
ip addr add 10.1.1.2/24 dev tunnel
ip route add 192.168.0.0/16 via 10.1.1.1
サーバー間のファイアウォールによっては、いくつかのルールを調整する必要がある場合があります。
説明:Server A
とServer B
は、共有ネットワークセグメント上にあります。ゲートウェイにパケットを送信しなくても、パケットを相互に送信できます。これは、Server B
が [〜#〜] arp [〜#〜] を介してアドレス192.168.1.1
を直接解決しようとし、Server A
がそれらに応答することを意味します。
Server A
とServer C
は、異なるネットワークセグメントにあります。 Server C
が192.168.1.1
を要求するだけの場合(これはServer C
のルートコマンドになります)、応答を受け取りません。この問題を解決するには、通常、ルーティングテーブルを介して特定のシステムに到達する方法を指定できますが、指定できるのはネクストホップのみです。 router Z
は192.168.0.0/24
について知らないようなので、2つのシステム間にトンネルを作成する必要があります。
1つの小さな追加のヒント、仮想イーサネットデバイスを作成する必要はありません。1つのネットワークデバイスに任意の数のIPアドレスを追加できます。
for first in {1..4} ; do
for second in {1..255} ; do
ip addr add 192.168.$first.$second/16 dev eth0
done
done
いくつかのオプションがあります。
onlyコンピューターAとCを変更する場合は、おそらくトンネルの作成が最善の策です。手順については IP-IP Howto を参照してください。