私が持っています
eth0
、メインのネットワーク名前空間jail0
、代替ネットワーク名前空間(名前name0
)。この名前空間は、jailされた環境で使用されます。jail0
はmacvlanエイリアスのeth0
。私のメインシステムと刑務所から、問題なくネットワークを確認できます。
ただし、お互いにpingすることはできません。
なぜそうなのですか?それらを到達可能にしたいと思います。
他の名前空間に存在するネットワークインターフェイスはありません。
macvlan
インターフェイスは、2つのmacvlanインスタンス間で送信されるデータの処理方法を変更するさまざまなモードで使用できます。デフォルトのモードはvepa
(仮想イーサネットポート集約)です。これが、セットアップが機能しない理由である可能性があります。
設定する可能性のある一般的なモードの簡単な説明:
vepa
データは物理インターフェイスを介して送信されます。macvlanインスタンス間の通信では、スイッチがサポートする必要があるヘアピンモード、またはIPルーターが必要ですパケットを転送します。
private
外部スイッチがヘアピンモードをサポートしている場合でも、macvlanインスタンス間の通信は許可されません。
bridge
はインスタンス間の直接通信を許可します。macvlanインスタンス間のトラフィックは物理リンクで送信されません。
bridgeモードでmacvlanを使用したいと思うでしょう。 macvlanインスタンスとネットワークインターフェース自体を含む名前空間との間の通信では、同じ(メイン/ホスト)ネットワーク名前空間にmacvlanインスタンスを作成する必要があります。詳細と説明については、 A.Bの回答 を参照してください。
完全なドキュメント(および他のモード)については、 man 8 ip-link
。
受け入れられた回答を完了するには、ブリッジモードが最も簡単な方法ですが、通信を取得するには十分ではありません。
刑務所インスタンスがホストにpingしようとすると、IPを取得するためにARP要求を送信します。ホストにはmacvlanインスタンスがないため、パケットは物理リンク(ブリッジモード定義の結果)で直接送信されます。ホストはこのパケットを見ることはないため、応答できません。ping応答はありません。もう1つの方法は同じです。ホストはすべてのパケットを実際の物理LANに送信し、ホストのパケットはコンテナのmacvlanインターフェースに送られません(jail ...)。
トリックは、ホスト用の2つ目のmacvlanインターフェースをブリッジモードで作成することです。これにより、ホストとコンテナー/刑務所のトラフィックが統合されます。
Host# ip link add link eth0 name hostmvl0 type macvlan mode bridge
次に、2つの方法があります。
両方のインターフェースで同じIP
pro:eth0またはその設定を変更しないため、たとえばホストのDHCPに問題はありません。
短所:多少複雑で、どこにでもブロードキャストできるわけではありません。
ホストのIP(eth0と同じ)を割り当てますデフォルトのlanルートなし(noprefixroute
)またはこれはホスト全体の混乱を招く可能性がありますルーティング:
Host# ip addr add hostip/netmask dev hostmvl0 noprefixroute
Host# ip link set hostmvl0 up
各コンテナー(jail ...)について、実際のルートではなく、ホストのmacvlanインターフェースを介してルートを追加します。
Host# ip route add jailip/32 dev hostmvl0
これですべてが機能します(ホストからのブロードキャスト(ping、udp ...)はeth0にルーティングされるため、コンテナー/刑務所には表示されません)。
注:新しいインターフェースはランダムなMACアドレスを取得します。追加のaddress xx:xx:xx:xx:xx:xx
作成時ですが、実際の(eth0の)ものにすることはできません。刑務所だけがこのMACアドレスを見ることができます。
ホストのmacvlanインターフェース上のIP、IPのない物理インターフェース
pro:通常のネットワーク構成、特別なケース(例:ホストのブロードキャストはどこでも機能します)、コンテナごとの追加のルート設定はありません。
con:eth0のネットワーク設定を削除し、それらをhostmvl0に移行する必要があります。 MACアドレスは変更され(それを防ぐために他のハッキングが行われない限り)、DHCPクライアントに影響を与える可能性があります。
Sebasthで提案されているように、eth0からIPを削除して、新しい「メイン」ネットワークカードをhostmvl0と見なすことができます。もちろん、これを管理するサービスがある場合は、代わりに変更してください。常に同じMACアドレスを設定することをお勧めします。そうしないと、再起動のたびにネット上で変更されてしまいます。これはビジネス環境では避けられます。
Host# ip addr del hostip/netmask dev eth0 #careful, connectivity is lost
Host# ip link set hostmvl0 address xx:xx:xx:xx:xx:xx
Host# ip addr add hostip/netmask dev hostmvl0
Host# ip link set hostmvl0 up
Host# ip route add default via usualrouterip
代わりにDHCPを使用すると、MACが変更され、IPも変更されます。 eth0のMACを変更して、元のhostmvl0を再利用できるようにすることができます。これを行うと、一部のツールがスマートすぎる場合があります。 このArchlinuxの議論 には、NetworkManagerが設定を元に戻すのを防ぐ方法に関する情報があるかもしれません。