
Gibt es einen einzelnen (einfachen) Befehl, der ein Veth-Schnittstellenpaar erstellt und jeder Schnittstelle einen anderen Netzwerk-Namespace zuweist?
Angenommen, ich habe zwei Namespaces: mynamespace-1
und mynamespace-2
. Gibt es einen einzelnen (einfachen) Befehl, der diese beiden Namespaces über ein Veth-Paar verbindet, bei dem jeder Endpunkt der Schnittstelle den Namen hat eth0
?
Derzeit würde ich das Veth-Paar erstellen, jede Schnittstelle in den entsprechenden Namespace verschieben und dann die Schnittstelle innerhalb dieses Namespaces umbenennen. Ich würde gerne wissen, ob diese drei Befehle zu einem einzigen Befehl komprimiert werden können.
Zum Kontext hier ein Beispiel, wie ich derzeit ein Namespace-Paar verbinde und die Verbindung teste:
# Create two network namespaces
sudo ip netns add 'mynamespace-1'
sudo ip netns add 'mynamespace-2'
# Create a veth virtual-interface pair
sudo ip link add 'myns-1-eth0' type veth peer name 'myns-2-eth0'
# Assign the interfaces to the namespaces
sudo ip link set 'myns-1-eth0' netns 'mynamespace-1'
sudo ip link set 'myns-2-eth0' netns 'mynamespace-2'
# Change the names of the interfaces (I prefer to use standard interface names)
sudo ip netns exec 'mynamespace-1' ip link set 'myns-1-eth0' name 'eth0'
sudo ip netns exec 'mynamespace-2' ip link set 'myns-2-eth0' name 'eth0'
# Assign an address to each interface
sudo ip netns exec 'mynamespace-1' ip addr add 192.168.1.1/24 dev eth0
sudo ip netns exec 'mynamespace-2' ip addr add 192.168.2.1/24 dev eth0
# Bring up the interfaces (the veth interfaces the loopback interfaces)
sudo ip netns exec 'mynamespace-1' ip link set 'lo' up
sudo ip netns exec 'mynamespace-1' ip link set 'eth0' up
sudo ip netns exec 'mynamespace-2' ip link set 'lo' up
sudo ip netns exec 'mynamespace-2' ip link set 'eth0' up
# Configure routes
sudo ip netns exec 'mynamespace-1' ip route add default via 192.168.1.1 dev eth0
sudo ip netns exec 'mynamespace-2' ip route add default via 192.168.2.1 dev eth0
# Test the connection (in both directions)
sudo ip netns exec 'mynamespace-1' ping -c 1 192.168.2.1
sudo ip netns exec 'mynamespace-2' ping -c 1 192.168.1.1
Antwort1
Das Beste, was ich anbieten kann, ist, den Befehl in einem Namespace auszuführen (mithilfe der -n
Verknüpfung), jeden Endpunkt mit demselben Namen zu erstellen und zu verschiebeneinsdavon in einen anderen Namespace in diesem Befehl:
ip -n mynamespace-1 link add eth0 type veth peer name eth0 netns mynamespace-2
Die anderen Sachen wie die Adressvergabe ( -n
eventuell ist auch die Abkürzung hilfreich) musst du trotzdem noch machen, also ein Skript schreiben.
Wie man ip
gesagt handelt es sich bei dieser -n
Option um eine Abkürzung für ip netns exec ... ip ...
. Sie können dieses Formular also verwenden, wenn Ihr Unternehmen ip
die Option nicht unterstützt -n
.