Linux에서는 2개의 네트워크 네임스페이스가 설정되어 있으며, ns1
2 개의 네트워크 네임스페이스를 볼 수 있습니다 ns2
.ip netns list
네트워크 장치를 Linux 루트 네임스페이스에서 으로 이동한 후 ns1
에서 삭제한 다음 ns1
네트워크 장치를 다시 이동하고 싶습니다 .ns2
ns2
ns1
실제 결과는 eth1
Linux 루트 네트워크 네임스페이스로 돌아가는 것입니다. 예상대로 작동하는지 잘 모르겠습니다.
자세한 테스트 시나리오는 다음과 같습니다.
ip netns add ns1
ip netns add ns2
ip link set eth1 netns ns1
ip netns exec ns1 ip link set eth1 netns ns2
ip netns del ns2
예상되는 결과: eth1
될거야ns1
실제 결과: eth1
Linux 루트 네임스페이스 1로 돌아가기
질문:장치가 Linux 루트 네트워크 네임스페이스 1 대신 ns1로 반환될 수 있도록 이를 구현할 수 있는 방법이 있습니까?
답변1
내가 아는 한, "물리적" 네트워크 인터페이스가 소위 "초기" 네트워크 네임스페이스가 아닌 다른 네트워크 네임스페이스로 돌아가도록 강제할 수 있는 방법은 없습니다. Patrick의 의견과는 달리 Linux 커널은 네트워크 네임스페이스를 다음과 같이 간주합니다.평평한따라서 계층 구조가 없습니다(참조:ioctl_ns - Linux 네임스페이스 ioctl() 작업, 이는 명시적으로만 언급합니다.PID그리고사용자네임스페이스는 계층적입니다.
정의된 네트워크 네임스페이스의 계층 구조가 없기 때문에(IP 스택, 주소 및 라우팅 테이블에 적용하기 어려움) Linux에는 네트워크 인터페이스를 init(1)이 수행한 초기 네트워크 네임스페이스로 다시 이동하는 마스터로 돌아가기 규칙이 있습니다. /PID1이 네트워크 네임스페이스에 합류했습니다.
ip netns add ...
당신이 해야 할 일은 호출을 통해 새로운 네트워크 네임스페이스를 생성한 다음 unshare()
이를 바인드 마운트하여 /run/netns/ns1
부동 상태로 유지하는 것뿐입니다. 그런 다음 ip nets add ...
다시 시작하여 다른 네트워크 네임스페이스 마운트를 /run/netns/ns2
완전히 관련되지 않은 두 개의 네트워크 네임스페이스에 바인딩합니다.