네트워크 네임스페이스( )와 링크 ip netns add
쌍 도 만들었습니다 . 루트 네임스페이스의 물리적 링크는 로 명명됩니다 . 루트 네임스페이스와 새로 생성된 네임스페이스에 있습니다.veth
virt-a
virt-b
eth0
virt-a
virt-b
IP 주소:
eth0: 192.168.1.100/24
virt-a: 192.168.1.101/24
virt-b: 192.168.1.102/24
루트 네임스페이스의 라우팅 테이블:
default via 192.168.1.1 dev eth0
192.168.1.102 dev virt-a proto kernel scope link src 192.168.1.101
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
새 네임스페이스의 라우팅 테이블:
default dev virt-b scope link src 192.168.1.102
루트 네임스페이스에서 192.168.1.102를 ping할 수 있고 새 네임스페이스에서 192.168.1.100 및 192.168.1.101을 ping할 수 있습니다. 그러나 LAN(예: 192.168.1.1)에 있는 다른 물리적 시스템을 ping할 수 없습니다.
를 사용하여 들어오는 패킷을 루트 네임스페이스에 기록 iptables -t raw -A PREROUTING -i virt-a -j LOG --log-prefix "[raw-PRE] " --log-level 7
하지만 루트 네임스페이스로 패킷이 들어오지 않습니다.
veth 또는 네임스페이스에 대해 어떤 오해가 있습니까?
편집하다:
나는 veth가 어떻게 작동하는지 오해했다고 생각합니다. 루트 네임스페이스에 브리지를 생성하고 이를 두 네임스페이스의 마스터로 만들어 새 네임스페이스에서 외부 장치를 ping할 수 있습니다 eth0
.virt-a
왜 이런거야? 두 개의 물리적 네트워크 카드가 있고 하나에서 들어오는 트래픽을 수신하는 경우 브리징 없이 다른 카드로 전달할 수 있습니다. veth도 같은 방식으로 작동하면 안 되나요?
iproute의 다양한 링크 유형에 대해 더 자세히 알아볼 수 있는 곳이 있나요? 문서를 찾는 데 문제가 있습니다.
답변1
오해는 네트워크 네임스페이스가 아니라 라우팅에 관한 것입니다.다른IPv4 네트워크.
여기서는 동일한 네트워크에 속하는 IP를 라우팅하려고 합니다. from 192.168.1.0/24
to 192.168.1.0/24
: 테스트 사례에 적합하지 않은 특별한 설정(예: 프록시 arp 등)이 지정되지 않는 한 전혀 라우팅되지 않습니다.
192.168.2.0/24
veth-* 네트워크 와 같은 다른 IP LAN을 사용하십시오 . 또한 네트워크 네임스페이스의 경로는 "장치"뿐만 아니라 veth-a의 IP를 기본 게이트웨이로 사용해야 합니다. 외부 시스템이 다른 개인 네트워크에 대해 알지 않고도 올바르게 상호 작용할 수 있도록 iptables를 사용하여 NAT 규칙을 추가하고 IP 전달을 활성화할 수도 있습니다.