如何使用添加到 virtualbox 網路的虛擬網路命名空間
這個問題非常相關。我使用公認的答案創建了 10 個添加到我的 virtualbox 網路 (
vboxnet0
) 的網路命名空間。但是,當嘗試192.168.56.13X
從創建網路命名空間的主機上 ping 新地址 () 時,我無法訪問它們。當嘗試從添加到該網路的 VM ping 它們時,我可以訪問它們。從主機ping 主機vboxnet0
IP192.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
它使用參數
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
現在沒有時間使用 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.1
等192.168.56.2
被分配到命名空間,您必須確保 virtualbox 客戶端獲得不同的 IP(或更改定址方案)。命名空間將主機作為網關。如果有什麼不起作用,您可以使用etc.在不同的視窗中
ip -n ns0 addr show
檢查地址分配等,同時查看哪些有效,哪些無效等。您還可以在命名空間中啟動一個更直接地調試內容.tcpdump -ni vetha0``ping``xterm
如果上述方法確實有效,您也可以嘗試
macvlan
(非常類似於ipvlan
)或ipvlan
模式l3
- 如果需要效率,如果可以使它們與 virtualbox 網路適配器一起使用,這些會更有效一些。兩者的設置都非常接近您的原始腳本。