예비
이 다음은 우분투 12.04에서 나를 위해 일했습니다. 이것을 테스트 할 때 방해하지 않도록 컴퓨터 방화벽을 비활성화해야합니다.
/ etc / default / qemu-kvm 파일은 원래 설치되어 있어야합니다.
당신은 있어야합니다 다리-utils를 QEMU-KVM 스위치 및 libvirt를-용지함이 설치되어 있어야합니다. 가상 머신을 사용하는 모든 사용자는 libvirtd 그룹에 추가되어야합니다.
더 이상 CAP_NET_ADMIN 기능을 추가 할 필요가 없습니다.
네트워크 설정
기본 네트워크 모드는 SLIRP라고도하는 사용자 모드입니다. 게스트 컴퓨터로 NAT 라우팅되는 사전 정의 된 virbr0 브리지를 사용합니다. NAT 라우팅은 커널의 ip_forwarding 기능 및 iptables를 사용 합니다. 브리지 모드는 (번호가없는) 이더넷 인터페이스가 연결되고 호스트와 게스트 모두 네트워크 인터페이스가있는 게스트에서 가상 브리지를 사용합니다.
다음 다이어그램은 차이점을 더 명확하게 할 수 있습니다.
다음과 같이 기본 사용자 네트워크가 어떻게 정의되는지 확인할 수 있습니다.
virsh net-dumpxml default
다음과 같은 방법으로 브리지 모드를 설정할 수 있습니다.
/ etc / network / interfaces (질문에서 언급 한 게시물의 브리징 부분에서) :
자동 소호
iface lo inet 루프백
#auto eth0
#iface eth0 inet dhcp
자동 eth0
iface eth0 inet 매뉴얼
자동 br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp 해제
bridge_fd 0
bridge_maxwait 0
재부팅; 무선 네트워킹이 활성화되어 있지 않은지 확인하십시오. 로 기본 IP 경로를 확인하십시오 ip route
. br0 인터페이스를 사용해야합니다.
NB이 변경이 이루어질 때 이더넷이 연결되지 않으면 이더넷 케이블을 연결하고 캐리어를 가져 오거나 2 분 동안 부팅이 중단되고 네트워크 기능이없는 것입니다 . eth0 인터페이스는 부팅이 정상적으로 진행되기 전에이 파일에 있어야합니다.
NB 일반적으로 여러 MAC 주소를 사용할 수 없기 때문에 eth0 대신 무선 네트워크를 사용할 수 없습니다 (브릿지에 두 번째 주소가 필요하다고 생각합니다).
또는 이더넷 사용을 비활성화하고 IP 주소가없고로 설정 한 기본 경로가 없는지 확인하십시오 ip route
. 그때:
sudo ifconfig eth0 0.0.0.0 up
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo ifconfig br0 up
sudo dhclient br0 &
여기에 고정 IP 주소를 제공하고 기본 경로 및 DNS 주소를 정의 할 수도 있습니다. 이 예제 dhclient
에서는이 작업을 수행합니다.
내 라우팅 테이블은 다음과 같습니다.
$ ip 경로 목록
192.168.1.1 dev br0 메트릭 100을 통한 기본값
169.254.0.0/16 dev br0 범위 링크 메트릭 1000
192.168.1.0/24 dev br0 프로토 커널 범위 링크 src 192.168.1.45
192.168.122.0/24 dev virbr0 프로토 커널 범위 링크 src 192.168.122.1
kvm 사용
그런 다음 브리지 된 kvm 시스템을 다음과 같이 부팅 할 수 있습니다.
$ sudo kvm -name Quantal -m 1024 -hda foo.qcow2 --soundhw ac97 -device virtio-net,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
이 -netdev tap
매개 변수는 sudo를 요구 사항으로 만듭니다. VM이 시작되면 qemu-kvm은 다음 명령을 실행합니다.
ifconfig vnet0 0.0.0.0 이상
brctl addif brctl 아 디프 br0 vnet0
이것은 / etc / qemu-ifup에 의해 수행됩니다.
위의 기본 경로는 해당 브리지 인터페이스를 사용하므로 VM의 vnet0 인터페이스가 br0 브리지에 추가됩니다. 없는 경우 탭 인터페이스가 virbr0 인터페이스에 추가됩니다. 인터넷에 연결되어 있지 않기 때문에 실험에서 NAT를 사용하여 게스트를 호스트 및 인터넷에 연결합니다. vnet0을 / etc / default / qemu-kvm의 특정 브리지로 보낼 수 있습니다. 아래 virt-manager를 사용하여 연결할 브리지를 명시 적으로 지정할 수 있습니다.
qemu-kvm이 발행 한 위의 명령과 -netdev tap,id=tunnel,ifname=vnet0
매개 변수로 인해 vm 가상 머신은 vnet0 터널에 연결되고 터널은 br0 브릿지에 연결됩니다.
이제 네트워크의 다른 컴퓨터에서이 게스트 VM으로 직접 ssh 할 수 있습니다.
내 호스트 ifconfig
(VM이 실행될 때 네트워크에 나타나는 vnet0 인터페이스에 유의하십시오) :
$ ifconfig
br0 링크 캡슐화 : 이더넷 HWaddr 00 : 1e : 33 : 88 : 07 : e5
inet addr : 192.168.1.45 Bcast : 255.255.255.255 마스크 : 255.255.255.0
inet6 주소 : fe80 :: 21e : 33ff : fe88 : 7e5 / 64 범위 : 링크
브로드 캐스트 실행 MULTICAST MTU : 1500 미터법 : 1
수신 패킷 : 6526 오류 : 0 삭제 : 0 오버런 : 0 프레임 : 0
TX 패킷 : 7543 오류 : 0 삭제 : 0 오버런 : 0 캐리어 : 0
충돌 : 0 txqueuelen : 0
수신 바이트 : 2712940 (2.7MB) TX 바이트 : 1071835 (1.0MB)
eth0 링크 캡슐화 : 이더넷 HWaddr 00 : 1e : 33 : 88 : 07 : e5
브로드 캐스트 실행 MULTICAST MTU : 1500 미터법 : 1
RX 패킷 : 7181 오류 : 0 삭제 : 0 오버런 : 0 프레임 : 0
TX 패킷 : 7740 오류 : 0 삭제 : 0 오버런 : 0 캐리어 : 0
충돌 : 0 txqueuelen : 1000
수신 바이트 : 2974585 (2.9 MB) TX 바이트 : 1096580 (1.0 MB)
인터럽트 : 43 기본 주소 : 0x6000
lo 링크 encap : 로컬 루프백
inet addr : 127.0.0.1 마스크 : 255.0.0.0
inet6 addr : :: 1/128 범위 : 호스트
루프백 실행 MTU : 16436 메트릭 : 1
RX 패킷 : 10 오류 : 0 삭제 : 0 오버런 : 0 프레임 : 0
TX 패킷 : 10 오류 : 0 삭제 : 0 오버런 : 0 캐리어 : 0
충돌 : 0 txqueuelen : 0
수신 바이트 : 664 (664.0B) TX 바이트 : 664 (664.0B)
vnet0 링크 캡슐화 : 이더넷 HWaddr ca : 0c : 73 : c3 : bc : 45
inet6 주소 : fe80 :: c80c : 73ff : fec3 : bc45 / 64 범위 : 링크
브로드 캐스트 실행 MULTICAST MTU : 1500 미터법 : 1
RX 패킷 : 226 오류 : 0 삭제 : 0 오버런 : 0 프레임 : 0
TX 패킷 : 429 오류 : 0 삭제 : 0 오버런 : 0 캐리어 : 0
충돌 : 0 txqueuelen : 500
수신 바이트 : 26919 (26.9KB) TX 바이트 : 58929 (58.9KB)
virbr0 링크 캡슐화 : 이더넷 HWaddr d6 : 18 : 22 : db : ff : 93
inet addr : 192.168.122.1 Bcast : 192.168.122.255 마스크 : 255.255.255.0
방송 MULTICAST MTU : 1500 미터법 : 1
RX 패킷 : 0 오류 : 0 삭제 : 0 오버런 : 0 프레임 : 0
TX 패킷 : 0 오류 : 0 삭제 : 0 오버런 : 0 캐리어 : 0
충돌 : 0 txqueuelen : 0
수신 바이트 : 0 (0.0B) TX 바이트 : 0 (0.0B)
VM을 실행하는 동안 내 브리지 구성 :
$ brctl 쇼
브릿지 이름 브릿지 ID STP 사용 가능 인터페이스
br0 8000.001e338807e5 eth0 없음
vnet0
virbr0 8000.000000000000 예
가상 시스템의 vnet0 인터페이스와 eth0 인터페이스는 모두 br0 브리지에 연결되어 있습니다.
그리고 MAC은 br0 인터페이스에 있습니다 :
$ brctl showmacs br0
포트 아니 맥 가산기가 로컬입니까? 노화 타이머
1 00 : 05 : 5d : cf : 64 : 61 아니오 2.54
1 00 : 19 : d2 : 42 : 5d : 3f 아니오 36.76
1 00 : 19 : df : da : af : 7c 아니오 2.86
1 00 : 1e : 33 : 88 : 07 : e5 예 0.00
1 00 : 60 : 0f : e4 : 17 : d6 아니오 0.79
2 52 : 54 : 00 : 12 : 34 : 56 아니 0.80
1 58 : 6d : 8f : 17 : 5b : c0 아니오 5.91
1 c8 : aa : 21 : be : 8d : 16 아니오 167.69
2 ca : 0c : 73 : c3 : bc : 45 예 0.00
br0 인터페이스는 호스트 컴퓨터를 게스트가 사용하는 동일한 브리지에 연결합니다.
를 사용하여 NAT가 아닌 자신의 네트워크로 라우팅 된 브리지인지 확인할 수 있습니다 traceroute 8.8.8.8
. 첫 번째 노드가 게스트의 IP 주소가 아닌 네트워크 라우터 인 경우 네트워크가 올바르게 작동해야합니다.
이 설명서를 참조하십시오 .
virt-manager
virt-manager
및 을 설치했는지 확인하십시오 hal
. hal
패키지에 대한 제안 의존성입니다 virt-manager
및 만들거나 손님을 편집 할 때 시스템의 네트워크 구성을 결정하는 데 사용됩니다.
br0 브리지를 위와 같이 정의하면서 virt-manager를 사용하여 다음과 같이 가상 머신을 생성했습니다.
이 게스트로부터 홈 네트워크의 나머지 부분과 인터넷으로 직접 갈 수있었습니다. 또한 내 홈 네트워크의 다른 (호스트가 아닌 비 게스트) 우분투 컴퓨터에서 ssh를 사용할 수있었습니다.
kvm
virt-manager가 실행 하는 매우 긴 명령 은 다음과 같습니다 (EApubs 또는 다른 문제가있는 사람과 비교).
/ usr / bin / kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1, 소켓 = 1, 코어 = 1, 스레드 = 1-명확한 이름 -uuid f057a729-eda6-4b85-84dc-f100c9ae3789- nodefconfig -nodefaults -chardev 소켓, id = charmonitor, path = / var / lib / libvirt / qemu / precise.monitor, server, nowait -mon chardev = charmonitor, id = monitor, mode = control -rtc base = utc -no- 종료-드라이브 파일 = / media / natty / home / gruber / ubuntu-kvm / tmpW8gSGB.qcow2, if = none, id = drive-ide0-0-0, format = qcow2-장치 ide-drive, bus = ide.0 , unit = 0, 드라이브 = drive-ide0-0-0, id = ide0-0-0, bootindex = 1 -netdev tap, fd = 18, id = hostnet0 -device rtl8139, netdev = hostnet0, id = net0, mac = 52 : 54 : 00 : 0e : da : 9b, bus = pci.0, addr = 0x3 -chardev pty, id = charserial0-장치 isa-serial, chardev = charserial0, id = serial0 -usb -vnc 127.0.0.1 : 0 -vga cirrus-장치 intel-hda, id = sound0, bus = pci.0, addr = 0x4 -device hda-duplex, id = sound0-codec0, bus = sound0.0,cad = 0-장치 virtio-balloon-pci, id = balloon0, bus = pci.0, addr = 0x5
/etc/libvirt/qemu/quantal.xml에있는 가상 머신 설명의 네트워크 부분은 다음과 같습니다.
<interface type='bridge'>
<mac address='52:54:00:b0:8e:aa'/>
<source bridge='br0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
이 링크 에 따르면 성능 및 안정성을 위해 네트워크 장치 모델을로 설정하는 것이 가장 좋을 수 있습니다 virtio
. virt-viewer에서 i 버튼 을 누르고 NIC 설정으로 이동하여 "장치 모델"을 설정하면됩니다. "에 virtio
. 다음 줄을 추가하여 위의 XML에 추가 할 수도 있습니다.
<model type='virtio'/>
요약해서 말하자면
이 12.04에 걸린 모든 것은 :
- virt-manager, bridge-utils, qemu-kvm 및 관련 패키지 설치
- kvm을 사용하려는 각 사용자가 libvirtd 그룹에 있는지 확인하십시오.
- 위와 같이 / etc / network / interfaces 정의하기 (인용 된 기사와 일치)
- 재부팅하여 이더넷이 연결되어 있고 무선 (있는 경우)이 꺼져 있는지 확인하십시오.
- 예를 들어을 사용하여 이미지에 대해 kvm을 직접 실행
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
하거나 virt-manager를 사용하여 가상 머신을 생성하고 4 단계-> 고급 옵션 패널에서 네트워크 브리지 br0을 지정하십시오.
네트워킹, 기능, 템플릿 또는 구성에 대한 추가 변경이 필요하지 않았습니다.
새 게스트의 서비스를 인터넷에 노출 시키려면 다음을 수행해야합니다.
- 필요한 방화벽 서비스를 준비하고 구성하십시오.
- 게스트 구성 또는 DHCP 서비스에서 고정 주소를 할당하십시오.
- NAT 라우터를 사용하는 경우 서비스의 포트를 열어 게스트의 IP 주소로 향하게합니다.
호스트 컴퓨터의 방화벽 서비스를 테스트하고 다시 활성화해야합니다. 트래픽을 게스트에게 전달하려면 항목이 필요할 수 있습니다.
참조 https://help.ubuntu.com/community/KVM/Installation , https://help.ubuntu.com/community/KVM/Networking 및 https://help.ubuntu.com/12.04/serverguide/libvirt. html .
ifconfig
,brctl show
,brctl showmacs br0
,와ip route
. 게스트에서 :ifconfig
,ip route
,ping 8.8.8.8
,ping <your internet router>
,와traceroute 8.8.8.8
. 나는 당신이하는 방식으로 kvm을 구성했다고 말할 수는 없지만kvm
명령을 사용하여 작동하도록 브리징했습니다 . 무선으로 연결을 끊어야 호스트가 인터넷에 연결할 수 있으며 인용 한대로 이더넷을 사용하여 인터넷에 연결해야합니다.