Mar*_*tin 17 linux-networking network-namespace
使用ip netns exec您可以在自定义网络命名空间中执行命令 - 但是否还有一种方法可以在默认命名空间中执行命令?
例如,执行这两个命令后:
sudo ip netns add test_ns
sudo ip netns exec test_ns bash
Run Code Online (Sandbox Code Playgroud)
新创建的 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按照Howto 在 linux 上查询和更改网络命名空间的建议识别 $$ ?在默认网络命名空间中时不返回任何内容
kas*_*erd 19
我发现您可以使用两个简单的命令返回默认网络命名空间:
ln -s /proc/1/ns/net /var/run/netns/default
ip netns exec default ifconfig -a
Run Code Online (Sandbox Code Playgroud)
这种方法显然假设您可以通过proc
文件系统看到您自己的命名空间之外的进程。如果您也在单独的 PID 命名空间中,返回默认命名空间就没有那么简单了。
以上命令在 Ubuntu 14.04 上测试过。我不知道该方法是否有任何特定的分布。
Mat*_*Ife 14
较新的发行版/内核支持该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 ~]#
Run Code Online (Sandbox Code Playgroud)
这依赖于setns
系统调用。你至少需要一个 3.0 内核和 glibc-2.14 才能工作。
RHEL 6.5 支持持久命名空间,但不支持将现有进程移动到新命名空间。
归档时间: |
|
查看次数: |
21140 次 |
最近记录: |