2016-02-14 43 views
0

我編寫了下面的代碼來創建兩個命名空間ns1和ns2,並使用bridge(br),tap0和tap1在它們之間建立連接。但最後「ping」我有無法訪問的網絡。你能指導我什麼問題嗎?2個命名空間的連接

ip netns add ns1 
ip netns add ns2 

ip link add name br type bridge 

ip tuntap add dev tap0 mode tap 
ip tuntap add dev tap1 mode tap 

ip link set dev tap0 master br 
ip link set tap0 up 


ip link set dev tap1 master br 
ip link set tap1 up 

ip link set tap0 netns ns1 
ip link set tap1 netns ns2 


ip netns exec ns1 ip addr add 10.0.0.1/24 dev tap0 
ip netns exec ns2 ip addr add 10.0.0.2/24 dev tap1 

ip netns exec ns1 ip link set dev tap0 up 
ip netns exec ns2 ip link set dev tap1 up 

ip netns exec ns1 ip link set dev lo up 
ip netns exec ns2 ip link set dev lo up 


ip link set br up 

ip netns exec ns1 ping 10.0.0.2 

回答

1

如果您要在腳本中定期檢查橋的狀態,問題可能會變得更加明顯。在您將您的自來水設備之一的命名空間,它看起來像這樣:

# 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 
+0

謝謝您的回答和解釋。你能指導我在哪些情況下可以使用水龍頭嗎? –

+0

我不行。我不知道你在做什麼,或者你爲什麼認爲使用水龍頭設備是合適的。這聽起來像是你清楚解釋你的目標的另一個問題的充分材料。 – larsks