linux-networking – 如何从自定义Linux网络命名空间切换回默认命名空间?

前端之家收集整理的这篇文章主要介绍了linux-networking – 如何从自定义Linux网络命名空间切换回默认命名空间?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用ip netns exec,您可以在自定义网络命名空间中执行命令 – 但是还有一种方法可以在默认命名空间中执行命令吗?

例如,执行这两个命令后:

sudo ip netns add test_ns
sudo ip netns exec test_ns bash

新创建的bash如何在默认网络命名空间中执行程序?据我所知,没有ip netns exec默认或任何类似的东西.

我的情景是:

我想在一个单独的网络命名空间中运行SSH服务器(以保持系统的其余部分不知道网络连接,因为系统用于网络测试),但希望能够通过默认网络命名空间执行程序SSH连接.

到目前为止我发现了什么:

>创建的网络命名空间在/ var / run / netns下列为文件(但默认命名空间没有文件)
> ip netns exec代码可以在这里找到:http://git.kernel.org/cgit/linux/kernel/git/shemminger/iproute2.git/tree/ip/ipnetns.c#n132 – 我还没有掌握它正在做的所有事情,但看起来并不是很有希望.
>在默认网络命名空间中,Howto query and change network namespace on linux?建议的ip netns标识$$不返回任何内容

解决方法

较新的发行版/内核支持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,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提供对持久命名空间的支持,但不支持将现有进程移动到新的命名空间.

猜你在找的Linux相关文章