내 시나리오는 다음과 같습니다. 자체 네트워크 인터페이스를 사용하여 별도의 네임스페이스에서 프로그램을 실행할 수 있기를 원합니다. 하지만 물리적 네트워크 인터페이스를 통해 인터넷에 액세스할 수도 있기를 원합니다. 이것은 지금까지 내 코드입니다.
ip netns add private_ns
ip link add link eth1 name eth1.100 type vlan id 100
ip link set eth1.100 netns private_ns
ip netns exec private_ns ip addr add 10.1.1.1/24 dev eth1.100
ip netns exec private_ns ip link set eth1.100 up
그런 다음 다음을 시도합니다.
ip netns exec private_ns ping 8.8.8.8
나는 얻다connect: Network is unreachable
답변1
각 네트워크 네임스페이스는 네트워크 스택의 별도 논리적 복사본입니다. 따라서 네트워크 네임스페이스를 별도의 시스템으로 처리해야 합니다.
현재 컴퓨터를 통해 새 컴퓨터를 인터넷에 연결하려면 다음이 필요합니다.
- 각 컴퓨터에서 사용하지 않는 네트워크 카드를 선택합니다(또는 새 카드를 설치합니다).
- 네트워크 케이블로 함께 연결하십시오.
- 이더넷 브리징, 일반 IP 라우팅 또는 NAT 중에서 선택하세요.
- 4a. 이더넷 브리징의 경우 기존 컴퓨터의 새 네트워크 카드를 적절한 브리지에 추가하고 브리지가 있는 서브넷의 IP를 보조 컴퓨터의 네트워크 카드에 제공합니다.
- 4b. 레거시 IP 라우팅의 경우 새 링크에 대한 IP 블록을 선택합니다. 블록에 인터페이스 IP를 할당하고, 기존 시스템에서 IP 전달이 활성화되어 있는지 확인하고, 나머지 네트워크가 새 서브넷을 인식하는지 확인하고, iptables 규칙(있는 경우)이 트래픽 흐름을 허용하는지 확인하세요.
- 4c. NAT의 경우 새 링크에 대한 IP 블록을 선택합니다. 블록에 인터페이스 IP를 할당하고, 기존 시스템에서 IP 전달이 활성화되어 있는지 확인하고, IPtables 규칙이 트래픽 흐름을 허용하는지 확인하고, 새 서브넷에서 외부 호스트로의 트래픽에 대한 SNAT 또는 MASQURADE 규칙을 설정합니다.
- 새 컴퓨터에 적절한 기본 게이트웨이를 설정합니다.
네트워크 네임스페이스를 사용할 때도 마찬가지입니다.
- 기본 네트워크 네임스페이스에 veth 쌍을 만듭니다.
- veth 쌍의 한쪽 끝을 보조 네트워크 네임스페이스로 이동합니다.
- 이더넷 브리징, 일반 IP 라우팅 또는 NAT 중에서 선택하세요.
- 4a. 이더넷 브리징의 경우 기본 네트워크 네임스페이스의 새 veth를 적절한 브리지에 추가하고 새 네트워크 네임스페이스의 veth에 브리지 서브넷의 IP를 제공합니다.
- 4b. 레거시 IP 라우팅의 경우 새 링크에 대한 IP 블록을 선택합니다. 블록에 인터페이스 IP를 할당하고, 기존 시스템에서 IP 전달이 활성화되어 있는지 확인하고, 나머지 네트워크가 새 서브넷을 인식하는지 확인하고, iptables 규칙(있는 경우)이 트래픽 흐름을 허용하는지 확인하세요.
- 4c. NAT의 경우 새 링크에 대한 IP 블록을 선택합니다. 블록에 인터페이스 IP를 할당하고, 기존 시스템에서 IP 전달이 활성화되어 있는지 확인하고, IPtables 규칙이 트래픽 흐름을 허용하는지 확인하고, 새 서브넷에서 외부 호스트로의 트래픽에 대한 SNAT 또는 MASQURADE 규칙을 설정합니다.
- 보조 네트워크 네임스페이스에 적절한 기본 게이트웨이를 설정합니다.
(보기 흉한 서식에 대해 죄송합니다. 저보다 마크다운 기술이 더 많으면 자유롭게 수정하세요.)