KVM 브리지 네트워크가 작동하지 않습니다


23

이 안내서에 따라 우분투 서버에 KVM을 설치했습니다 : https://help.ubuntu.com/community/KVM/Installation

그런 다음 여기에 표시된대로 브리지 된 네트워크를 준비하십시오. https://help.ubuntu.com/community/KVM/Networking

그런 다음 virt-manager를 사용하여 가상 머신을 생성했습니다. 여러 번 시도했지만 게스트가 네트워크에 연결하지 못했습니다! 어떤 도움?

ifconfig :

      br0       Link encap:Ethernet  HWaddr d0:27:88:b0:e4:38  
                inet addr:192.168.20.100  Bcast:192.168.20.255  Mask:255.255.255.0
                inet6 addr: fe80::d227:88ff:feb0:e438/64 Scope:Link
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:62 errors:0 dropped:0 overruns:0 frame:0
                TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0 
                RX bytes:10493 (10.4 KB)  TX bytes:8433 (8.4 KB)

      eth0      Link encap:Ethernet  HWaddr d0:27:88:b0:e4:38  
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:62 errors:0 dropped:0 overruns:0 frame:0
                TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000 
                RX bytes:11361 (11.3 KB)  TX bytes:8479 (8.4 KB)
                Interrupt:41 

      lo        Link encap:Local Loopback  
                inet addr:127.0.0.1  Mask:255.0.0.0
                inet6 addr: ::1/128 Scope:Host
                UP LOOPBACK RUNNING  MTU:16436  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0 
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

      virbr0    Link encap:Ethernet  HWaddr 5a:8c:57:95:af:3b  
                inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
                UP BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0 
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

brctl 쇼 :

 bridge name    bridge id      STP enabled    interfaces
 br0       8000.d02788b0e438   no        eth0
 virbr0         8000.000000000000   yes  

brctl showmacs br0 :

 port no   mac addr       is local? ageing timer
   1  5c:d9:98:67:b6:28   no          48.33
   1  d0:27:88:b0:e4:38   yes          0.00
   1  e0:2a:82:f9:6c:09   no           0.00

IP 경로 :

 default via 192.168.20.1 dev br0  metric 100 
 192.168.20.0/24 dev br0  proto kernel  scope link  src 192.168.20.100 
 192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1

* 손님에서 * 손님 이 정보를 붙여 넣을 수 없으므로 복사 할 수 없었습니다. DHCP에서 IP를 얻지 못했습니다. 수동으로 설정 한 후에도 작동하지 않습니다.


다음 명령의 출력을 제공 할 것을 제안 할 수 있습니까? 호스트 : 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명령을 사용하여 작동하도록 브리징했습니다 . 무선으로 연결을 끊어야 호스트가 인터넷에 연결할 수 있으며 인용 한대로 이더넷을 사용하여 인터넷에 연결해야합니다.
John S Gruber

@JohnSGruber 방금 요청한 정보를 추가했습니다. 그러나 손님에게 정보를 붙여 넣을 수 없었습니다. DHCP에서 IP를 얻지 못했습니다. 수동으로 설정 한 후에도 작동하지 않습니다.
THpubs

brctl showmacs br0위 목록에 게스트에게 할당 한 MAC 주소가 있습니까?
존 S Gruber

나는 .. 수동으로 맥을 추가 ..하지만 내가 그것을 가지고 맥을 확인하지 않았다
THpubs

@JohnSGruber 아니요 여기에 해당 MAC이 표시되지 않습니다!
THpubs

답변:


22

예비

이 다음은 우분투 12.04에서 나를 위해 일했습니다. 이것을 테스트 할 때 방해하지 않도록 컴퓨터 방화벽을 비활성화해야합니다.

/ etc / default / qemu-kvm 파일은 원래 설치되어 있어야합니다.

당신은 있어야합니다 다리-utils를 QEMU-KVM 스위치libvirt를-용지함이 설치되어 있어야합니다. 가상 머신을 사용하는 모든 사용자는 libvirtd 그룹에 추가되어야합니다.브리지 유틸리티 설치 qemu-kvm 설치libvirt-bin 설치

더 이상 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를 사용할 수있었습니다.

kvmvirt-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에 걸린 모든 것은 :

  1. virt-manager, bridge-utils, qemu-kvm 및 관련 패키지 설치
  2. kvm을 사용하려는 각 사용자가 libvirtd 그룹에 있는지 확인하십시오.
  3. 위와 같이 / etc / network / interfaces 정의하기 (인용 된 기사와 일치)
  4. 재부팅하여 이더넷이 연결되어 있고 무선 (있는 경우)이 꺼져 있는지 확인하십시오.
  5. 예를 들어을 사용하여 이미지에 대해 kvm을 직접 실행 -device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0하거나 virt-manager를 사용하여 가상 머신을 생성하고 4 단계-> 고급 옵션 패널에서 네트워크 브리지 br0을 지정하십시오.

네트워킹, 기능, 템플릿 또는 구성에 대한 추가 변경이 필요하지 않았습니다.

새 게스트의 서비스를 인터넷에 노출 시키려면 다음을 수행해야합니다.

  1. 필요한 방화벽 서비스를 준비하고 구성하십시오.
  2. 게스트 구성 또는 DHCP 서비스에서 고정 주소를 할당하십시오.
  3. NAT 라우터를 사용하는 경우 서비스의 포트를 열어 게스트의 IP 주소로 향하게합니다.

호스트 컴퓨터의 방화벽 서비스를 테스트하고 다시 활성화해야합니다. 트래픽을 게스트에게 전달하려면 항목이 필요할 수 있습니다.

참조 https://help.ubuntu.com/community/KVM/Installation , https://help.ubuntu.com/community/KVM/Networkinghttps://help.ubuntu.com/12.04/serverguide/libvirt. html .


안녕하세요, 해당 컴퓨터에 무선 카드가 없습니다. 유일한 이더넷 :)
THpubs

무선 기능이 없지만이 질문을 읽는 다른 사람들이있을 수 있음을 이해합니다. 그것이 당신이 사용한 것이므로 virt-manager 섹션을 게시했습니다. 가상 시스템을 생성 할 때 4 단계 고급 옵션에서 Bridged를 br0으로 지정 했습니까? virt-manager가 시작한 kvm 명령의 네트워킹 매개 변수가 내 것과 일치합니까? (를 실행하면 볼 수 있습니다 ps aux | grep kvm).
존 S Gruber

virt 관리자를 사용하여 가상 시스템을 만들 때 고급 옵션에서 eth0 및 br0이 표시되지 않습니다.
THpubs September

아마도 그것은 아마도 문제 일 것입니다-그것은 virt-manager 하에서 작동하게하는 열쇠입니다. 호스트 할 컴퓨터에서 실행 중입니까 (그리고 질문에 br0이 정의되어 brctl show있습니까?) 어떤 버전의 Ubuntu를 실행하고 있습니까? 아마도 그 차이 일 것입니다. virt-manager의 어떤 버전? (광산은 0.9.1-1 우분투 5.1입니다).
John S Gruber

Ubuntu 12.04 및 virt-manager 0.9.1-1ubuntu5.1을 실행 중입니다. 실제로 호스트에 virt-manager가 설치되어 있지 않습니다. 원격 시스템에 있고 호스트에 연결하는 데 사용합니다. 그 문제가 메신저에 있습니까?
THpubs September

6

보고있는 동작이 호스트가 게스트에 액세스 할 수 있고 게스트가 호스트에 액세스 할 수 있지만 게스트가 네트워크의 다른 시스템에 액세스 할 수 없거나 그 반대로는 호스트의 방화벽이 액세스를 차단하고있는 것입니다.

참조 : https://bugs.launchpad.net/ubuntu/+source/ufw/+bug/573461

특히이 섹션에서는 "마지막 단계는 브리지에서 netfilter를 비활성화하는 것입니다.

# cat >> /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
EOF

3

이것은 브리지를 만드는 데 사용하는 두 개의 스크립트입니다 qemu-kvm.

먼저 호스트가 IP 라우터가되도록합니다.

스크립트 ip-router.sh:

#!/bin/bash

internetinterface="eth0"

username=`whoami`

if [ "x$username" != "xroot" ] ; then

    echo    
    echo "You must be root in order to run this script..."
    echo    

    exit    

fi  

if [ "x$1" != "x" ] ; then
    internetinterface="$1"
fi  

if [ "x$1" == "xdel" ] || [ "x$2" == "xdel" ] ; then
    disable="1"
else
    disable="0"
fi  

if [ "$disable" == "0" ] ; then
    echo "Enabling IP forward and setting up masquerade NAT on interface $internetinterface"

    echo 1 > /proc/sys/net/ipv4/ip_forward

    iptables -t nat -A POSTROUTING -o $internetinterface -j MASQUERADE
else
    echo "Disable IP forward and setting down masquerade NAT on interface $internetinterface"

    echo 0 > /proc/sys/net/ipv4/ip_forward

    iptables -t nat -D POSTROUTING -o $internetinterface -j MASQUERADE
fi  

그런 다음 기본 인터페이스 (일반적으로 인터넷에 연결된 tun-tap인터페이스)로 인터페이스와 인터페이스를 만듭니다 bridge.

스크립트 create-qemu-bridged-tuntap.sh:

#!/bin/bash

bridgename=br0
tapinterface=tap0
outinterface=eth1

if [ "x$1" != "x" ] ; then
    outinterface="$1"
fi  

ifaces=`awk -F: '{print $1}' /proc/net/dev | tail -n +3`
iffound="0"

for i in $ifaces
do  
    if [ "$outinterface" == "$i" ] ; then
            iffound="1"
    fi  
done

if [ "$iffound" == "0" ] ; then
    echo
    echo "Can't find the output interface."
    echo
    exit 1
fi  

outifaceip=`ifconfig | grep -A1 $outinterface | tail -1 | awk -F: '{print $2}' | awk '{print $1}'`
outifaceiptokens=`echo $outifaceip | awk -F \. '{print NF}'`

if [ "$outifaceiptokens" != "4" ] ;  then
    echo
    echo "The selected output interface $outinterface doesn't seem to have a valid IP address."
    echo
    exit 1
fi  

hostaddress="192.168.1.1"
guestaddress="192.168.1.95"

sudo tunctl -t $tapinterface

sudo brctl addbr $bridgename
sudo brctl addif $bridgename $tapinterface

sudo ip link set $bridgename up
sudo ip addr add $hostaddress/24 dev $bridgename

sudo route add -host $guestaddress dev $bridgename
sudo parprouted eth1 $bridgename

sudo ~/scripts/ip-router.sh $outinterface

나는이 스크립트를 매일 사용하기 때문에 당신에게도 잘 작동합니다. 이 모든 작업을 수행하려면 일부 패키지를 설치해야합니다. 사용 :

dlocate `which COMMAND`

어떤 패키지가 필요한지 확인할 수 있습니다 COMMAND. 예를 들어 어떤 패키지가 필요한지 보려면 다음을 brctl실행하십시오.

dlocate `which brctl`

그리고 당신은 할 것이다 :

bridge-utils: /sbin/brctl

이 스크립트의 모든 명령에 대해 동일한 접근 방식을 사용하여 최소한 다음 aptitude명령 줄을 실행해야 합니다.

sudo aptitude install dlocate iproute parprouted iptables uml-utilities bridge-utils net-tools

마지막으로 기본 스크립트를 일반 사용자로 시작할 수 있습니다.

#> create-qemu-bridged-tuntap.sh eth0
Set 'tap0' persistent and owned by uid 0
Enabling IP forward and setting up masquerade NAT on interface eth0

실행 ip addr하면 스크립트 내에 지정된 br0IP 주소 의 인터페이스 가 표시 됩니다.192.168.1.1create-qemu-bridged-tuntap.sh

#> ip addr
8: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 36:76:ee:d6:63:b2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 scope global br0

이것은 host address에서 보듯 이입니다 guest. 반대로 게스트는 IP 주소를 갖게됩니다 192.168.1.95(이것은 메인 스크립트 내에서 쉽게 변경할 수 있습니다).

이제 virt-manager를 사용 br0하면 물리적 인터페이스 로 사용하도록 게스트 닉을 설정하기 만하면 됩니다.

virt-manager-br0-nic

내부에서 IP 주소 guest를 지정 eth0하면 192.168.1.95모든 것이 제대로 실행됩니다.

Slackware13:~> ifconfig 
eth0      Link encap:Ethernet  HWaddr 52:54:00:F7:6A:78  
          inet addr:192.168.1.95  Bcast:192.168.1.255  Mask:255.255.255.0

브리지를 사용하여 다리를 사용하고 있지만 NAT 전달 기능을 만드는 것으로 보입니다. 그럼에도 불구하고 특정 호스트 포트를 포트 포워드 할 수 있으면 EApubs가 원하는 것을 수행 할 수 있습니다. 상관없이 매우 흥미롭고 유용한 답변입니다.
존 S Gruber

고맙습니다, 그것은 내 목적을 위해 완벽하게 작동합니다. 그러나 실제로 내 VM에 대한 원격 액세스가 필요하지 않으며 EApubs가 VM에서 인터넷 액세스를 시도하고 있다고 생각했습니다.
Avio

@Avio 친구가 아니므로 컴퓨터에 원격으로 액세스해야합니다. NAT를 설정하고 VM을 만들면 작동합니다.
THpubs

되는 IP 전달이 떨어져 어디에 내가 가진 문제, 여기에 단서가 cat /proc/sys/net/ipv4/ip_forward준은 0. 그것을 사용하고 유지하면 이 게시물의 지침에 따라 문제가 해결되었습니다 .
Jake Cobb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.