virt-install이 호스트의 이더넷 인터페이스를 작업의 이더넷 인터페이스에 연결하는 방법을 이해하십니까?

virt-install이 호스트의 이더넷 인터페이스를 작업의 이더넷 인터페이스에 연결하는 방법을 이해하십니까?

데비안 가상 머신을 설치하는 방법은 virt-install게스트에게 다음과 같은 이더넷 인터페이스를 제공하는 것입니다 vnet0.

$ virsh domiflist git-server
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      bridge     br-ext     rtl8139     52:54:00:a8:32:d7

$ 

이는 명령줄을 확인하면 확인할 수 있습니다 qemu.

-netdev tap,fd=27,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:a8:32:d7,bus=pci.0,addr=0x2

그러나 호스트에 동일한 이름을 가진 TAP 장치가 있습니다 vnet0.

$ ethtool -i vnet0                                                                                  
driver: tun
version: 1.6
firmware-version: 
expansion-rom-version: 
bus-info: tap
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
$ 

..그러나 MAC 주소는 다릅니다.

$ ip l sh vnet0                                                                                     
56: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br-ext state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether fe:54:00:a8:32:d7 brd ff:ff:ff:ff:ff:ff
$ 

호스트의 가상머신 인터페이스와 TAP 장치는 어떻게 연결되어 있나요? 아니면 TAP 장치가 하나만 있습니까? 그렇다면 MAC 주소는 어떻게 다릅니까?

답변1

호스트의 가상머신 인터페이스와 TAP 장치는 어떻게 연결되어 있나요?

qemu(또는 실행된 래퍼 qemu또는 다른 에뮬레이터) 먼저 /dev/net/tun장치를 엽니다.멀티플렉서. ioctl(TUNSETIFF)필드에 TAP 인터페이스 이름으로 fd를 호출하여 TAP 인터페이스에 첨부 할 수 있는 파일 설명자를 반환합니다 ifreq->ifr.name.

해당 이름의 TAP 인터페이스가 이미 이런 방식으로 연결되어 있으면 작업이 실패합니다.

그러면 fd를 사용하여 원격 측에서 수신한 대로 TAP 인터페이스에 나타날 패킷을 쓰고 TAP 인터페이스를 통해 커널에 의해 라우팅된 패킷을 읽을 수 있습니다.

호출 프로세스에 기능 CAP_NET_ADMIN(예: is root)이 있고 해당 이름의 TAP 인터페이스가 아직 없는 경우 인터페이스가 자동으로 생성됩니다. 이름을 지정하지 않으면 첫 번째 무료 이름이 사용됩니다.

실제로 이는 /dev/net/tun멀티플렉서입니다. 즉, open()핸들을 매번 다른 "원격 절반"으로 반환한다는 의미입니다. 이 "원격 절반"은 단일 TAP 인터페이스에 연결할 수 있습니다.

또한 다른 파일 설명자와 마찬가지로 해당 프로그램이 이러한 방식으로 사용할 수 있는 경우 다른 프로그램에 전달할 수 있습니다 ( qemuoptions 와 마찬가지로).-netdev tap,fd=FD

opentap이 문서에서 매우 간단한 함수의 예를 확인하세요.답변.

자세한 내용 + 샘플 코드는 다음을 참조하세요.톤타푸.txt커널 문서에서.

아니면 TAP 장치가 하나만 있습니까? 그렇다면 MAC 주소는 어떻게 다릅니까?

아니요. 각 클라이언트마다 별도의 장치가 있습니다. 여러 TAP 장치를 동일한 인터페이스에 연결하는 방법은 호스트에서 브리지를 사용하는 것입니다.

그러나 호스트에는 vnet0 이름은 같지만 MAC 주소는 다른 TAP 장치가 있습니다.

호스트 측과 게스트 측의 인터페이스는 완전히 다릅니다. 이를 가상 UTP 케이블로 생각하십시오. 양쪽 끝에 있는 각 장치에는 자체 MAC이 있습니다.

-device ...,mac=...시뮬레이션된 장치의 하드웨어 주소 설정손님, 호스트의 TAP 장치가 아닌.

관련 정보