Jaringan KVM Bridged Tidak Bekerja

23

Saya baru saja menginstal KVM di Server Ubuntu saya sesuai dengan panduan ini: https://help.ubuntu.com/community/KVM/Installation

Kemudian siapkan jaringan penghubung seperti ditunjukkan di sini: https://help.ubuntu.com/community/KVM/Networking

Lalu, saya membuat mesin virtual dengan virt-manager. Saya mencoba beberapa kali tetapi tamu gagal terhubung ke jaringan! Ada bantuan?

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 show:

 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

rute 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

* Di bintang tamu * Saya tidak dapat menyalin info dari tamu tersebut karena tidak bisa ssh ke sana. Itu tidak mendapatkan ip dari DHCP. Tidak akan berfungsi bahkan setelah mengaturnya secara manual.

THpubs
sumber
Bolehkah saya menyarankan agar Anda memberikan output dari perintah berikut? Pada host: ifconfig, brctl show, brctl showmacs br0, dan ip route. Pada tamu: ifconfig, ip route, ping 8.8.8.8, ping <your internet router>, dan traceroute 8.8.8.8. Saya tidak bisa mengatakan bahwa saya telah mengkonfigurasi kvm dengan cara yang Anda miliki, tetapi saya telah menjembatani untuk bekerja menggunakan kvmperintah. Saya memang harus memutuskan koneksi nirkabel sehingga tuan rumah saya akan terhubung ke Internet, dan, seperti yang dikatakan dalam petunjuk yang Anda kutip, Anda harus terhubung ke Internet dengan Ethernet.
John S Gruber
@JohnSGruber Baru saja menambahkan info yang Anda minta. Tetapi saya tidak dapat menyalin menempel info dari tamu karena tidak bisa ssh untuk itu. Itu tidak mendapatkan ip dari DHCP. Tidak akan berfungsi bahkan setelah mengaturnya secara manual.
THpubs
Apakah alamat MAC yang Anda tetapkan untuk tamu dalam brctl showmacs br0daftar di atas?
John S Gruber
Saya tidak menambahkan mac secara manual .. tapi biarkan saya memeriksa mac yang didapatnya ..
THpubs
@ JohnSGruber Tidak, saya tidak melihat MAC di sini!
THpubs

Jawaban:

22

Persiapan

Berikut ini bekerja untuk saya untuk Ubuntu 12.04. Anda harus menonaktifkan firewall komputer Anda saat Anda menguji ini sehingga tidak akan mengganggu.

File / etc / default / qemu-kvm harus seperti aslinya diinstal.

Anda perlu menginstal bridge-utils qemu-kvm dan libvirt-bin . Setiap pengguna yang menggunakan mesin virtual harus ditambahkan ke grup libvirtd.Instal jembatan-utils Instal qemu-kvmInstal libvirt-bin

Tampaknya tidak ada lagi kebutuhan untuk menambahkan kemampuan CAP_NET_ADMIN.

Pengaturan jaringan

Mode jaringan default adalah mode Pengguna, juga disebut SLIRP. Ini menggunakan jembatan virbr0 yang telah ditetapkan yang NAT dialihkan ke komputer tamu. Routing NAT menggunakan fitur ip_forwarding dan iptables kernel . Mode jembatan menggunakan jembatan virtual di dalam tamu yang terhubung dengan antarmuka Ethernet (tidak bernomor), dan di mana tuan rumah dan tamu memiliki antarmuka jaringan mereka.

Diagram berikut dapat memperjelas perbedaan:

Diagram jaringan

Anda dapat melihat bagaimana jaringan Pengguna default didefinisikan dengan:

virsh net-dumpxml default

Saya dapat mengatur mode bridged dengan pendekatan berikut:

Di / etc / network / interfaces (dari bagian bridging dari postingan yang Anda sebutkan dalam pertanyaan Anda):

otomatis lo
iface lo inet loopback
#auto eth0
#jika eth0 inet dhcp
auto eth0
iface eth0 inet manual
otomatis br0
iface br0 inet dhcp
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
    bridge_maxunggu 0

Reboot; dan pastikan bahwa jaringan nirkabel tidak aktif. Periksa rute IP default dengan ip route. Itu harus menggunakan antarmuka br0.

NB Jika Ethernet Anda tidak terhubung saat perubahan ini dilakukan, Anda perlu menyambungkan kabel Ethernet Anda dan mendapatkan carrier atau boot akan menggantung selama dua menit dan Anda tidak akan memiliki kemampuan jaringan. Itu karena antarmuka eth0, oleh berada di file ini, harus muncul sebelum boot dapat melanjutkan dengan normal.

NB Umumnya Anda tidak dapat menggunakan jaringan nirkabel daripada eth0 karena ketidakmampuan mereka untuk menggunakan beberapa alamat MAC (saya menyimpulkan bahwa mereka membutuhkan yang kedua untuk jembatan).

Sebagai alternatif, Anda dapat menonaktifkan penggunaan Ethernet dan memastikan bahwa itu tidak memiliki alamat IP, dan bahwa tidak ada rute default yang diatur ip route. Kemudian:

 sudo ifconfig eth0 0.0.0.0 up
 sudo brctl addbr br0
 sudo brctl addif br0 eth0
 sudo ifconfig br0 up
 sudo dhclient br0 &

Anda juga dapat memberikan alamat IP statis di sini, serta menentukan rute default dan alamat DNS. Untuk contoh dhclientini, lakukan ini.

Inilah tabel rute saya:

Daftar rute $ ip
default via 192.168.1.1 dev br0 metric 100 
169.254.0.0/16 dev br0 scope link metric 1000 
192.168.1.0/24 dev br0 proto kernel lingkup tautan src 192.168.1.45 
192.168.122.0/24 dev virbr0 proto kernel lingkup tautan src 192.168.122.1

Menggunakan kvm

Saya kemudian dapat mem-boot mesin bridged kvm dengan:

 $ sudo kvm -name Quantal -m 1024 -hda foo.qcow2 --soundhw ac97 -device virtio-net,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0

The -netdev tapmerek parameter sudo suatu kebutuhan. Saat VM dimulai qemu-kvm menjalankan perintah berikut:

ifconfig vnet0 0.0.0.0 up
brctl addif brctl addif br0 vnet0

Ini dilakukan oleh / etc / qemu-ifup

Antarmuka VM vnet0 ditambahkan ke jembatan br0 karena rute default di atas menggunakan antarmuka jembatan itu. Jika tidak ada, antarmuka tap akan ditambahkan ke antarmuka virbr0. Karena itu tidak terhubung ke Internet, NAT akan digunakan untuk menghubungkan tamu ke host dan Internet, dalam percobaan saya. Anda dapat mengarahkan vnet0 ke jembatan tertentu di / etc / default / qemu-kvm. Dengan menggunakan virt-manager di bawah ini Anda dapat secara eksplisit mengarahkan jembatan mana yang terhubung.

Karena perintah di atas dikeluarkan oleh qemu-kvm, dan -netdev tap,id=tunnel,ifname=vnet0parameternya, mesin virtual vm terhubung ke terowongan vnet0, dan terowongan terhubung ke jembatan br0.

Saya sekarang dapat langsung ssh ke guest VM ini dari komputer lain di jaringan saya.

Tuan rumah saya ifconfig(perhatikan antarmuka vnet0 yang muncul di jaringan saya ketika VM sedang berjalan):

$ ifconfig
br0 Link encap: Ethernet HWaddr 00: 1e: 33: 88: 07: e5  
          inet addr: 192.168.1.45 Bcast: 255.255.255.255 Topeng: 255.255.255.0
          inet6 addr: fe80 :: 21e: 33ff: fe88: 7e5 / 64 Cakupan: Tautan
          UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
          Paket RX: 6526 kesalahan: 0 jatuh: 0 overruns: 0 bingkai: 0
          Paket TX: 7543 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
          tabrakan: 0 txqueuelen: 0 
          Bita RX: 2712940 (2,7 MB) Bita TX: 1071835 (1,0 MB)

eth0 Link encap: Ethernet HWaddr 00: 1e: 33: 88: 07: e5  
          UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
          Paket RX: 7181 kesalahan: 0 turun: 0 overruns: 0 bingkai: 0
          Paket TX: 7740 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
          tabrakan: 0 txqueuelen: 1000 
          Bita RX: 2974585 (2,9 MB) Bita TX: 1096580 (1,0 MB)
          Interrupt: 43 Alamat dasar: 0x6000 

lo Link encap: Local Loopback  
          inet addr: 127.0.0.1 Mask: 255.0.0.0
          inet6 addr: :: 1/128 Cakupan: Host
          MENJALANKAN LOOPBACK MTU: 16436 Metrik: 1
          Paket RX: 10 kesalahan: 0 jatuh: 0 overruns: 0 bingkai: 0
          Paket TX: 10 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
          tabrakan: 0 txqueuelen: 0 
          Bita RX: 664 (664,0 B) Bita TX: 664 (664,0 B)

vnet0 Link encap: Ethernet HWaddr ca: 0c: 73: c3: bc: 45  
          inet6 addr: fe80 :: c80c: 73ff: fec3: bc45 / 64 Lingkup: Tautan
          UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
          Paket RX: 226 kesalahan: 0 jatuh: 0 overruns: 0 bingkai: 0
          Paket TX: 429 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
          tabrakan: 0 txqueuelen: 500 
          RX byte: 26919 (26,9 KB) TX byte: 58929 (58,9 KB)

virbr0 Link encap: Ethernet HWaddr d6: 18: 22: db: ff: 93  
          inet addr: 192.168.122.1 Bcast: 192.168.122.255 Mask: 255.255.255.0
          UP BROADCAST MULTICAST MTU: 1500 Metric: 1
          Paket RX: 0 kesalahan: 0 jatuh: 0 overruns: 0 bingkai: 0
          Paket TX: 0 kesalahan: 0 jatuh: 0 overruns: 0 operator: 0
          tabrakan: 0 txqueuelen: 0 
          Bita RX: 0 (0,0 B) Bita TX: 0 (0,0 B)

Konfigurasi jembatan saya saat menjalankan VM:

$ brctl show
jembatan nama jembatan id antarmuka yang diaktifkan STP
br0 8000.001e338807e5 no eth0
                                                        vnet0
virbr0 8000.000000000000 ya

Perhatikan bahwa antarmuka vnet0 mesin virtual dan antarmuka eth0 terhubung ke jembatan br0.

Dan MAC ada di antarmuka br0:

$ brctl showmacs br0
port no addr mac adalah lokal? timer penuaan
  1 00: 05: 5d: lih: 64: 61 no 2.54
  1 00: 19: d2: 42: 5d: 3d no 36.76
  1 00: 19: df: da: af: 7c no 2.86
  1 00: 1e: 33: 88: 07: e5 ya 0,00
  1 00: 60: 0f: e4: 17: d6 no 0.79
  2 52: 54: 00: 12: 34: 56 no 0.80
  1 58: 6d: 8f: 17: 5b: c0 no 5.91
  1 c8: aa: 21: be: 8d: 16 no 167.69
  2 ca: 0c: 73: c3: bc: 45 ya 0,00

Perhatikan bahwa antarmuka br0 menghubungkan komputer host saya ke jembatan yang sama yang digunakan oleh tamu.

Anda dapat memeriksa bahwa Anda dijembatani daripada NAT yang diarahkan ke jaringan Anda sendiri dengan menggunakan traceroute 8.8.8.8. Jika simpul pertama adalah router jaringan Anda dan bukan alamat ip tamu, jaringan Anda seharusnya bekerja dengan benar.

Lihat dokumentasi ini .

manajer kebajikan

Pastikan Anda telah menginstal virt-managerdan hal. The halpaket ketergantungan disarankan untuk virt-managerdan digunakan untuk menentukan konfigurasi jaringan sistem anda saat membuat atau mengedit tamu.

Sementara memiliki jembatan br0 didefinisikan seperti di atas saya membuat mesin virtual dengan virt-manager sebagai berikut:

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Saya bisa langsung ke seluruh jaringan rumah saya dan ke Internet dari tamu ini. Saya juga dapat ssh ke dalamnya dari komputer Ubuntu lain (non-host, non-guest) di jaringan rumah saya.

Inilah kvmperintah yang sangat panjang yang dijalankan oleh virt-manager (untuk perbandingan dengan EApubs atau siapa pun yang mengalami masalah dengan ini):

/ usr / bin / kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1, soket = 1, inti = 1, utas = 1, utas = 1 -nama tepat -memakai f057a729-eda6-4b85-84dc-f100c9ae3789 - nodefconfig -nodefaults -chardev socket, id = charmonitor, path = / var / lib / libvirt / qemu / precision.monitor, server, nowait -mon chardev = charmonitor, id = monitor, mode = control -rtc base = utc -no- shutdown -drive file = / media / natty / home / gruber / ubuntu-kvm / tmpW8gSGB.qcow2, jika = tidak ada, id = drive-ide0-0-0, format = qcow2 -device drive-ide, bus = ide.0 , unit = 0, drive = 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 -device isa-serial, chardev = charserial0, id = serial0 -usb -vnc 127.0.0.1:: 0 -vga cirrus -device intel-hda, id = sound0, bus = pci.0, addr = 0x4 -device hda-duplex, id = sound0-codec0, bus = sound0.0,cad = 0 -layanan virtio-balloon-pci, id = balloon0, bus = pci.0, addr = 0x5

Inilah bagian jaringan dari deskripsi mesin virtual di /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>

Menurut tautan ini , untuk kinerja dan keandalan, mungkin yang terbaik untuk mengatur model perangkat jaringan virtio, Anda dapat melakukan ini dengan di virt-viewer dengan menekan tombol i , pergi ke pengaturan NIC, dan pengaturan "Device model "ke virtio. Anda juga bisa menambahkan ini ke XML di atas dengan menambahkan baris:

      <model type='virtio'/>

Singkatnya

Semua ini berlangsung pada 12,04 adalah:

  1. Menginstal virt-manager, bridge-utils, qemu-kvm, dan paket terkait
  2. Pastikan setiap pengguna yang ingin menggunakan kvm berada di grup libvirtd.
  3. Mendefinisikan / etc / network / interfaces seperti di atas (yang cocok dengan artikel yang dikutip)
  4. Reboot, pastikan Ethernet terhubung dan nirkabel (jika ada) tidak aktif.
  5. Jalankan kvm terhadap gambar secara langsung dengan, misalnya -device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0, atau buat mesin virtual dengan virt-manager, tentukan network br0 di bawah panel Langkah 4-> Opsi Lanjutan.

Tidak ada perubahan lebih lanjut yang diperlukan untuk jaringan, kemampuan, template, atau konfigurasi.

Untuk mengekspos layanan di tamu baru Anda ke Internet, Anda harus:

  1. Siapkan dan konfigurasikan layanan firewall apa pun yang Anda perlukan.
  2. Baik menetapkan alamat statis di konfigurasi tamu Anda atau di layanan DHCP Anda.
  3. Jika Anda menggunakan perute NAT, buka porta untuk layanan yang Anda implementasikan mengarahkannya ke alamat IP tamu.

Ingatlah untuk menguji dan mengaktifkan kembali layanan firewall untuk komputer host Anda. Mungkin perlu entri apa pun untuk meneruskan lalu lintas ke tamu.

Lihat https://help.ubuntu.com/community/KVM/Instalation , https://help.ubuntu.com/community/KVM/Networking , dan https://help.ubuntu.com/12.04/serverguide/libvirt. html .

John S Gruber
sumber
Hai, saya tidak punya kartu nirkabel di mesin itu. hanya Ethernet :)
THpubs
Saya mengerti Anda tidak memiliki nirkabel - tetapi orang lain yang membaca pertanyaan ini mungkin. Saya telah memposting bagian virt-manager karena itulah yang Anda gunakan. Apakah Anda menentukan Bridged to br0 pada langkah 4 Opsi Lanjutan saat membuat mesin virtual? Apakah parameter jaringan dalam perintah kvm diluncurkan oleh virt-manager match mine? (Anda dapat melihatnya dengan menjalankan ps aux | grep kvm).
John S Gruber
Hai ketika membuat mesin virtual menggunakan manajer virt, dalam opsi lanjutan, saya tidak melihat eth0 dan br0.
THpubs
Yah itu mungkin masalahnya - itu kunci untuk membuatnya bekerja di bawah virt-manager. Apakah Anda menjalankan mesin yang akan menghostingnya (dan dengan br0 didefinisikan brctl showseperti yang Anda miliki di pertanyaan Anda?) Apa versi Ubuntu yang Anda jalankan? Mungkin itu bedanya. Versi virt-manager apa? (Milik saya adalah 0.9.1-1ubuntu5.1).
John S Gruber
Saya menjalankan Ubuntu 12.04 dan virt-manager 0.9.1-1ubuntu5.1. Sebenarnya, saya tidak memiliki manajer Virt diinstal di host. Saya memilikinya di mesin remote dan saya menggunakannya untuk terhubung ke host. Apakah itu masalah yang saya alami?
THpubs
6

Jika perilaku yang Anda lihat adalah tuan rumah dapat mengakses tamu, dan tamu dapat mengakses tuan rumah, tetapi tamu tidak dapat mengakses mesin lain di jaringan atau sebaliknya ... mungkin firewall tuan rumah memblokir akses.

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

Secara khusus, bagian ini: "Langkah terakhir adalah menonaktifkan netfilter di jembatan:

# 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
Jeremy Spilman
sumber
3

Ini adalah dua skrip yang saya gunakan untuk membuat jembatan qemu-kvm .

Pertama, biarkan host menjadi router IP.

Skrip 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  

Lalu, buat tun-tapantarmuka danbridge itu dengan antarmuka default Anda (biasanya yang dengan koneksi Internet).

Skrip 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

Saya menggunakan skrip-skrip ini setiap hari, jadi skrip ini harus bekerja dengan baik juga untuk Anda. Anda harus menginstal beberapa paket agar semua ini berfungsi. Menggunakan:

dlocate `which COMMAND`

Anda dapat melihat paket mana yang harus dimiliki COMMAND. Misalnya untuk melihat paket mana yang harus dimiliki brctl, jalankan saja:

dlocate `which brctl`

dan Anda akan memiliki:

bridge-utils: /sbin/brctl

Dengan menggunakan pendekatan yang sama untuk semua perintah dalam skrip ini, Anda harus (setidaknya) menjalankan aptitudebaris perintah ini :

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

Akhirnya, Anda dapat meluncurkan skrip utama (sebagai pengguna normal):

#> 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

Menjalankan ip addrAnda akan melihat br0antarmuka dengan alamat IP 192.168.1.1, seperti yang ditentukan di dalam create-qemu-bridged-tuntap.shskrip:

#> 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

Ini host addressseperti yang terlihat oleh guest. Sebaliknya, tamu akan memiliki alamat IP192.168.1.95 (sekali lagi, ini dapat dengan mudah diubah di dalam skrip utama).

Sekarang, menggunakan virt-manager, Anda hanya perlu mengatur tamu Anda untuk digunakan br0sebagai antarmuka fisik.

virt-manager-br0-nic

Di dalam guest, Anda hanya perlu memberikan eth0alamat IP 192.168.1.95dan semuanya akan berjalan dengan baik.

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
Avio
sumber
Meskipun Anda menggunakan jembatan untuk melakukannya, menurut saya Anda membuat fasilitas penerusan NAT. Namun demikian, jika Anda dapat mem-port forward port host tertentu mungkin itu akan melakukan apa yang diinginkan EApubs. Jawaban yang sangat menarik dan sangat berguna tanpa menghiraukan.
John S Gruber
Terima kasih, ini bekerja dengan sempurna untuk tujuan saya. Tetapi, sebenarnya, saya tidak memerlukan akses jarak jauh ke VM saya dan saya pikir EApubs hanya mencoba untuk memiliki akses Internet pada VM-nya.
Avio
@ Avi Tidak teman saya, saya perlu akses jarak jauh ke mesin saya. Jika saya mengatur NAT dan membuat VM, itu berfungsi.
THpubs
Ada petunjuk di sini untuk masalah yang saya miliki di mana IP forwarding tidak aktif, yaitu cat /proc/sys/net/ipv4/ip_forwardmemberi 0. Mengaktifkan dan bertahan itu membereskan masalah bagi saya, instruksi dalam posting ini .
Jake Cobb