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가 작동하려면 몇 가지 작업이 필요합니다.
- 기본 게이트웨이는 보조 네트워크 네임스페이스에 설정되어야 합니다(이미 설정한 것으로 보입니다).
- 기본 네트워크 네임스페이스에서 IP 전달을 활성화해야 합니다(아직 설정 방법을 보여주지 않았습니다).
- 기본 네트워크 네임스페이스의 iptables 규칙은 트래픽 통과를 허용해야 합니다(커널 측에서는 기본적으로 괜찮지만 일부 방화벽 소프트웨어에는 전달 차단을 설정하는 규칙이 있을 수 있습니다).
- 기본 네트워크 네임스페이스에 적절한 SNAT 또는 가장 규칙이 있어야 합니다(이미 수행한 것으로 나타남).
또한 보조 네트워크 네임스페이스의 프로그램에서 적절한 /etc/resolv.conf를 사용할 수 있는지 확인해야 합니다. 보조 네트워크 네임스페이스에서 로컬 루프백 인터페이스를 시작하더라도(이렇게 해야 함) 여전히 각 네트워크 네임스페이스에 대한 로컬 인터페이스라는 점을 명심하세요.
처음 네트워크를 설정할 때 IP 주소로 ping/추적 경로를 지정하여 일반 연결 문제와 이름 확인 문제를 구분하는 것이 좋습니다.
답변2
가능한 네트워크 문제를 진단하려는 경우,아니요FQDN을 ping해 보세요. 도대체 핑을 전혀 사용하지 마십시오.
이 시도:traceroute -n 8.8.8.8
이렇게 하면 다음 두 가지 이유로 더 유용한 정보가 생성됩니다.
작동하는 확인자가 필요하지 않습니다(인터넷에 액세스할 수 없는 경우 DNS 조회를 수행할 수 없으므로 "알 수 없는 호스트"가 표시되지만 확인자가 작동하지 않으면 정확한 호스트 이름을 얻을 수 있음). 연결이 양호하면 동일한 답변을 얻을 수 있습니다).
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