이것질문은 매우 관련이 있습니다. 승인된 답변을 사용하여 10개의 네트워크 네임스페이스를 생성하고 이를 내 virtualbox 네트워크( vboxnet0
)에 추가했습니다. 그러나 192.168.56.13X
(네트워크 네임스페이스가 생성된 호스트에서) 새 주소에 대해 ping을 시도하면 해당 주소에 액세스할 수 없습니다. 네트워크에 추가된 VM에서 ping을 시도할 때 액세스할 수 있습니다. 호스트에서 호스트 vboxnet0
IP를 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 vetha0
ping
xterm
macvlan
위의 방법이 작동하면 ( 매우 유사) 또는 모드를 시도해 볼 수도 있습니다. 효율성이 필요한 경우 더 효율적이며 virtualbox 네트워크 어댑터와 함께 작동하도록 할 수 있습니다. 둘 다 원본 스크립트와 매우 유사하게 설정됩니다.ipvlan
ipvlan
l3