Za pomocą ip netns exec możesz wykonać polecenie w niestandardowej sieciowej przestrzeni nazw - ale czy jest też sposób na wykonanie polecenia w domyślnej przestrzeni nazw?
Na przykład po wykonaniu tych dwóch poleceń:
sudo ip netns add test_ns
sudo ip netns exec test_ns bash
Jak nowo utworzony bash może uruchamiać programy w domyślnej sieciowej przestrzeni nazw? O ile nie znalazłem, nie ma domyślnego wykonania ip netns exec ani nic podobnego.
Mój scenariusz to:
Chcę uruchomić serwer SSH w oddzielnej sieciowej przestrzeni nazw (aby pozostała część systemu nie była świadoma połączenia sieciowego, ponieważ system służy do testowania sieci), ale chcę mieć możliwość uruchamiania programów w domyślnej przestrzeni nazw sieci za pośrednictwem połączenie SSH.
Co dotychczas odkryłem:
Utworzone sieciowe nazwy są wymienione jako pliki w / var / run / netns (ale nie ma pliku dla domyślnej przestrzeni nazw)
Przez IP netns Exec kod można znaleźć tutaj: http://git.kernel.org/cgit/linux/kernel/git/shemminger/iproute2.git/tree/ip/ipnetns.c#n132 - Nie zrozumiał wszystko że to działa, ale nie wygląda bardzo obiecująco.
ip netns identyfikują $$ zgodnie z sugestią Howto i zmieniają przestrzeń nazw sieci w systemie Linux? nic nie zwraca, gdy znajduje się w domyślnej sieciowej przestrzeni nazw
źródło
nsenter -t 1 -n
ale stworzyłem nowy proces tak samo, jakip netns exec
i nie zmieniłem przestrzeni nazw bieżącego procesu.Odkryłem, że możesz powrócić do domyślnej sieciowej przestrzeni nazw za pomocą dwóch prostych poleceń:
Ta metoda oczywiście zakłada, że można zobaczyć procesy poza własną przestrzenią nazw przez
proc
system plików. Jeśli znajdujesz się również w osobnej przestrzeni nazw PID, powrót do domyślnej przestrzeni nazw nie jest tak prosty.Powyższe polecenia zostały przetestowane na Ubuntu 14.04. Nie wiem, czy w podejściu jest coś specyficznego dla dystrybucji.
źródło
mount --bind
zamiastln -s
, ponieważ oznacza to, żeip
polecenie może również nim zarządzać (ip w zasadzie wykonuje polecenie mount --bind przeciwko tym plikom przestrzeni nazw, aby skonfigurować trwałe przestrzenie nazw).„ln -s / proc / 1 / ns / net / var / run / netns / default” <----- W ogóle nie jest zalecane.
Licznik kodu, który wyświetla „ip netns show”
jeśli masz wykonywaną powłokę bash, proste istnieją poza bash, wyjdź.
Jeśli masz ssh do netns, to ssh do interfejsu domyślnego ns i zrób to, co musisz tam zrobić.
W ostateczności więc ln jak wyżej, ale sugerowałbym usunięcie go tak szybko, jak to zrobione, i zanim jakiekolwiek zmiany wystąpią w dowolnym ns. W przeciwnym razie licznik zostanie uszkodzony i spowoduje problemy.
źródło
Możesz dostać formularz pid robiąc 'ps aux', a nawet górę, jeśli chcesz.
Osobiście zawsze ssh do głównej przestrzeni nazw, potem zawsze mogę wrócić do wartości domyślnej, wpisując polecenie exit, a następnie ponownie wpisując przestrzeń nazw, jeśli to konieczne.
źródło