권한 없는 사용자로서 인터페이스를 비표준 네트워크 네임스페이스로 이동하는 방법

권한 없는 사용자로서 인터페이스를 비표준 네트워크 네임스페이스로 이동하는 방법

~/mynamespace다음 위치 에 Linux 네트워크 네임스페이스 바인딩이 설치되어 있습니다 .

unshare -mrn;
touch ~/mynamespace; # executed in the console opened by the first command
unshare --net=~/mynamespace true; # executed in the console opened by the first command

명령 #1로 생성된 익명 네트워크 네임스페이스의 인터페이스를 마운트된 네임스페이스 바인딩으로 어떻게 이동합니까 ~/mynamespace?

내 경우에는 내부 네임스페이스나 그 복사본을 바인드 마운트하는 것은 /var/run/netns아직 옵션이 아닙니다. 관련 명령은 ip ... netns더 표준적인 디렉터리에 바인드 마운트된 /var/run/netns/네트워크 네임스페이스 만 허용할 것이라고 생각합니다 . 그래서 ip이 경우에는 명령이 작동하지 않는 것 같아요 .

또한 위의 모든 명령은 루트 없이 권한이 없는 사용자로 실행된다는 점에 유의하세요.

답변1

unshare -mrn # which implies -U

달리 명시하지 않는 한 아래의 모든 항목은 위에 입력한 네임스페이스에서 실행됩니다.


사용하지 마세요ip netns

touch $HOME/mynamespace
unshare --net=$HOME/mynamespace true

true시점에서 모든 PID 참조는 손실되지만 탑재 참조는 유지되므로 네임스페이스는 계속 존재할 수 있습니다.

이것ip link set ... netns이 명령은 마운트 지점을 얻을 수 있습니다또는참조용 프로세스 ID:

회로망네트워크 이름|PID

NETNSNAME 이름과 연결된 네트워크 네임스페이스로 장치를 이동합니다.또는 프로세스PID.

ip link add veth0 type veth peer name veth1

사용하지 않을 때 임시 명령을 사용하여 ip netnsPID를 생성하여 sleepPID 참조를 가져와 ip link사용할 수 있습니다.

nsenter --net=$HOME/mynamespace sleep 99 & pid=$!

ip link set veth1 netns $pid

얻다:

# ip -br link
lo               DOWN           00:00:00:00:00:00 <LOOPBACK> 
veth0@if2        DOWN           86:c2:bc:ba:1a:01 <BROADCAST,MULTICAST> 
# nsenter --net=$HOME/mynamespace ip -br link
lo               DOWN           00:00:00:00:00:00 <LOOPBACK> 
veth1@if3        DOWN           86:e3:a1:ce:48:4e <BROADCAST,MULTICAST> 

사용ip netns

ip netns작동하려면 공유 설치가 필요하며 /run/netns, 아직 설치되지 않은 경우(처음 사용 시) 공유 설치가 생성되어 설치됩니다. 이미 설치된 것으로 감지되면 이를 생성하지 않고 나중에 실패합니다( Cannot create namespace file "/run/netns/foo": Permission denied). 이는 실제 초기 사용자 네임스페이스 루트에 속하므로 쓸 수 없기 때문입니다. 생성되지 않으면 /run실제 초기 사용자 네임스페이스 루트에 속하는 콘텐츠를 쓸 수 없으므로 생성할 수 없습니다. 등 다양한 경우에 ip netns권한 없이 사용자 네임스페이스에서 실행하면 실패합니다.

이전 버전 대신 수동으로 설치하면 ip netns만족스러울 것입니다.

  • 존재하고 어떤 이유로 /run/netns현재 상태를 유지하려는 경우:/run

    mount -t tmpfs --make-rshared tmpfs /run/netns
    
  • if 가 /run/netns존재하지 않거나 존재하더라도 전체를 재정의합니다 /run.

    디렉토리는 현재 디렉토리에 생성될 수 없으므로 /run마운트해야 합니다. 그러면 다른 유용한 정보에 대한 액세스 권한을 잃게 되지만 실패한 다른 도구( iptables-legacy -w다른 도구 와 마찬가지로 Fatal: can't open lock file /run/xtables.lock: Permission denied)에 대한 액세스 권한을 얻게 됩니다.

    mount -t tmpfs tmpfs /run
    

이제 모든 표준 ip netns이나 ip link명령이 ip -n foo ...사용자 네임스페이스에서 평소처럼 작동합니다.

ip netns add mynamespace
ip link add name veth0 type veth peer netns mynamespace name veth1

얻다:

# ip -br link
lo               DOWN           00:00:00:00:00:00 <LOOPBACK> 
veth0@if2        DOWN           2a:98:7f:83:bf:9e <BROADCAST,MULTICAST> 
# ip -n mynamespace -br link
lo               DOWN           00:00:00:00:00:00 <LOOPBACK> 
veth1@if2        DOWN           96:3c:5e:a6:a4:4a <BROADCAST,MULTICAST> 

관련 정보