VirtualBoxネットワークに追加された仮想ネットワーク名前空間を使用する方法

VirtualBoxネットワークに追加された仮想ネットワーク名前空間を使用する方法

これ質問は非常に関連しています。承認された回答を使用して10個のネットワーク名前空間を作成し、それを私のvirtualboxネットワーク(vboxnet0)に追加しました。ただし、192.168.56.13X(ネットワークネームスペースが作成されたホスト上で)新しいアドレスをpingしようとすると、そのアドレスにアクセスできなくなります。ネットワークに追加されたVMでpingを試みるときにアクセスできます。ホストからホストvboxnet0IPをpingすると192.168.56.1アクセスできます。ただし、名前空間の1つをpingすることは、その名前空間内でpingする限り、そのIPに対してのみ機能します。

入力データが必要なスクリプトでスクリプトを実行したいので、ホストからネットワーク名前空間IPにアクセスできる必要があります。私は何が間違っていましたか?

以下に名前空間の作成に使用したスクリプトを追加しました。 (私は問題なく仮想マシンでスクリプトを使用しましたが、リソースの制約のため、現在問題のあるホストにスクリプトを移動する必要がありました)

#!/bin/bash

ROUTER=0.0.0.0

function create_vlan {
        # echo 1
    ip netns add "ns$1"
        # echo 2
    ip link add link ${networkinterface} "ipvl$1" type ipvlan mode l2
        # echo 3
    ip link set dev "ipvl$1" netns "ns$1"
        # echo 4
    ip netns exec "ns$1" ip link set dev "ipvl$1" up
        # echo 5
    ip netns exec "ns$1" ip link set dev lo up
        # echo 6
    ip netns exec "ns$1" ip -4 addr add 127.0.0.1 dev lo
        # echo 7
    ip netns exec "ns$1" ip -4 addr add $2 dev "ipvl$1"
        # echo 8
    ip netns exec "ns$1" ip -4 route add default via ${ROUTER} dev "ipvl$1"
}


networkinterface=$1

declare -i metab amount
amount=$2
amount+=30

echo $amount

for i in `seq 30 ${amount}`;
do
    declare -i metab counter
    counter=`expr $i - 30`
    ip="192.168.56.1$i"
    echo "creating vlan ns${i} with ip $ip"
    create_vlan ${i} ${ip}
    echo "created vlan ns${i} with ip $ip"
done

パラメータを使用vboxnet0して10

コメント(匿名)の要求に応じて:

ip route
default via 134.A.B.129 dev eno1  proto static  metric 100 
134.A.B.33 via 134.A.B.129 dev eno1  proto dhcp  metric 100 
134.A.B.128/27 dev eno1  proto kernel  scope link  src 134.A.B.132  metric 100 
169.E.F.0/16 dev eno1  scope link  metric 1000 
192.168.56.0/24 dev vboxnet0  proto kernel  scope link  src 192.168.56.1

答え1

今はvirtualboxイメージでこれをテストする時間がありませんが、次のことがうまくいくと思います。

ipvlan仮想なので、virtualbox ネットワークアダプタでは正常に動作しないようです。

したがって、古い方法でネームスペースに実際のブリッジとベスのペアを使用してください。おおよそのものは次のとおりです(テストされていません)。

addr=192.168.56
ip link add br0 type bridge
ip addr add $addr.250/24 dev br0

$1次に、1から始まる名前空間ごとに、次の操作を行います。

ip netns add "ns$1"
ip link add "vetha$1" type veth peer name "vethb$1" netns "ns$1"
ip -n "ns$1" link set lo up
ip -n "ns$1" link set "vethb$1" up
ip -n "ns$1" addr add 127.0.0.1 dev lo
ip -n "ns$1" addr add "$addr.$1/24" dev "vethb$1"
ip -n "ns$1" route add default via "$addr.250" dev "vethb$1"
ip link set "vetha$1" master br0
ip link set "vetha$1" up

ついに

ip link set vboxnet0 master br0
ip link set br0 up

192.168.56.250ホスト接続ブリッジ、アドレス192.168.56.1などのアドレスが192.168.56.2名前空間に割り当てられ、Virtualboxクライアントが別のIPを取得するか(またはアドレス指定スキームを変更する必要がある)ことを確認する必要があります。名前空間はホストをゲートウェイとして使用します。

動作しない場合などを使用して、動作しているものとip -n ns0 addr show動作しないことなどを確認しながら、他のウィンドウでアドレスの割り当てなどを確認できます。名前空間から始めて、より直接的にデバッグすることもできます。tcpdump -ni vetha0pingxterm

macvlan上記の方法がうまくいけば(非常に似ている)、またはモードを試してみることもできます。効率が必要な場合は、より効率的であり、virtualbox ネットワーク アダプタと連携することができます。どちらも元のスクリプトと非常によく似ています。ipvlanipvlanl3

関連情報