こんにちはネットワーキングの教祖、
私は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に接続されていますか?
はい、これは可能です。_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マジックが必要です...
技術的には可能ですが、構成はカラフルです。それは厄介なことであり、要件を満たすために各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には到達できません。
複数のインターフェイスで同じIPアドレスを使用することはできません。正しく機能しません(通常、IPが割り当てられた最後のインターフェースでのみ機能します)。
イーサネットインターフェイスをブリッジに配置し、ブリッジ自体にIPアドレスを割り当てる必要があります。
基本的に、そのブリッジのすべてのイーサネットポートはスイッチとして機能します。
または、各STBのすべてのイーサネットカードを削除して、スイッチを追加することもできます(サーバーに新しいイーサネットカードを追加するよりもスケーラブルです)。
ただし、各STBが独自のブロードキャストドメイン上にある必要があるため、現在の設定を維持する必要があります。
または、少なくともセットアップのサーバーハードウェア部分を簡略化するには、複数のイーサネットカードを切り離し、管理対象スイッチを追加し、VLANを使用して、1つの物理イーサネットカードのみを使用する「複数のイーサネットカード」をシミュレートします。