如何使用添加到 virtualbox 网络的虚拟网络命名空间

如何使用添加到 virtualbox 网络的虚拟网络命名空间

问题非常相关。我使用接受的答案创建 10 个网络命名空间,并将其添加到我的 virtualbox 网络 ( vboxnet0)。但是,当尝试192.168.56.13X从创建网络命名空间的主机ping 新地址 ( ) 时,我无法访问它们。当尝试从添加到该网络的虚拟机对它们进行 ping 操作时,我可以访问它们。当从主机 ping 主机vboxnet0IP时192.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

答案1

现在没有时间使用 virtualbox 映像来测试它,但我认为以下应该可以工作:

我怀疑它ipvlan在 virtualbox 网络适配器上不能很好地工作,因为它是虚拟的。

因此,请按照老式方式进行操作,并使用真正的桥接器和命名空间中的 veth 对。因此,大致如下(未经测试):

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检查地址分配等,同时查看哪些有效,哪些无效等。您还可以在命名空间中启动 an 来更直接地调试东西。tcpdump -ni vetha0pingxterm

如果上述方法有效,您还可以尝试(与) 或in 模式macvlan非常相似- 如果需要效率,并且可以使它们与 virtualbox 网络适配器一起使用,则这些模式会更有效。两者的设置都非常接近您的原始脚本。ipvlanipvlanl3

相关内容