VirtualBox 네트워크에 추가된 가상 네트워크 네임스페이스를 사용하는 방법

VirtualBox 네트워크에 추가된 가상 네트워크 네임스페이스를 사용하는 방법

이것질문은 매우 관련이 있습니다. 승인된 답변을 사용하여 10개의 네트워크 네임스페이스를 생성하고 이를 내 virtualbox 네트워크( vboxnet0)에 추가했습니다. 그러나 192.168.56.13X(네트워크 네임스페이스가 생성된 호스트에서) 새 주소에 대해 ping을 시도하면 해당 주소에 액세스할 수 없습니다. 네트워크에 추가된 VM에서 ping을 시도할 때 액세스할 수 있습니다. 호스트에서 호스트 vboxnet0IP를 ping하면 192.168.56.1액세스할 수 있습니다 . 그러나 네임스페이스 중 하나를 핑하는 것은 해당 네임스페이스 내에서 핑하는 한 해당 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를 얻도록(또는 주소 지정 체계를 변경해야 함) 확인해야 합니다. 네임스페이스는 호스트를 게이트웨이로 사용합니다.

작동하지 않는 경우 등을 사용하여 ip -n ns0 addr show작동하는 것과 작동하지 않는 것 등을 확인하면서 다른 창에서 주소 할당 등을 확인할 수 있습니다. 네임스페이스에서 시작하여 보다 직접적으로 디버깅할 수도 있습니다.tcpdump -ni vetha0pingxterm

macvlan위의 방법이 작동하면 ( 매우 유사) 또는 모드를 시도해 볼 수도 있습니다. 효율성이 필요한 경우 더 효율적이며 virtualbox 네트워크 어댑터와 함께 작동하도록 할 수 있습니다. 둘 다 원본 스크립트와 매우 유사하게 설정됩니다.ipvlanipvlanl3

관련 정보