Ich habe das Problem selbst untersucht.
Was passiert, ist, dass, wenn Sie ein Netzwerk-Namespace erstellen, geben Sie /etc/resolv.conf
der Host-Maschine zu sehen, es sei denn Sie ausdrücklich /etc/netns/<namespace_name>/resolv.conf
erstellen, die Halterung automatisch /etc/resolv.conf
binden wird, wenn das Netzwerk-Namespace innerhalb nachgeschlagen. Daher wird resolv.conf
des Hosts durch einfaches Erstellen dieses Pfades nicht mehr im Netzwerknamespace sichtbar sein, der seine eigene resolv.conf
haben wird.
Die manual page von ip netns
erklärt dies:
Für Anwendungen, die von Netzwerk-Namespaces bewusst sind, die Konvention zunächst in in /etc/netns/NAME/dann für die globale Netzwerkkonfigurationsdateien suchen/etc/. Wenn Sie beispielsweise eine andere -Version von /etc/resolv.conf für einen Netzwerk-Namespace verwenden möchten, der zum Isolieren von Ihres vpn verwendet wird, würden Sie ihn /etc/netns/myvpn/resolv.conf nennen.
Ip netns exec automatisiert Umgang mit dieser Konfiguration Konvention für Netzwerk-Namespace nicht bewusst Anwendungen Datei, indem Sie einen Mount-Namensraum zu schaffen und binden alle des pro Netzwerk-Namespace configure Dateien in ihren traditionellen Standort in/etc Montage.
Soweit Aktualisierung resolv.conf
, dhclient
nicht aus der Box in Netzwerk-Namespaces funktioniert, wenn /etc/netns/<namespace_name>/resolv.conf
(auf der anderen Seite existiert, wenn es nicht vorhanden ist, wird es die resolv.conf
der Host-Maschine überschreibt , da es die einzige verfügbare ist, aber das ist nicht wirklich wünschenswert). Wie der Fehler in der obigen Frage zeigt, passiert, dass dhclient
eine temporäre Datei mit den neuen Nameserver-Details in /etc/resolv.conf.dhclient-new.2740
vorbereitet und dann versucht, sie als /etc/resolv.conf
umzubenennen. Es erzeugt einen Fehler, weil /etc/resolv.conf
bereits bind-mounted ist und anscheinend mv
ist nicht erlaubt, diesen Trick zu tun.
Um dhclient
in Netzwerk-Namespaces arbeiten zu können, sollte /sbin/dhclient-script
geändert werden. Ich entfernte diese:
mv -f $new_resolv_conf /etc/resolv.conf
und ersetzte sie durch:
cat $new_resolv_conf > /etc/resolv.conf
rm -f $new_resolv_conf
Ansonsten dhcpcd
scheint richtig, diesen Job zu tun.
Dies ist ein cooler Workaround. Beachten Sie, dass es zwei Abschnitte gibt, in denen Sie mv in cat ändern müssen. Ich frage mich, was mv interally tut. Wird die Datei zuerst entfernt? – 0xAffe