Ziemlich neu in der Linux-Netzwerktechnik und konnte keine Antwort darauf auf ähnliche Fragen finden
Ich versuche, zwei Namespaces zu erstellen und zwischen ihnen zu pingen
ip netns add red;
ip netns add blue;
ip link add dev v-red type veth peer name v-blue;
ip link set dev v-red netns red;
ip link set dev v-blue netns blue;
ip netns exec red ip addr add 192.168.15.1 dev v-red;
ip netns exec blue ip addr add 192.168.15.2 dev v-blue;
ip netns exec red ip link set dev v-red up;
ip netns exec blue ip link set dev v-blue up;
ip netns exec red ping 192.168.15.2;
-> ping: connect: Network is unreachable
Worauf ich beim Debuggen geachtet habe
ip netns exec blue ifconfig
v-blue: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.15.2 netmask 255.255.255.255 broadcast 0.0.0.0
ip netns exec red ifconfig
v-red: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.15.1 netmask 255.255.255.255 broadcast 0.0.0.0
Antwort1
Die beiden Geräte befinden sich in zwei unterschiedlichen logischen /32-Netzwerken und es gibt weder eine Route noch eine Routing-Tabelle, die Aufschluss darüber gibt, wie die einzelnen Hosts kontaktiert werden.
Wenn Sie es ausführen, # ip netns exec red ip route get 192.168.15.2
wird es mit antworten RTNETLINK answers: Network is unreachable
. Denn die Routing-Tabelle hat keine Antwort darauf, wie ein Paket an das Netzwerk 192.168.15.2/32 gesendet werden soll.
Wenn Sie die Routen jedoch in beide Richtungen hinzufügen, sollte dies als Hinweis darauf dienen, dass die beiden Hosts Nachbarn sind (technisch eher direkt verbundene Peers) und die Pakete gesendet werden sollten.
ip netns exec red ip route add 192.168.15.2/32 dev v-red
ip netns exec blue ip route add 192.168.15.1/32 dev v-blue
Anschließend können Sie die Routing-Tabelle ausdrucken und sehen, wie aktuell eine Route angewiesen ist.
ip netns exec blue ip route list
192.168.15.1 dev v-blue scope link
Beachten Sie, dass es völlig in Ordnung ist, hier stattdessen eine Standardroute zu verwenden ( ip netns exec red ip route add default dev v-red
), da diese alle Hosts abdeckt, nicht nur den, von dem Sie wissen, dass er auf der anderen Seite existiert. Damit Sie jedoch besser verstehen, wo das Problem liegt, habe ich hier die spezifischen Hosts hinzugefügt, mit denen Sie kommunizieren wollten.
An diesem Punkt sollte das Pingen wie erwartet funktionieren (sofern die Firewall dies zulässt).
Antwort2
Alles wurde in der obigen Antwort erklärt. Ich versuche, es weiter zu erklären, indem ich Ihr Setup skizziere. Ihnen fehlt das Routing in jedem Namespace. Denken Sie einfach daran, dass ein Namespace eine vollständige Instanz eines TCP/IP-Routing-Stacks (ARP, Schnittstellen, Routing, Firewall-Regeln usw.) ist.
Hoffe das hilft.
Antwort3
Wenn Sie rote und blaue Namespaces im selben Netzwerk haben möchten, können Sie Folgendes verwenden, wodurch der Router eliminiert wird.
ip netns exec rot ip route hinzufügen 192.168.15.2/24 dev v-rot
ip netns exec blau ip route hinzufügen 192.168.15.1/24 dev v-blau