web-dev-qa-db-ja.com

複数のインターフェースで同じIP

こんにちはネットワーキングの教祖、

私はLinux(カーネル3.14)サーバーを持っています。これは、家電機器(セットトップボックス-STB)のファームのTFTP、NFS、HTTPサーバーとして機能します。デバイスは、TFTPを使用してカーネルを起動し、NFSサーバーからルートFSをマシンにマウントします。

さて、難解な技術的な理由で、ここでは詳しく説明しません(信じてください:)。各STBは、物理的に分離された独自のLANにある必要があります。したがって、ネットワーキングがATMをセットアップする方法は次のとおりです。

サーバーには、他の世界へのアクセスに使用される1つのネットワークカードがあります。また、サービスを提供するSTBごとに1つのネットワークカードがあり、それらのそれぞれは、STB +他のいくつかのデバイスが接続され、LANを形成する小さなルーターに接続されています。

現在、3つのSTBが接続されており、LANは172.16.50.0/24、172.16.51.0/24、および172.16.52.0/24です。そのすべてがうまく機能しています。

ただし、3つの異なるLANがあるという事実は、まったく同じサーバーにSTB1から172.16.50.1、STB2から172.16.51.1、STB3から172.16.52.1としてアクセスする必要があることを意味します。つまり、各STBと、STBで使用する新しいRootFSをアップロードするたびに、構成ファイルを手動で編集し、この特定のSTBからサーバーにアクセスする必要がある正しいIPを配置する必要があります。あまり便利ではなく、エラーが発生しやすい!

それで私は考えました:これら3つのLANをすべてまったく同じ172.16.50.0/24に構成した場合はどうなりますか? STB(およびLAN内の残りのデバイス)の観点からはすべてが問題ないはずですが、サーバーの観点からはどうでしょうか。

Linuxサーバーに、同じ静的IPで構成されたN個の異なるイーサネットインターフェイスを使用できますが、それぞれが物理的に別個のLANに接続されていますか?

11
Leszek

はい、これは可能です。_network namespaces_と呼ばれるNice機能を使用します(man ip-netns(8)を参照)。基本的に、複数の異なるネットワークスタックを提供し、それぞれに独自のインターフェイス、ルートなどのセットがあります。

STBごとに名前空間を作成する必要があり、必要なサービスを各名前空間で個別に実行できます。

名前空間については、次のように進める必要があります。

  • _net1_という名前の名前空間を作成します。

    _ip netns add net1
    _
  • インターフェースethXを新しい名前空間に割り当て、IPアドレス172.16.50.1を構成します。

    _ip link set dev ethX netns net1
    ip netns exec net1 ip link set dev ethX up
    ip netns exec net1 ip address add 172.16.50.1/24 dev ethX
    _

IPアドレス172.16.50.1は、デフォルトのネームスペースから見えなくなりました。単純な_ping 172.16.50.1_は機能しません。最初に_net1_名前空間に切り替えて、そこでコマンドを実行する必要があります。

_ip netns exec net1 <command>
_

このようにして、各ネームスペースで各サービスを実行できます。

冒険したい場合は、すべての要求をSTBから中央サービスに何らかの方法でリダイレクトすることもできます。このためには、各名前空間からデフォルトの名前空間(_ip link help veth_を参照)へのトンネルと、かなりのiptablesマジックが必要です...

16
Oliver

技術的には可能ですが、構成はカラフルです。それは厄介なことであり、要件を満たすために各STBが独自のワイヤーで分離されている間、各STBは一意のIPを持つ必要があります。クライアントの構成は変更されません。サーバーの設定は次のとおりです。

ifconfig eth0 10.0.50.1 netmask 255.0.0.0
route del -net 10.0.0.0 netmask 255.0.0.0 dev eth0
route add 10.0.50.2 dev eth0
ifconfig eth1 10.0.50.1 netmask 255.0.0.0
route del -net 10.0.0.0 netmask 255.0.0.0 dev eth1
route add 10.0.50.3 dev eth1
# ...

これにより、ルーティングテーブルのインターフェイスごとにIPが1つだけになるはずです。これらは別々のワイヤ上にあるため、クロストークはありません。これらの各デバイスは、2ノード10.0.0.0/8にあると考えます。

サーバーが10.0.50.2と通信したい場合、サーバーはARPテーブルとルーティングテーブルを調べます。 ARPテーブルが空の場合、ルーティングテーブルは、それぞれのインターフェイスでARP要求を送信するように指示します。したがって、それらは一意のIPを持つ必要があります。そうしないと、サーバーは最後に追加されたルートとしか通信できません。

DHCPサーバーを設定して、ハードウェアアドレスに基づいてIPを割り当てるか、各インターフェイスで個別の動的DHCP範囲を実行できます。 DHCPサーバーは何でも渡すことができますが、eth0ワイヤ上の10.0.50.3には到達できません。

3
Pedro

複数のインターフェイスで同じIPアドレスを使用することはできません。正しく機能しません(通常、IPが割り当てられた最後のインターフェースでのみ機能します)。

イーサネットインターフェイスをブリッジに配置し、ブリッジ自体にIPアドレスを割り当てる必要があります。

基本的に、そのブリッジのすべてのイーサネットポートはスイッチとして機能します。

または、各STBのすべてのイーサネットカードを削除して、スイッチを追加することもできます(サーバーに新しいイーサネットカードを追加するよりもスケーラブルです)。

ただし、各STBが独自のブロードキャストドメイン上にある必要があるため、現在の設定を維持する必要があります。

または、少なくともセットアップのサーバーハードウェア部分を簡略化するには、複数のイーサネットカードを切り離し、管理対象スイッチを追加し、VLANを使用して、1つの物理イーサネットカードのみを使用する「複数のイーサネットカード」をシミュレートします。

2
Cha0s