veth 링크를 통해 netns에서 라우팅

veth 링크를 통해 netns에서 라우팅

네트워크 네임스페이스( )와 링크 ip netns add쌍 도 만들었습니다 . 루트 네임스페이스의 물리적 링크는 로 명명됩니다 . 루트 네임스페이스와 새로 생성된 네임스페이스에 있습니다.vethvirt-avirt-beth0virt-avirt-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/24to 192.168.1.0/24: 테스트 사례에 적합하지 않은 특별한 설정(예: 프록시 arp 등)이 지정되지 않는 한 전혀 라우팅되지 않습니다.

192.168.2.0/24veth-* 네트워크 와 같은 다른 IP LAN을 사용하십시오 . 또한 네트워크 네임스페이스의 경로는 "장치"뿐만 아니라 veth-a의 IP를 기본 게이트웨이로 사용해야 합니다. 외부 시스템이 다른 개인 네트워크에 대해 알지 않고도 올바르게 상호 작용할 수 있도록 iptables를 사용하여 NAT 규칙을 추가하고 IP 전달을 활성화할 수도 있습니다.

관련 정보