これ質問は非常に関連しています。承認された回答を使用して10個のネットワーク名前空間を作成し、それを私のvirtualboxネットワーク(vboxnet0
)に追加しました。ただし、192.168.56.13X
(ネットワークネームスペースが作成されたホスト上で)新しいアドレスをpingしようとすると、そのアドレスにアクセスできなくなります。ネットワークに追加されたVMでpingを試みるときにアクセスできます。ホストからホストvboxnet0
IPをpingすると192.168.56.1
アクセスできます。ただし、名前空間の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 ネットワークアダプタでは正常に動作しないようです。
したがって、古い方法でネームスペースに実際のブリッジとベスのペアを使用してください。おおよそのものは次のとおりです(テストされていません)。
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