web-dev-qa-db-ja.com

異なるサブネットから仮想IPアドレスへのLinuxネットワークルーティング

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 [〜#〜])は許可されますか?

6
Saad Malik

シンプルなソリューションは、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 AServer Bは、共有ネットワークセグメント上にあります。ゲートウェイにパケットを送信しなくても、パケットを相互に送信できます。これは、Server B[〜#〜] arp [〜#〜] を介してアドレス192.168.1.1を直接解決しようとし、Server Aがそれらに応答することを意味します。

Server AServer Cは、異なるネットワークセグメントにあります。 Server C192.168.1.1を要求するだけの場合(これはServer Cのルートコマンドになります)、応答を受け取りません。この問題を解決するには、通常、ルーティングテーブルを介して特定のシステムに到達する方法を指定できますが、指定できるのはネクストホップのみです。 router Z192.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
5
Ulrich Dangel

いくつかのオプションがあります。

  • コンピュータCには、AとBがオンになっているのと同じ物理ネットへのリンクが必要です。
  • ルーターYには192.168.0.0/16のアドレスが必要であり、ルーターZにはルーターY経由の192.168.0.0/16のルートが必要です。
  • コンピューターCとコンピューターAの間にip-ip(またはVPN)トンネルを作成します。トンネルインターフェース経由で192.168.0.0/16のトラフィックをルーティングします。

onlyコンピューターAとCを変更する場合は、おそらくトンネルの作成が最善の策です。手順については IP-IP Howto を参照してください。

2
bahamat