รอบคัดเลือกโซน
สิ่งต่อไปนี้ใช้ได้กับฉันสำหรับ Ubuntu 12.04 คุณควรปิดการใช้งานไฟร์วอลล์ของคอมพิวเตอร์ของคุณในขณะที่คุณทดสอบสิ่งนี้เพื่อไม่ให้รบกวน
ไฟล์ / etc / default / qemu-kvm ควรถูกติดตั้งตั้งแต่แรก
คุณจะต้องติดตั้งบริดจ์ -emils qemu-kvmและlibvirt-bin ผู้ใช้ที่ใช้เครื่องเสมือนควรเพิ่มกลุ่ม libvirtd
ดูเหมือนว่าไม่จำเป็นต้องเพิ่มความสามารถในการ CAP_NET_ADMIN อีกต่อไป
การตั้งค่าเครือข่าย
โหมดเครือข่ายเริ่มต้นคือโหมดผู้ใช้หรือที่เรียกว่า SLIRP มันใช้สะพาน virbr0 ที่กำหนดไว้ล่วงหน้าซึ่งเป็น NAT ส่งไปยังคอมพิวเตอร์ของผู้เข้าพัก เส้นทาง NAT ใช้ ip_forwarding คุณลักษณะเคอร์เนลและiptables โหมดบริดจ์ใช้บริดจ์เสมือนในแขกที่เชื่อมต่อกับอีเธอร์เน็ต (ไม่ได้ติดตั้ง) และที่ทั้งโฮสต์และแขกมีอินเทอร์เฟซเครือข่าย
ไดอะแกรมต่อไปนี้อาจทำให้ความแตกต่างชัดเจนขึ้น:
คุณสามารถดูว่าเครือข่ายผู้ใช้เริ่มต้นถูกกำหนดด้วย:
virsh net-dumpxml default
ฉันสามารถตั้งค่าโหมด bridged ด้วยวิธีการต่อไปนี้:
ใน / etc / network / interfaces (จากส่วนเชื่อมโยงของโพสต์ที่คุณพูดถึงในคำถามของคุณ):
แท้จริง
iface lo inet loopback
#auto eth0
#iface eth0 inet dhcp
auto eth0
คู่มือ iface eth0 inet
อัตโนมัติ br0
iface br0 inet dhcp
bridge_ports eth0
ปิด bridge_stp
bridge_fd 0
bridge_maxwait 0
Reboot; และตรวจสอบให้แน่ใจว่าเครือข่ายไร้สายไม่ทำงาน ตรวจสอบเส้นทาง IP ip route
เริ่มต้นด้วย ต้องใช้อินเตอร์เฟส br0
NB หากอีเทอร์เน็ตของคุณไม่ได้เชื่อมต่อเมื่อการเปลี่ยนแปลงนี้ทำให้คุณต้องเสียบสายเคเบิลอีเทอร์เน็ตของคุณและรับผู้ให้บริการหรือการบูตจะหยุดเป็นเวลาสองนาทีและคุณจะไม่มีความสามารถเครือข่ายนั่นเป็นเพราะส่วนต่อประสาน eth0 อยู่ในไฟล์นี้จะต้องเกิดขึ้นก่อนที่การบู๊ตจะสามารถดำเนินการได้ตามปกติ
NB โดยทั่วไปคุณไม่สามารถใช้เครือข่ายไร้สายแทน eth0เนื่องจากพวกเขาไม่สามารถใช้ที่อยู่ MAC หลายแห่ง (ฉันอนุมานว่าพวกเขาต้องการเครือข่ายที่สองสำหรับบริดจ์)
เป็นทางเลือกที่คุณสามารถปิดการใช้อีเธอร์เน็ตและให้แน่ใจว่ามันไม่ได้มีที่อยู่ 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 bridged ด้วย:
$ 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 addif br0 vnet0
สิ่งนี้ทำโดย / etc / qemu-ifup
อินเตอร์เฟส vnet0 ของ VM ถูกเพิ่มเข้ากับ br0 bridge เนื่องจากเส้นทางเริ่มต้นด้านบนใช้อินเตอร์เฟสบริดจ์นั้น หากไม่มีส่วนต่อประสานการแตะแทนจะถูกเพิ่มไปยังส่วนต่อประสาน virbr0 เนื่องจากที่ไม่ได้เชื่อมต่อกับอินเทอร์เน็ต NAT จะถูกใช้เพื่อเชื่อมต่อแขกกับโฮสต์และอินเทอร์เน็ตในการทดลองของฉัน คุณสามารถนำ vnet0 ไปยังบริดจ์เฉพาะใน / etc / default / qemu-kvm การใช้ virt-manager ด้านล่างคุณสามารถกำหนดสะพานที่จะเชื่อมต่อได้อย่างชัดเจน
เนื่องจากคำสั่งข้างต้นที่ออกโดย qemu-kvm และ-netdev tap,id=tunnel,ifname=vnet0
พารามิเตอร์เครื่องเสมือน vm เชื่อมต่อกับอุโมงค์ vnet0 และอุโมงค์เชื่อมต่อกับสะพาน br0
ตอนนี้ฉันสามารถ ssh เข้าสู่ VM ผู้เยี่ยมชมนี้จากคอมพิวเตอร์เครื่องอื่นบนเครือข่ายของฉัน
โฮสต์ของฉันifconfig
(หมายเหตุอินเตอร์เฟส vnet0 ที่ปรากฏบนเครือข่ายของฉันเมื่อ VM กำลังทำงาน):
$ ifconfig
การเชื่อมโยง br0: Ethernet HWaddr 00: 1e: 33: 88: 07: e5
inet addr: 192.168.1.45 Bcast: 255.255.255.255 รูปแบบ: 255.255.255.0
inet6 addr: fe80 :: 21e: 33ff: fe88: 7e5 / 64 ขอบเขต: ลิงก์
ออกอากาศแบบมัลติคาสต์วิ่ง MTU: 1500 เมตริก: 1
แพ็กเก็ต RX: ข้อผิดพลาด 6526: 0 ลดลง: 0 overruns: 0 เฟรม: 0
แพ็กเก็ต TX: 7543 ข้อผิดพลาด: 0 ลดลง: 0 overruns: 0 ผู้ให้บริการ: 0
การชนกัน: 0 txqueuelen: 0
จำนวนไบต์: 2712940 (2.7 MB) TX ไบต์: 1071835 (1.0 MB)
eth0 ลิงก์ encap: อีเทอร์เน็ต HWaddr 00: 1e: 33: 88: 07: e5
ออกอากาศแบบมัลติคาสต์วิ่ง MTU: 1500 เมตริก: 1
RX แพ็กเก็ต: 7181 ข้อผิดพลาด: 0 ลดลง: 0 overruns: 0 เฟรม: 0
แพ็คเก็ต TX: 7740 ข้อผิดพลาด: 0 ลดลง: 0 overruns: 0 ผู้ให้บริการ: 0
การชน: 0 txqueuelen: 1,000
จำนวนไบต์: 2974585 (2.9 MB) TX ไบต์: 1096580 (1.0 MB)
การขัดจังหวะ: 43 ที่อยู่ฐาน: 0x6000
lo Link encap: Local Loopback
inet addr: 127.0.0.1 รูปแบบ: 255.0.0.0
inet6 addr: :: 1/128 ขอบเขต: โฮสต์
การเรียกใช้ LOOPBACK RUNNING MTU: 16436 เมตริก: 1
แพ็กเก็ต RX: 10 ข้อผิดพลาด: 0 ลดลง: 0 overruns: 0 เฟรม: 0
แพ็กเก็ต TX: 10 ข้อผิดพลาด: 0 ลดลง: 0 overruns: 0 ผู้ให้บริการ: 0
การชนกัน: 0 txqueuelen: 0
จำนวนไบต์: 664 (664.0 B) TX ไบต์: 664 (664.0 B)
vnet0 ลิงก์ encap: Ethernet HWaddr ca: 0c: 73: c3: bc: 45
inet6 addr: fe80 :: c80c: 73ff: fec3: bc45 / 64 ขอบเขต: ลิงก์
ออกอากาศแบบมัลติคาสต์วิ่ง MTU: 1500 เมตริก: 1
RX แพ็กเก็ต: 226 ข้อผิดพลาด: 0 ลดลง: 0 overruns: 0 เฟรม: 0
แพ็กเก็ต TX: 429 ข้อผิดพลาด: 0 ลดลง: 0 overruns: 0 ผู้ให้บริการ: 0
การชน: 0 txqueuelen: 500
จำนวนไบต์: 26919 (26.9 KB) TX ไบต์: 58929 (58.9 KB)
virbr0 ลิงก์ encap: อีเทอร์เน็ต HWaddr d6: 18: 22: db: ff: 93
inet addr: 192.168.122.1 Bcast: 192.168.122.255 รูปแบบ: 255.255.255.0
ออกอากาศแบบมัลติคาสต์ MTU: 1500 เมตริก: 1
แพ็กเก็ต RX: 0 ข้อผิดพลาด: 0 ลดลง: 0 overruns: 0 เฟรม: 0
แพ็กเก็ต TX: 0 ข้อผิดพลาด: 0 ลดลง: 0 overruns: 0 ผู้ให้บริการ: 0
การชนกัน: 0 txqueuelen: 0
จำนวนไบต์: 0 (0.0 B) TX ไบต์: 0 (0.0 B)
การกำหนดค่าบริดจ์ของฉันขณะใช้งาน VM:
แสดง $ brctl
บริดจ์ชื่อบริดจ์ id อินเตอร์เฟส STP ที่เปิดใช้งาน
br0 8000.001e338807e5 ไม่มี eth0
vnet0
virbr0 8000.000000000000 ใช่
โปรดทราบว่าทั้งอินเตอร์เฟส vnet0 ของเครื่องเสมือนและอินเตอร์เฟส eth0 นั้นเชื่อมต่อกับ br0 bridge
และ MAC บนอินเตอร์เฟส br0:
$ brctl showmacs br0
พอร์ตไม่มี mac addr อยู่ภายใน? เครื่องจับเวลา
1 00: 05: 5d: cf: 64: 61 no 2.54
1 00: 19: d2: 42: 5d: 3f no 36.76
1 00: 19: df: da: af: 7c no 2.86
1 00: 1e: 33: 88: 07: e5 ใช่ 0.00
1 00: 60: 0f: e4: 17: d6 no 0.79
2 52: 54: 00: 12: 34: 56 ไม่มี 0.80
1 58: 6d: 8f: 17: 5b: c0 no 5.91
1 c8: aa: 21: เป็น: 8d: 16 no 167.69
2 ca: 0c: 73: c3: bc: 45 ใช่ 0.00
โปรดทราบว่าอินเทอร์เฟซ br0 เชื่อมต่อโฮสต์คอมพิวเตอร์ของฉันกับบริดจ์เดียวกันที่แขกใช้งาน
คุณสามารถตรวจสอบว่าคุณกำลัง bridged มากกว่า NAT traceroute 8.8.8.8
ส่งไปยังเครือข่ายของคุณเองโดยใช้ หากโหนดแรกคือเราเตอร์เครือข่ายของคุณแทนที่จะเป็นที่อยู่ ip ของแขกเครือข่ายของคุณควรทำงานอย่างถูกต้อง
ดูเอกสารนี้
virt ผู้จัดการ
ให้แน่ใจว่าคุณได้ติดตั้งและvirt-manager
แพคเกจคือการพึ่งพาแนะนำและนำมาใช้ในการกำหนดค่าเครือข่ายของระบบเมื่อสร้างหรือแก้ไขแขกผู้เข้าพักhal
hal
virt-manager
ในขณะที่การกำหนด br0 บริดจ์ดังกล่าวข้างต้นฉันสร้างเครื่องเสมือนที่มี virt-manager ดังนี้:
ฉันสามารถไปที่เครือข่ายภายในบ้านของฉันและอินเทอร์เน็ตจากแขกรายนี้ได้โดยตรง ฉันยังสามารถ ssh จากคอมพิวเตอร์ Ubuntu อื่น ๆ (ไม่ใช่โฮสต์และไม่ใช่แขก) บนเครือข่ายในบ้านของฉัน
นี่คือkvm
คำสั่งที่ใช้เวลานานมากโดย virt-manager (สำหรับการเปรียบเทียบกับ EApubs หรือใครก็ตามที่มีปัญหากับสิ่งนี้):
/ usr / bin / kvm -S -M pc-1.0 -enable-kvm -m 1024 -smp 1, ซ็อกเก็ต = 1, แกน = 1, เธรด = 1, เธรด = 1 - ชื่อที่แม่นยำ - uuid f057a729-eda6-4b85-84dc-f100c9ae3789 - nodefconfig -nodefaults -chardev socket, id = charmonitor, path = / var / lib / libvirt / qemu / precision.monitor, เซิร์ฟเวอร์, nowait -mon chardev = charmonitor, id = จอภาพ, โหมด = control -rtc ฐาน = utc-no- ปิด -drive file = / media / natty / home / gruber / ubuntu-kvm / tmpW8gSGB.qcow2, ถ้า = none, id = drive-ide0-0-0, format = qcow2 -device ide-drive, bus = ide.0 , ยูนิต = 0, ไดรฟ์ = drive-ide0-0-0, id = ide0-0-0, bootindex = 1 -netdev tap, fd = 18, id = hostnet0 - อุปกรณ์ rtl8139, netdev = hostnet0, id = net0, mac = 52: 54: 00: 0e: da: 9b, บัส = 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, บัส = sound0.0,cad = 0 - อุปกรณ์ virtio-บอลลูน-pci, id = balloon0, รถบัส = 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
คุณสามารถทำได้โดยการกดปุ่ม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 โดยระบุบริดจ์เครือข่าย br0 ภายใต้แผงขั้นตอนที่ 4-> ตัวเลือกขั้นสูง
ไม่จำเป็นต้องทำการเปลี่ยนแปลงใด ๆ กับระบบเครือข่ายความสามารถเทมเพลตหรือการกำหนดค่า
ในการแสดงบริการในแขกใหม่ของคุณกับอินเทอร์เน็ตคุณควร:
- จัดเตรียมและกำหนดค่าบริการไฟร์วอลล์ใด ๆ ที่คุณต้องการ
- กำหนดที่อยู่แบบคงที่ในการกำหนดค่าของผู้เยี่ยมชมหรือในบริการ 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
คำสั่ง ฉันต้องตัดการเชื่อมต่อแบบไร้สายดังนั้นโฮสต์ของฉันจะเชื่อมต่ออินเทอร์เน็ตและตามที่คุณยกมาบอกว่าคุณต้องเชื่อมต่ออินเทอร์เน็ตด้วยอีเธอร์เน็ต