~/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 netns
PID를 생성하여 sleep
PID 참조를 가져와 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>