'익명'네트워크 네임 스페이스 내부의 veth 장치를 외부 장치에 연결하려면 어떻게해야합니까?

갖가지 잡다한

unshare내부에 새 네트워크 네임 스페이스를 만들기 위해 호출 한 프로세스가 있습니다 . execvebash를 시작 하도록 호출 하면 ip 명령은 lo장치 가 있다는 것을 보여줍니다 . 또한 사용자 네임 스페이스를 만들고 내 프로세스가 네임 스페이스 내에서 루트가되도록 배열하면 ip명령을 사용하여 해당 장치를 작동 할 수 있습니다.

ip명령을 사용 veth하여이 네임 스페이스에 장치 를 만들 수도 있습니다 . 그러나 그것은 표시되지 않고 ip netns listveth장치가 루트 수준 네임 스페이스에 표시되지 않습니다 (예상대로). veth루트 수준 네임 스페이스의 veth장치를 프로세스 네임 스페이스 내의 장치에 연결하려면 어떻게합니까 ? ip명령은 네임 스페이스에 ip명령 에 의해 할당 된 이름을 요구하는 것 같지만 내 이름은 ip netns add생성에 사용하지 않았기 때문에 그렇지 않습니다 .

넷 링크 장치를 사용하고 설정하는 프로그램을 직접 작성하여 수행 할 수 있습니다. 그러나 나는 정말로 원하지 않는다. 명령 줄을 통해이 작업을 수행 할 수 있습니까?

Docker 컨테이너에도 자체 네트워크 네임 스페이스가 있고 해당 네임 스페이스도 이름이 지정되지 않았으므로이를 수행 할 방법이 있어야합니다. 그러나 veth내부에는 veth외부 장치에 연결된 장치가 있습니다.

내 목표는 이상적으로는 컨테이너 외부에서 루트가 될 필요없이 프로세스 격리 컨텍스트를 동적으로 만드는 것입니다. 이를 위해 PID 네임 스페이스, UID 네임 스페이스, 네트워크 네임 스페이스, IPC 네임 스페이스 및 마운트 네임 스페이스를 만들 것입니다. cgroup 네임 스페이스를 생성 할 수도 있지만 새로운 네임 스페이스이므로 현재 지원되는 SLES, RHEL 및 Ubuntu LTS 버전에서 실행할 수 있어야합니다.

저는 한 번에 하나의 네임 스페이스를 통해 작업 해 왔으며 현재 사용자, PID 및 마운트 네임 스페이스가 만족스럽게 작동하고 있습니다.

/proc/pid/ns/net필요한 경우 마운트 할 수 있지만 사용자 네임 스페이스 내부에서 수행하는 것을 선호하므로 네임 스페이스 외부에서 루트가 될 필요가 없습니다. 대부분 네임 스페이스의 모든 프로세스가 사라지는 즉시 모든 것이 사라지기를 원합니다. 작업이 끝났을 때 파일 시스템에서 정리할 상태를 많이 갖는 것은 이상적이지 않습니다. 컨테이너가 처음 할당 될 때 임시로 생성 한 다음 즉시 제거하는 것이 컨테이너가 종료 될 때 정리하는 것보다 훨씬 낫습니다.

아니요, docker , lxc , rkt 또는 다른 기존 솔루션을 사용할 수 없으므로 bog 표준 시스템 유틸리티 (예 : ip ), glibc 같은 시스템 라이브러리 및 Linux 시스템 호출에 의존 할 수 있습니다 .

Sebasth

ip link네트워크 네임 스페이스 이름 외에 PID 를 사용하여 프로세스의 네임 스페이스를 참조 할 수있는 네임 스페이스 옵션이 있습니다 . 경우 PID 네임 스페이스는 프로세스간에 공유됩니다, 당신은 장치 중 하나의 방법을 이동할 수 있습니다; PID 1"외부"라고 생각할 때 내부 에서 가장 쉬울 것입니다 . 별도의 PID 네임 스페이스사용하면 외부 (PID) 네임 스페이스에서 내부 네임 스페이스로 이동해야합니다.

예를 들어, 네트워크 네임 스페이스 내부 에서 PID 1 네임 스페이스에 대한 veth 장치 쌍만들 수 있습니다 .

ip link add veth0 type veth peer name veth0 netns 1

Linux에서 네임 스페이스가 작동하는 방식

모든 프로세스에는 네임 스페이스에 대한 참조 파일이 /proc/<pid>/ns/있습니다. 또한, ip netns영구 참조 파일을 생성합니다 /run/netns/. 이러한 파일은 setns실행중인 스레드의 네임 스페이스를 해당 파일이 가리키는 네임 스페이스로 변경하기 위해 시스템 호출 과 함께 사용 됩니다.

셸에서 nsenter프로그램을 사용하여 다른 네임 스페이스로 들어가서 네임 스페이스 파일 (경로)을 인수로 제공 할 수 있습니다 .

Linux 네임 스페이스에 대한 좋은 개요는 LWN.net의 운영 중인 네임 스페이스 기사 시리즈에서 제공됩니다.

네임 스페이스 설정

여러 네임 스페이스 ( mount, pid, user 등)를 설정할 때는 mountpid 네임 스페이스를 변경하기 전에 가능한 한 빨리 네트워크 네임 스페이스를 설정하십시오 . 공유 마운트 또는 pid 네임 스페이스가 없으면 외부의 네트워크 네임 스페이스를 참조하는 파일을 볼 수 없기 때문에 외부의 네트워크 네임 스페이스를 가리킬 방법이 없습니다.

명령 줄 유틸리티가 제공하는 것보다 더 많은 유연성이 필요한 경우 시스템 호출을 사용하여 프로그램에서 직접 이름 공간을 관리해야합니다. 문서에 대해서는, 관련 매뉴얼 페이지를 참조하십시오 man 2 setns, man 2 unshare하고 man 7 namespaces.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관