Linux-Ping zwischen 2 Netzwerk-Namespaces

Linux-Ping zwischen 2 Netzwerk-Namespaces

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.2wird 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.

Ihr Setup

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

verwandte Informationen