如果您要在腳本中定期檢查橋的狀態,問題可能會變得更加明顯。在您將您的自來水設備之一的命名空間,它看起來像這樣:
# ip netns exec ip link show tap0
10: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br state DOWN mode DEFAULT qlen 500
link/ether b2:e6:85:8a:43:61 brd ff:ff:ff:ff:ff:ff
的setns
運行後,它看起來像這樣:
10: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 500
link/ether b2:e6:85:8a:43:61 brd ff:ff:ff:ff:ff:ff
注意,你再也看不到master br
在這輸出;當您將接口移出全局名稱空間時,它將從橋樑的 中刪除(因爲它不再可見)。
通常,要將命名空間連接到主機上的網橋,您將使用veth
設備,而不是tap
設備。一個veth
設備是一個 連接的一對接口(想象它像一個虛擬的跳線)。 您將該對的一邊添加到您的網橋,另一端會將 添加到網絡名稱空間中。事情是這樣的:
ip netns add ns1
ip netns add ns2
ip link add name br0 type bridge
for ns in ns1 ns2; do
# create a veth pair named $ns-inside and $ns-outside
# (e.g., ns1-inside and ns1-outside)
ip link add $ns-inside type veth peer name $ns-outside
# add the -outside half of the veth pair to the bridge
ip link set dev $ns-outside master br0
ip link set $ns-outside up
# add the -inside half to the network namespace
ip link set $ns-inside netns $ns
done
ip netns exec ns1 ip addr add 10.0.0.1/24 dev ns1-inside
ip netns exec ns2 ip addr add 10.0.0.2/24 dev ns2-inside
ip netns exec ns1 ip link set dev ns1-inside up
ip netns exec ns2 ip link set dev ns2-inside up
ip link set br0 up
以上後:
# ip netns exec ns1 ping -c2 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.044 ms
--- 10.0.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.034/0.039/0.044/0.005 ms
謝謝您的回答和解釋。你能指導我在哪些情況下可以使用水龍頭嗎? –
我不行。我不知道你在做什麼,或者你爲什麼認爲使用水龍頭設備是合適的。這聽起來像是你清楚解釋你的目標的另一個問題的充分材料。 – larsks