Linux 네트워크 네임스페이스 간 네트워크 장치 이동

Linux 네트워크 네임스페이스 간 네트워크 장치 이동

Linux에서는 2개의 네트워크 네임스페이스가 설정되어 있으며, ns12 개의 네트워크 네임스페이스를 볼 수 있습니다 ns2.ip netns list

네트워크 장치를 Linux 루트 네임스페이스에서 으로 이동한 후 ns1에서 삭제한 다음 ns1네트워크 장치를 다시 이동하고 싶습니다 .ns2ns2ns1

실제 결과는 eth1Linux 루트 네트워크 네임스페이스로 돌아가는 것입니다. 예상대로 작동하는지 잘 모르겠습니다.

자세한 테스트 시나리오는 다음과 같습니다.

  1. ip netns add ns1
  2. ip netns add ns2
  3. ip link set eth1 netns ns1
  4. ip netns exec ns1 ip link set eth1 netns ns2
  5. ip netns del ns2

예상되는 결과: eth1될거야ns1

실제 결과: eth1Linux 루트 네임스페이스 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완전히 관련되지 않은 두 개의 네트워크 네임스페이스에 바인딩합니다.

관련 정보