Ich habe auf der CentOS-Maschine wie folgt zwei Netzwerk-Namespaces erstellt, nämlich Rot und Blau:
[root@ip-xxx-xxx-xxx-xxx ~]# ip netns add red
[root@ip-xxx-xxx-xxx-xxx ~]# ip netns add blue
[root@ip-xxx-xxx-xxx-xxx ~]# ip netns
blue
red
Ich habe die virtuellen Kabel ‚veth-red‘ und ‚veth-blue‘ erstellt und diese anschließend mit folgendem Befehl verbunden:
[root@ip-xxx-xxx-xxx-xxx ~]# ip link add veth-red type veth peer name veth-blue
Anschließend habe ich jedem Namespace die entsprechende Schnittstelle wie folgt zugeordnet:
[root@ip-xxx-xxx-xxx-xxx ~]# ip link set veth-red netns red
[root@ip-xxx-xxx-xxx-xxx ~]# ip link set veth-blue netns blue
Anschließend habe ich jedem dieser Namespaces wie folgt IP-Adressen zugewiesen:
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n red addr add 192.168.15.1 dev veth-red
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n blue addr add 192.168.15.2 dev veth-blue
Anschließend rufe ich die Schnittstelle mit dem Befehl zum Einrichten der IP-Verbindung für jedes Gerät innerhalb der jeweiligen Namespaces auf.
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n red link set veth-red up
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n blue link set veth-blue up
Wenn ich dann die Schnittstellen innerhalb jedes Namespaces überprüfe, erhalte ich „veth-red“ im „roten“ Namespace und „veth-blue“ im blauen Namespace wie folgt:
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n red link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
17: veth-red@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 7e:9d:42:79:2d:2f brd ff:ff:ff:ff:ff:ff link-netnsid 1
[root@ip-xxx-xxx-xxx-xxx ~]# ip -n blue link
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
16: veth-blue@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 62:aa:79:55:46:56 brd ff:ff:ff:ff:ff:ff link-netnsid 0
Meine Zweifel kommen auf, wenn ich versuche, einen Ping von Rot nach Blau (IP-Adresse: 192.168.15.2) wie folgt zu senden:
[root@ip-xxx-xxx-xxx-xxx ~]# ip netns exec red ping 192.168.15.2
connect: Network is unreachable
Kann mir jemand sagen, warum ich die Meldung „Netzwerk ist nicht erreichbar“ erhalte, obwohl ich alles nach Vorschrift gemacht habe? Bitte helfen Sie
Antwort1
Zur Fehlerbehebung können Sie den folgenden route
Befehl verwenden:
# ip -n red route get 192.168.15.2
RTNETLINK answers: Network is unreachable
Das ist ein guter Hinweis. Du hast kein ordentliches Routing in den Namespaces. In diesem Fall liegt es daran, dass du beim Hinzufügen der IP-Adresse die Netzmaske vergessen hast:
# ip -o -n red a
7: veth-red inet 192.168.15.1/32 scope global veth-red\ valid_lft forever preferred_lft forever
Versuchen Sie, die IP-Adresse mit einem hinzuzufügen, /24
damit die Routing-Tabelle weiß, dass sie über diese Schnittstelle andere IPs im Netzwerk erreichen kann.
- Löschen Sie zuerst alle IP-Adressen
# ip -n red addr flush dev veth-red
# ip -n blue addr flush dev veth-blue
- Fügen Sie die richtige IP hinzumit Netzmaske(Verwenden Sie es
/24
so, dass es am wenigsten verwirrend ist, aber selbst/30
für Ihr Beispiel funktioniert es).
# ip -n red addr add 192.168.15.1/24 dev veth-red
# ip -n blue addr add 192.168.15.2/24 dev veth-blue
Und du bist fertig:
# ip netns exec red ping -c2 192.168.15.2
PING 192.168.15.2 (192.168.15.2) 56(84) bytes of data.
64 bytes from 192.168.15.2: icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from 192.168.15.2: icmp_seq=2 ttl=64 time=0.022 ms
--- 192.168.15.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1035ms
rtt min/avg/max/mdev = 0.022/0.028/0.034/0.006 ms```