मैं लिनक्स में रूटिंग के बारे में कुछ समझने की कोशिश कर रहा हूं। मैं निम्नलिखित उपकरणों (जोड़े जोड़े):
veth pair: [ns1-1] <10.8.0.1 peer 10.8.0.2> [ns1-2]
veth pair: [ns2-1] <10.8.0.5 peer 10.8.0.6> [ns2-2]
और मैंने इस तरह से ns * -1 उपकरणों के लिए IP को जोड़ा:
[ns1-1] <10.8.0.3 peer 10.8.0.4> [ns2-1]
प्रत्येक ns * -2 डिवाइस अलग नेटवर्क नेमस्पेस में है। प्रत्येक नामस्थान से मैं सभी 6 IP को पिंग करने की कोशिश कर रहा हूं। मैं एक साधारण स्क्रिप्ट में सब कर रहा हूं जो मैंने संलग्न किया है। इस स्क्रिप्ट का आउटपुट है:
# failed to ping 10.8.0.6 from ns1
# failed to ping 10.8.0.2 from ns2
ध्यान दें कि मैंने भी किया है
echo 0 > /proc/sys/net/ipv4/ip_forward
1 लिखना वहाँ सभी IP को पिंगेबल बनाता है लेकिन मैं बस किसी समस्या का हल नहीं ढूंढ रहा हूँ। मैं यह समझना चाहता हूं कि रूटिंग कैसे काम करता है।
उपरोक्त 2 मामलों में पिंग क्यों विफल रहा?
जब मैं नामस्थान ns1 से 10.8.0.5 (ns2-1) पिंग करता हूं, तो tcpdump -i ns2-1
पिंग सफल होने के बावजूद मुझे (नामस्थान के बाहर) कोई पैकेट क्यों नहीं दिखाई देता ?
मैं नाम स्थान ns1 से 10.8.0.5 पिंग क्यों कर सकता हूं, भले ही अग्रेषण अक्षम हो?
क्या मैं सक्षम किए बिना अग्रेषित किए गए किसी भी नाम स्थान से सभी शामिल आईपी को सुलभ बना सकता हूं?
धन्यवाद।
यहाँ स्क्रिप्ट है:
#!/bin/sh
#path=(/sbin $path)
PATH=/sbin:$PATH
_ns() { ip netns exec "$@"; }
create_ns()
{
ns=$1
a1=$2 a2=$3
l1=$ns-1 l2=$ns-2
ip netns add $ns
ip link add name $l1 type veth peer name $l2
ip link set dev $l2 netns $ns
_ns $ns ip link set dev lo up
ip addr add $a1 peer $a2 dev $l1
_ns $ns ip addr add $a2 peer $a1 dev $l2
ip link set dev $l1 up
_ns $ns ip link set dev $l2 up
_ns $ns ip route add default via $a1
}
close_ns()
{
ip link del $1-1
ip netns del $1
}
test_ping()
{
if ! _ns $1 ping -W 1 -c 1 $2 >/dev/null 2>&1; then
echo "failed to ping $2 from $1"
fi
}
close_ns ns1
close_ns ns2
create_ns ns1 10.8.0.1 10.8.0.2
create_ns ns2 10.8.0.5 10.8.0.6
ip addr add 10.8.0.3 peer 10.8.0.4 dev ns1-1
ip addr add 10.8.0.4 peer 10.8.0.3 dev ns2-1
test_ping ns1 10.8.0.1
test_ping ns1 10.8.0.2
test_ping ns1 10.8.0.3
test_ping ns1 10.8.0.4
test_ping ns1 10.8.0.5
test_ping ns1 10.8.0.6
test_ping ns2 10.8.0.1
test_ping ns2 10.8.0.2
test_ping ns2 10.8.0.3
test_ping ns2 10.8.0.4
test_ping ns2 10.8.0.5
test_ping ns2 10.8.0.6
# failed to ping 10.8.0.6 from ns1
# failed to ping 10.8.0.2 from ns2