web-dev-qa-db-ja.com

別の名前空間で到達可能なmacvlanエイリアスを作成するにはどうすればよいですか?

私が持っています

  • インターフェース、名前eth0、メインのネットワーク名前空間
  • 別のインターフェース、名前jail0、代替ネットワーク名前空間(名前name0)。この名前空間は、jailされた環境で使用されます。
  • jail0macvlanエイリアスeth0

私のメインシステムと刑務所から、問題なくネットワークを確認できます。

ただし、お互いにpingすることはできません

なぜそうなのですか?それらを到達可能にしたいと思います。

他の名前空間に存在するネットワークインターフェイスはありません。

macvlanインターフェイスは、2つのmacvlanインスタンス間で送信されるデータの処理方法を変更するさまざまなモードで使用できます。デフォルトのモードはvepa(仮想イーサネットポート集約)です。これが、セットアップが機能しない理由である可能性があります。

設定する可能性のある一般的なモードの簡単な説明:

  • vepaデータは物理インターフェイスを介して送信されます。macvlanインスタンス間の通信では、スイッチがサポートする必要があるヘアピンモード、またはIPルーターが必要ですパケットを転送します。

  • private外部スイッチがヘアピンモードをサポートしている場合でも、macvlanインスタンス間の通信は許可されません。

  • bridgeはインスタンス間の直接通信を許可します。macvlanインスタンス間のトラフィックは物理リンクで送信されません。

bridgeモードでmacvlanを使用したいと思うでしょう。 macvlanインスタンスとネットワークインターフェース自体を含む名前空間との間の通信では、同じ(メイン/ホスト)ネットワーク名前空間にmacvlanインスタンスを作成する必要があります。詳細と説明については、 A.Bの回答 を参照してください。

完全なドキュメント(および他のモード)については、 man 8 ip-link

3
sebasth

受け入れられた回答を完了するには、ブリッジモードが最も簡単な方法ですが、通信を取得するには十分ではありません。

刑務所インスタンスがホストに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が設定を元に戻すのを防ぐ方法に関する情報があるかもしれません。

5
A.B