가상 네트워크 용어: NAT 또는 Route-Bridge는 모순입니까?

가상 네트워크 용어: NAT 또는 Route-Bridge는 모순입니까?

p.에 따르면. 166개KVM 가상화 마스터하기Chirammal et al.(Packt, 2016)이 제안한 “Virtual Network” 탭가상 관리자세 가지 유형의 가상 네트워크를 만들 수 있습니다.

  • NATed
  • 라우팅
  • 외딴

해당 탭에 링크된 네트워크 생성 대화를 보면 대략 이 말이 맞는 것 같습니다.

기본적으로 Virt-Manager는 실행 중인 PC에서 NAT 가상 네트워크를 생성할 수 있습니다.데비안 9 "스트레칭"sudo brctl show, 결과가 표시됩니다 (개인 정보 보호를 위해 브리지 ID가 수정됨).

bridge name bridge id       STP enabled interfaces
virbr0      8000.5254009dcac5   yes     virbr0-nic

이는 다음과 같은 몇 가지 질문을 제기합니다.

  • 만약 virbr0그것이라면다리, 그렇다면 어떻게 역할을 할 수 있습니까?네트워크 주소 변환?
  • virbr0Virt-Manager가 가상 네트워크를 생성하도록 허용하면 해당 네트워크만 생성됩니까, 아니면 다른 것(예: virbr0연결된 가상 NAT 라우터)이 생성됩니까?
  • 추가 질문:호스트에 LAN에 연결된 물리적(이더넷) 네트워크 카드가 있고 두 개의 게스트 가상 머신 VM1 및 VM2가 여기에 연결되어 있다고 가정하면 virbr0네트워크 토폴로지는 어떤 모습입니까?

부록

지금까지 의견과 답변에서 언급된 iptables 및 ebtables의 상태는 다음과 같습니다.

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

$ sudo iptables -t nat -vL
Chain PREROUTING (policy ACCEPT 1556 packets, 130K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 726 packets, 82025 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 15148 packets, 953K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 15148 packets, 953K bytes)
 pkts bytes target     prot opt in     out     source               destination         
   84 11805 RETURN     all  --  any    any     192.168.122.0/24     base-address.mcast.net/24 
    0     0 RETURN     all  --  any    any     192.168.122.0/24     255.255.255.255     
  267 16020 MASQUERADE  tcp  --  any    any     192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
  206 15656 MASQUERADE  udp  --  any    any     192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
    1    84 MASQUERADE  all  --  any    any     192.168.122.0/24    !192.168.122.0/24    


$ sudo ebtables -L
Bridge table: filter

Bridge chain: INPUT, entries: 0, policy: ACCEPT

Bridge chain: FORWARD, entries: 0, policy: ACCEPT

Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

답변1

네트워크 브리지 라면 virbr0어떻게 NAT 역할도 할 수 있을까요?

글쎄요, 그렇지 않습니다. 하지만 시스템 자체에는 브리지에 포트가 있고, 브리지에 IP 주소가 설정되어 있으면 브리지와 다른 인터페이스 간에 라우팅/전달/NAT가 가능합니다.

eth0예를 들어 업링크와 브리지 VM이 있는데 다음과 virbr0같이 표시된다고 가정해 보겠습니다 . vmnic0그러면 다음과 같은 결과를 얻게 됩니다:

      ^
      |
    eth0 (192.0.2.111 - your external IP)
      |
[[ routing / NAT ]]
      |
   virbr0 (10.0.1.1 - this system on the VM bridge)
      |
   +--+-----+-----+-------+       (the bridging part)
   |        | ... |       |
  vmnic0               vmnicN

이것은 eth0다리의 일부가 아닙니다. 그렇다면 가상 머신은 라우팅 없이 외부 네트워크에 브리지됩니다. ( vmnics는 다른 방식으로 이름이 지정되었을 수 있습니다. 사용된 명명 규칙이 기억나지 않습니다...)

ifconfig또는 ip addr브리지 IP를 표시할 수 있어야 하며 iptables -t nat -vLiptables NAT 규칙을 확인해야 합니다.


이제 virbr0-nic귀하의 예에 있는 것은 브리지에 일정한 MAC 주소를 제공하도록 설계된 가상 장치입니다. ~에 따르면libvirt-users메일링 리스트에 대한 설명:

이는 커널 버그/기능에 대한 해결 방법입니다. 브리지의 MAC는 연결된 첫 번째 NIC에서 복사됩니다. 따라서 브리지에서 모든 인터페이스를 분리한 다음 하나의 인터페이스만 연결하면 브리지는 이전 MAC을 잃고 연결된 인터페이스와 동일한 새 MAC을 얻습니다.

따라서 libvirt가 가상 브리지에 MAC이 있는지 확인해야 하는 경우 가상 장치를 생성하고(트래픽을 라우팅하지는 않음) 이를 가상 브리지에 연결합니다.

관련 정보