리눅스 네임스페이스, 네트워크 네임스페이스에서 인터넷에 연결하는 방법은 무엇입니까?

리눅스 네임스페이스, 네트워크 네임스페이스에서 인터넷에 연결하는 방법은 무엇입니까?

Linux 네트워크 네임스페이스를 테스트하고 싶습니다.

현재 문제는 네임스페이스에서 인터넷에 연결할 수 없다는 것입니다.

이것은 내 명령입니다:

1 네트워크 네임스페이스 netns1을 생성하고, veth(A 및 B) 쌍을 생성하고 B를 네임스페이스로 설정합니다.

ip netns add netns1
ip link add A type veth peer name B
ip link set B netns netns1

2 Veth A를 연결하는 브리지를 만듭니다.

brctl addbr bridge0
ip addr add 172.17.42.1/16 dev bridge0
ip link set dev bridge0 up
brctl addif bridge0 A
ip link set A up

3 네임스페이스에서 네트워크를 설정합니다.

ip netns exec netns1 ip link set dev B name eth0
ip netns exec netns1 ip link set eth0 up
ip netns exec netns1 ip addr add 172.17.42.99/16 dev eth0
ip netns exec netns1 ip route add default via 172.17.42.1

Google에 ping을 실행하면 다음과 같은 메시지가 표시됩니다.

ping: unknown host www.google.com

이 네임스페이스에서 인터넷에 어떻게 연결합니까?

다음은 몇 가지 추가 세부정보입니다.

여기에 이미지 설명을 입력하세요.

여기에 이미지 설명을 입력하세요.

여기에 이미지 설명을 입력하세요.

여기에 이미지 설명을 입력하세요.

감사해요

업데이트 1

NAT 설정도 시도했습니다.

iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -d 0.0.0.0/0 -j MASQUERADE

하지만 주인은 아직 모른다.

답변1

네트워크 네임스페이스를 다른 컴퓨터로 생각하십시오. veth 쌍은 두 개의 이더넷 카드 사이에 크로스오버 케이블이 있는 것으로 생각하십시오.

네트워크 네임스페이스를 인터넷에 연결하는 세 가지 주요 방법은 NAT, 기존 IP 라우팅, 이더넷 브리징입니다.

NAT는 모든 유형의 업스트림 인터넷 연결에서 작동하고 업스트림 네트워크의 협력이 필요하지 않기 때문에 일반적으로 설정이 가장 쉽습니다.

NAT가 작동하려면 몇 가지 작업이 필요합니다.

  1. 기본 게이트웨이는 보조 네트워크 네임스페이스에 설정되어야 합니다(이미 설정한 것으로 보입니다).
  2. 기본 네트워크 네임스페이스에서 IP 전달을 활성화해야 합니다(아직 설정 방법을 보여주지 않았습니다).
  3. 기본 네트워크 네임스페이스의 iptables 규칙은 트래픽 통과를 허용해야 합니다(커널 측에서는 기본적으로 괜찮지만 일부 방화벽 소프트웨어에는 전달 차단을 설정하는 규칙이 있을 수 있습니다).
  4. 기본 네트워크 네임스페이스에 적절한 SNAT 또는 가장 규칙이 있어야 합니다(이미 수행한 것으로 나타남).

또한 보조 네트워크 네임스페이스의 프로그램에서 적절한 /etc/resolv.conf를 사용할 수 있는지 확인해야 합니다. 보조 네트워크 네임스페이스에서 로컬 루프백 인터페이스를 시작하더라도(이렇게 해야 함) 여전히 각 네트워크 네임스페이스에 대한 로컬 인터페이스라는 점을 명심하세요.

처음 네트워크를 설정할 때 IP 주소로 ping/추적 경로를 지정하여 일반 연결 문제와 이름 확인 문제를 구분하는 것이 좋습니다.

답변2

가능한 네트워크 문제를 진단하려는 경우,아니요FQDN을 ping해 보세요. 도대체 핑을 전혀 사용하지 마십시오.

이 시도:traceroute -n 8.8.8.8

이렇게 하면 다음 두 가지 이유로 더 유용한 정보가 생성됩니다.

  1. 작동하는 확인자가 필요하지 않습니다(인터넷에 액세스할 수 없는 경우 DNS 조회를 수행할 수 없으므로 "알 수 없는 호스트"가 표시되지만 확인자가 작동하지 않으면 정확한 호스트 이름을 얻을 수 있음). 연결이 양호하면 동일한 답변을 얻을 수 있습니다).

  2. 8.8.8.8로 가야 한다고 생각되는 경로를 따라 각 호스트로부터 응답을 얻으려고 시도할 것입니다.어디단순히 연결 오류가 아닌~에 관계없이물론.

답변3

ping: unknown host www.google.com아래에 언급된 네트워크 연결 문제로 인해 이름 확인에 실패 했다고 가정합니다 . 그러나 IP 주소에 ping을 보내 이것이 단순한 DNS 문제가 아닌지 다시 확인하고 싶을 수도 있습니다.

제공하신 정보에 따르면 브리지에 물리적 인터페이스를 추가하지 않은 것 같습니다. 브리지에 물리적 인터페이스가 없으면 해당 브리지의 트래픽이 나머지 네트워크에 도달할 수 없습니다.

브리지에 물리적 인터페이스를 추가하는 또 다른 방법은 IP 전달을 켜고 .net을 사용하여 NAT 규칙을 설정하는 것입니다 iptables.

답변4

lo 인터페이스를 설정해 보셨나요? lo가 시작되지 않으면 네임스페이스에서 네트워킹이 작동하지 않는다는 것을 알았으므로 다음을 시도해 보십시오.

ip netns exec netns1 IP 링크 설정 lo up

관련 정보