内部ネットワークを使用してLinuxネットワークの名前空間を他のVMに関連付ける方法は?

内部ネットワークを使用してLinuxネットワークの名前空間を他のVMに関連付ける方法は?

Virtualboxには、内部ネットワークに接続されている2つの仮想マシン(VM)があります。最初に、n0という名前のネットワーク名前空間があります。この名前空間をネットワークインターフェイスに接続し、最後に内部接続を使用して2番目の仮想マシン(VM2)に接続しようとしています。ネットワークの例:

ネットワークの例

ご覧のとおり、192.168.127.2/24と192.168.127.1/24の間の接続が必要です。

openvswitchを使用してこの問題を解決しようとしました(動作しません)。

sudo ovs-vsctl add-br br0 
sudo ifconfig br0 up
sudo ip link add veth type veth peer name veth-br 
sudo ip link set veth netns ns0
sudo ifconfig veth-br up
sudo ovs-vsctl add-port br0 veth-br
sudo ip netns exec ns0 ip addr add 192.168.127.2/24 dev veth
sudo ip netns exec ns0 ip link set veth up
sudo ip addr add 192.168.127.3/24 dev br0
sudo ovs-vsctl add-port br0 eth0 

この問題を解決するのに役立ちますか?ソリューションが正しく機能するように改善する方法をご存知ですか?

拡張ネットワークトポロジ:

ここに画像の説明を入力してください。

ns1とns0の間には有効な接続がありますが、ns1を192.168.127.1/24に接続しようとしています。これを行うには、192.168.127.2/24と192.168.127.1/24の間の接続に加えて固定パスを追加する必要がありますが、これはできません。 openvswitchと次のコマンドを使用してこれを実行しようとしています。

sudo ip netns exec ns1 route add -net 192.168.127.0/24 gw 192.168.1.10 dev wlan1
sudo ip route add 192.168.1.0/24 via 192.168.127.2 dev br0 

ここで、br0 は openvswitch-bridge です。

答え1

(質問を変更することは説明を追加するのに許容される方法なので、完全に大丈夫です)

しかし、まだopenvswitchが必要な理由を理解していません。私がすることは次のとおりです(ネットワークセグメントを線で表現する方法に注意してください。これらのセグメントを明確に示すことはネットワーク設計にとって重要です)。

192.168.1.*/24                      192.168.127.*/24
   WLAN                                Internal
     :                                    |
     :  +------------------------------+  |  +----------------------+
     :  | +--------------------------+ |  |  |                      |
     +--|-|- wlan0 192.168.1.1       | |  +--|- 192.168.127.1 eth0  |
     :  | |                      ns1 | |  |  |                      |
     :  | +--------------------------+ |  |  |                  VM2 |
     :  |                              |  |  +----------------------+
     :  | +--------------------------+ |  |  
     +--|-|- wlan1 192.168.1.10      | |  |  
     :  | |                          | |  |
     :  | |  macvlan0 192.168.127.2 -|-|--+
     :  | |  (to eth0)           ns0 | |  |
     :  | +--------------------------+ |  |
     :  |                              |  |
     :  |        eth0 192.168.127.4 ---|--+
     :  |                              |  |
     :  |                          VM1 |  |
        +------------------------------+

したがって、VM1、ns0、および VM2 は virtualbox 内部ネットワークでお互いを見ることができます。私たちが言うとはいまだあなたの目標はわからない。

macvlanしたがって、マスターとして使用して作成し、eth0内部に移動しますns0

# In VM1, main namespace
ip link add macvlan0 link eth0 type macvlan mode bridge
ip link set macvlan0 netns ns0
ip -n ns0 addr add 192.168.127.2/24 dev macvlan0
ip -n ns0 link set macvlan0 up
ip -n ns0 show macvlan0

あるいは、内部ネットワークの DHCP サーバーを使用して、macvlan に IP を取得して DHCP クライアントを実行させることもできます。ディストリビューションに応じて、上記の項目を永久に作成する方法はさまざまです。

解決策は、virtualboxの内部ネットワーキングで使用されるmacvlanに依存します(そうでないかもしれません。私が書いたように、virtualboxのネットワーキングは奇妙です)。うまくいかない場合は、次のことを試みるのは、内部セグメントを破棄し、仮想マシンを使用してセグメントを接続することです。

openvswitch は不要で、実際に openvswitch を virtualbox 内部ネットワーキングと組み合わせる簡単な方法はありません。

したがって、どこかで読んで興味深いので、openvswitchを使用したい場合は、ここで使用する必要はないかもしれません。

関連情報