Linux-Networking
如何從自定義 linux 網路命名空間切換回預設命名空間?
使用ip netns exec您可以在自定義網路命名空間中執行命令 - 但還有一種方法可以在預設命名空間中執行命令嗎?
例如,執行這兩個命令後:
sudo ip netns add test_ns sudo ip netns exec test_ns bash
新創建的 bash 如何在預設的網路命名空間中執行程序?據我所知,沒有ip netns exec default或任何類似的東西。
我的情況是:
我想在單獨的網路命名空間中執行 SSH 伺服器(以使系統的其餘部分不知道網路連接,因為系統用於網路測試),但希望能夠通過在預設網路命名空間中執行程序SSH 連接。
到目前為止我發現了什麼:
- 創建的網路命名空間被列為 /var/run/netns 下的文件(但預設命名空間沒有文件)
- ip netns exec程式碼可以在這裡找到:http: //git.kernel.org/cgit/linux/kernel/git/shemminger/iproute2.git/tree/ip/ipnetns.c#n132 -我還沒有掌握一切它正在做,但看起來不太有希望。
- ip netns根據如何在 Linux 上查詢和更改網路命名空間的建議辨識 $$?在預設網路命名空間中時不返回任何內容
較新的發行版/核心支持該
nsenter
命令,該命令應該執行您想要的操作,前提是您在執行此操作時是 root。這是一個範例(Fedora 20)。
[root@home ~]# unshare -n /bin/bash [root@home ~]# ip a l 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 [root@home ~]# ping google.com ping: unknown host google.com [root@home ~]# nsenter -t 1 -n -- ping -c 2 google.com PING google.com (74.125.230.65) 56(84) bytes of data. 64 bytes from lhr14s23-in-f1.1e100.net (74.125.230.65): icmp_seq=1 ttl=56 time=14.2 ms 64 bytes from lhr14s23-in-f1.1e100.net (74.125.230.65): icmp_seq=2 ttl=56 time=15.0 ms --- google.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 14.239/14.621/15.003/0.382 ms [root@home ~]# nsenter -t 1 -n -- ip a l 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 10:bf:48:88:50:ee brd ff:ff:ff:ff:ff:ff inet 192.168.1.2/24 brd 192.168.1.255 scope global p4p1 valid_lft forever preferred_lft forever inet6 fe80::12bf:48ff:fe88:50ee/64 scope link valid_lft forever preferred_lft forever [root@home ~]#
這依賴於
setns
系統呼叫。你至少需要一個 3.0 核心和 glibc-2.14 才能工作。RHEL 6.5 支持持久命名空間,但不支持將現有程序移動到新命名空間。