这问题非常相关。我使用接受的答案创建 10 个网络命名空间,并将其添加到我的 virtualbox 网络 ( vboxnet0
)。但是,当尝试192.168.56.13X
从创建网络命名空间的主机ping 新地址 ( ) 时,我无法访问它们。当尝试从添加到该网络的虚拟机对它们进行 ping 操作时,我可以访问它们。当从主机 ping 主机vboxnet0
IP时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
它是用参数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 网络适配器上不能很好地工作,因为它是虚拟的。
因此,请按照老式方式进行操作,并使用真正的桥接器和命名空间中的 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.1
等192.168.56.2
被分配给命名空间,并且您必须确保 virtualbox 客户端获得不同的 IP(或更改寻址方案)。命名空间将主机作为网关。
如果有什么不起作用,您可以使用etc.在不同的窗口中ip -n ns0 addr show
检查地址分配等,同时查看哪些有效,哪些无效等。您还可以在命名空间中启动 an 来更直接地调试东西。tcpdump -ni vetha0
ping
xterm
如果上述方法有效,您还可以尝试(与) 或in 模式macvlan
非常相似- 如果需要效率,并且可以使它们与 virtualbox 网络适配器一起使用,则这些模式会更有效。两者的设置都非常接近您的原始脚本。ipvlan
ipvlan
l3