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
그것이라면다리, 그렇다면 어떻게 역할을 할 수 있습니까?네트워크 주소 변환? virbr0
Virt-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
다리의 일부가 아닙니다. 그렇다면 가상 머신은 라우팅 없이 외부 네트워크에 브리지됩니다. ( vmnic
s는 다른 방식으로 이름이 지정되었을 수 있습니다. 사용된 명명 규칙이 기억나지 않습니다...)
ifconfig
또는 ip addr
브리지 IP를 표시할 수 있어야 하며 iptables -t nat -vL
iptables NAT 규칙을 확인해야 합니다.
이제 virbr0-nic
귀하의 예에 있는 것은 브리지에 일정한 MAC 주소를 제공하도록 설계된 가상 장치입니다. ~에 따르면libvirt-users
메일링 리스트에 대한 설명:
이는 커널 버그/기능에 대한 해결 방법입니다. 브리지의 MAC는 연결된 첫 번째 NIC에서 복사됩니다. 따라서 브리지에서 모든 인터페이스를 분리한 다음 하나의 인터페이스만 연결하면 브리지는 이전 MAC을 잃고 연결된 인터페이스와 동일한 새 MAC을 얻습니다.
따라서 libvirt가 가상 브리지에 MAC이 있는지 확인해야 하는 경우 가상 장치를 생성하고(트래픽을 라우팅하지는 않음) 이를 가상 브리지에 연결합니다.