Networking

如何使用添加到 virtualbox 網路的虛擬網路命名空間

  • January 23, 2018

這個問題非常相關。我使用公認的答案創建了 10 個添加到我的 virtualbox 網路 ( vboxnet0) 的網路命名空間。但是,當嘗試192.168.56.13X從創建網路命名空間的主機上 ping 新地址 () 時,我無法訪問它們。當嘗試從添加到該網路的 VM ping 它們時,我可以訪問它們。從主機ping 主機vboxnet0IP192.168.56.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

它使用參數vboxnet010

根據評論的要求(匿名):

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

現在沒有時間使用 virtualbox 映像對其進行測試,但我想以下應該可以工作:

我懷疑它ipvlan在 virtualbox 網路適配器上不能很好地工作,因為它是一個虛擬的。

所以用老式的方式來做,並使用一個真正的橋,以及來自命名空間的 veth-pairs。所以沿著以下幾行(未經測試):

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.1192.168.56.2被分配到命名空間,您必須確保 virtualbox 客戶端獲得不同的 IP(或更改定址方案)。命名空間將主機作為網關。

如果有什麼不起作用,您可以使用etc.在不同的視窗中ip -n ns0 addr show檢查地址分配等,同時查看哪些有效,哪些無效等。您還可以在命名空間中啟動一個更直接地調試內容.tcpdump -ni vetha0``ping``xterm

如果上述方法確實有效,您也可以嘗試macvlan(非常類似於ipvlan)或ipvlan模式l3- 如果需要效率,如果可以使它們與 virtualbox 網路適配器一起使用,這些會更有效一些。兩者的設置都非常接近您的原始腳本。

引用自:https://unix.stackexchange.com/questions/417466