사용자 정의 Linux 네트워크 네임 스페이스에서 기본 네임 스페이스로 다시 전환하려면 어떻게해야합니까? 두 명령을 실행

ip netns exec 를 사용하면 사용자 정의 네트워크 네임 스페이스에서 명령을 실행할 수 있지만 기본 네임 스페이스에서 명령을 실행할 수있는 방법이 있습니까?

예를 들어,이 두 명령을 실행 한 후 :

sudo ip netns add test_ns
sudo ip netns exec test_ns bash

새로 작성된 bash는 기본 네트워크 네임 스페이스에서 어떻게 프로그램을 실행할 수 있습니까? ip netns exec default 또는 내가 찾은 한 비슷한 것이 없습니다 .

내 시나리오는 다음과 같습니다

별도의 네트워크 네임 스페이스에서 SSH 서버를 실행하고 싶습니다 (시스템이 네트워크 테스트에 사용됨에 따라 나머지 시스템은 네트워크 연결을 인식하지 못합니다). SSH 연결.

내가 지금까지 알아 낸 것 :



답변

최신 배포판 / 커널은 nsenter명령을 지원하므로 원하는 작업을 수행해야합니다.

다음은 예제입니다 (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는 영구 네임 스페이스는 지원하지만 기존 프로세스를 새 네임 스페이스로 이동하는 것은 지원 하지 않습니다 .


답변

두 가지 간단한 명령으로 기본 네트워크 네임 스페이스로 돌아갈 수 있음을 발견했습니다.

ln -s /proc/1/ns/net /var/run/netns/default
ip netns exec default ifconfig -a

이 방법은 proc파일 시스템을 통해 자신의 네임 스페이스 외부의 프로세스를 볼 수 있다고 가정합니다 . 별도의 PID 네임 스페이스에있는 경우 기본 네임 스페이스로 돌아가는 것이 간단하지 않습니다.

위 명령은 Ubuntu 14.04에서 테스트되었습니다. 접근 방식과 관련된 배포판이 있는지 모르겠습니다.


답변

“ln -s / proc / 1 / ns / net / var / run / netns / default”<—– 권장하지 않습니다.

“ip netns show”를 출력하는 코드의 카운터

bash 쉘을 실행하면 bash 외부에 간단하게 존재하고 종료하십시오.

netns에 ssh가 있으면 기본 ns의 인터페이스에 ssh를 사용하여 필요한 작업을 수행하십시오.

위와 같이 ln을 최후의 수단으로 사용하지만 완료 되 자마자 ns가 변경되기 전에 제거하는 것이 좋습니다. 그렇지 않으면 카운터가 손상되어 문제가 발생합니다.


답변

nsenter -n -t <pid of a process running in the default ns>

‘ps aux’또는 원하는 경우 상단을 수행하는 pid 양식을 얻을 수 있습니다.

개인적으로 나는 항상 기본 네임 스페이스로 ssh 한 다음 exit를 입력하고 필요한 경우 네임 스페이스를 다시 입력하여 항상 기본값으로 돌아갈 수 있습니다.