KVM / libvirt: วิธีกำหนดค่าที่อยู่ IP เกสต์สแตติกบนโฮสต์ virtualisation


31

สิ่งที่ฉันต้องการจะทำคือการตั้งค่าเครือข่ายของแขก (ที่อยู่ IP, ซับเน็ต, เกตเวย์, ที่อยู่ออกอากาศ) จากระบบโฮสต์ การตั้งค่าเครือข่ายที่ใช้อยู่ในbridgeโหมด ฉันจะกำหนดค่าเครือข่ายจากโฮสต์แทนที่จะกำหนดค่าไคลเอ็นต์เองเป็นการกำหนดค่าเครือข่ายแบบคงที่ได้อย่างไร

หากฉันดำเนินการ:

virsh edit vm1

มี<network>บล็อกด้วยและฉันพยายามกำหนดค่าอินเทอร์เฟซเครือข่ายจากที่นั่น แต่น่าเสียดายที่ guest VM ดูเหมือนจะไม่ใช้มันและเป็นออฟไลน์ไปยังเครือข่าย (เนื่องจากใช้การกำหนดค่าเครือข่ายอัตโนมัติเท่านั้น) ... VM เป็นทั้ง Linux และ Windows ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก


2
การแจกที่อยู่ IP ผ่าน DHCP ที่สงวนไว้นั้นเป็นการเช่าไม่ใช่ตัวเลือกหรือไม่?
MadHatter สนับสนุนโมนิก้า

อืมฉันเดาว่ามันเป็น แต่ฉันต้องการกำหนด VM # 1 ให้กับ IP # 1, VM # 2 ให้กับ IP # 2 ฯลฯ (แทนที่จะให้ IP สุ่มจากสัญญาเช่าของพวกเขา) คุณคิดว่ามันจะเป็นไปได้ที่จะกำหนดค่าเช่นนี้ด้วย DHCP หรือไม่? ถ้าเป็นฉันยินดีที่จะลองวิธีนี้
เบต้า

2
ฉันขอแนะนำให้เปลี่ยนชื่อคำถามเป็น " KVM / libvirt: วิธีกำหนดค่าที่อยู่ IP ของผู้เยี่ยมชมคงที่บน virtualisation host "
Nils Toedtmann

1
เห็นด้วยกับ @NilsToedtmann รายละเอียดเพิ่มเติมใด ๆ เกี่ยวกับไฮเปอร์ไวเซอร์ที่ใช้เช่นระบบปฏิบัติการพื้นฐาน ฯลฯ จะเป็นประโยชน์ อาจมีเครื่องมือการจัดการบนระบบปฏิบัติการเพิ่มเติมเพื่อช่วยในการกำหนดค่าเครือข่ายสำหรับระบบเสมือนจริง มีคำแนะนำที่ยอดเยี่ยมเกี่ยวกับKVMและLXCสำหรับใช้กับระบบปฏิบัติการที่ใช้ SUSE ซึ่งสามารถใช้งานได้กับ YaST
Matt

คำตอบ:


52

หากคุณไม่ต้องการทำการกำหนดค่าใด ๆ ภายในแขกตัวเลือกเดียวคือเซิร์ฟเวอร์ DHCP ที่แจกที่อยู่ IP แบบคงที่ หากคุณใช้bridgeโหมดนั่นอาจเป็นเซิร์ฟเวอร์ DHCP ภายนอกบางตัว ศึกษาคู่มือของมันเพื่อค้นหาวิธีการให้เช่าแบบคงที่

แต่อย่างน้อยในโหมดไปข้างหน้าnatหรือrouteคุณสามารถใช้ libvirt ในตัวdnsmasqd(เวอร์ชันล่าสุดของ libvirtd รองรับตัวเลือก "dhcp-hostsfile" ของ dnsmasq) นี่คือวิธี:

ก่อนอื่นให้ค้นหาที่อยู่ MAC ของ VM ที่คุณต้องการกำหนดที่อยู่ IP แบบคงที่:

virsh  dumpxml  $VM_NAME | grep 'mac address'

จากนั้นแก้ไขเครือข่าย

virsh  net-list
virsh  net-edit  $NETWORK_NAME    # Probably "default"

ค้นหา<dhcp>ส่วน จำกัด ช่วงแบบไดนามิกและเพิ่มรายการโฮสต์สำหรับ VM ของคุณ

<dhcp>
  <range start='192.168.122.100' end='192.168.122.254'/>
  <host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/>
  <host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/>
  <host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.12'/>
</dhcp>

จากนั้นรีบูต VM ของคุณ (หรือรีสตาร์ทไคลเอ็นต์ DHCP เช่นifdown eth0; ifup eth0)


อัปเดต: ฉันเห็นว่ามีรายงานว่าการเปลี่ยนแปลงอาจไม่มีผลหลังจาก "virsh net-edit" ในกรณีนี้ให้ลองทำสิ่งนี้หลังจากแก้ไข:

virsh  net-destroy  $NETWORK_NAME  
virsh  net-start    $NETWORK_NAME  

... และรีสตาร์ทไคลเอ็นต์ DHCP ของ VM

หากยังไม่ได้ผลคุณอาจต้องทำ

  • หยุดบริการ libvirtd
  • ฆ่ากระบวนการ dnsmasq ใด ๆ ที่ยังมีชีวิตอยู่
  • เริ่มบริการ libvirtd

หมายเหตุ: ไม่มีวิธีใดที่โฮสต์ KVM สามารถบังคับให้ใช้ VM ด้วยระบบปฏิบัติการที่ไม่รู้จักและการกำหนดค่าที่ไม่รู้จักเพื่อใช้การกำหนดค่าเครือข่ายที่แน่นอน แต่ถ้ารู้ว่ารู้ว่า VM ใช้โพรโทคอลการกำหนดค่าเครือข่ายบางตัว - พูด DHCP - คุณสามารถใช้มันได้ นี่คือสิ่งที่โพสต์นี้ถือว่า

OS บางตัว (เช่น Linux distros บางตัว) อนุญาตให้ส่งตัวเลือกการกำหนดค่าเครือข่ายไปยังแขกเช่นผ่านบรรทัดคำสั่งเคอร์เนล แต่นั่นก็เฉพาะเจาะจงกับระบบปฏิบัติการและฉันไม่เห็นความได้เปรียบเหนือวิธี DHCP


ขอบคุณฉันจะลองและรายงานกลับมาถ้าฉันใช้งานได้
เบต้า

เย็น. แต่คุณจะต้องเปลี่ยนโหมดเครือข่าย
Nils Toedtmann

1
ฉันมาที่นี่เพราะฉันมีความต้องการที่คล้ายกันและฉันคิดว่าฉันสามารถอธิบายความได้เปรียบมากกว่าการใช้ DHCP อย่างน้อยสำหรับกรณีการใช้งานของฉัน สถานการณ์เป็นที่ยอมรับผิดปกติ ฉันมีเซิร์ฟเวอร์ที่เคลื่อนที่ไปมาระหว่างสองเครือข่ายทุกสองสามสัปดาห์ มีแขกประมาณ 10 คน เครือข่ายหนึ่งมีเซิร์ฟเวอร์ DHCP (ซึ่งยากต่อการควบคุมสำหรับฉัน) เครือข่ายอื่นไม่มี นั่นค่อนข้างออกกฎโดยใช้ DHCP ฉันกำลังมองหาวิธีที่จะเปลี่ยน IP ของโฮสต์และอัปเดตที่อยู่ IP ของผู้เข้าพักโดยอัตโนมัติตามนั้น (ฉันใช้พ่อครัวสำหรับระบบอัตโนมัติดังนั้นเมื่อมีการตั้งค่าที่อยู่ IP ฉันจะไปได้ดี)
Kevin Keane

2
ฉันสามารถยืนยันได้ว่าการเปลี่ยนแปลงจะไม่มีผลโดยไม่ทำลายและรีสตาร์ทเครือข่าย ฉันก็พบว่าฉันต้องปิดตัวเองแล้วก็เริ่ม VM เพียงรีบูตเครื่องให้อินเทอร์เฟซยังอยู่ในสภาพเสีย
orodbhen

การรีสตาร์ทเครือข่ายจะไม่ต่ออายุสัญญาเช่า DHCP สำหรับสิ่งนี้คุณต้องลบไฟล์สถานะของเครือข่ายใน / var / lib / libvirtd / dnsmasq
orodbhen

11

virsh net-updateเป็นคำสั่งที่ดีสำหรับคุณ (คุณไม่จำเป็นต้องรีสตาร์ท / ทำลายเครือข่ายของคุณ ฯลฯ )
ดู: https://www.redhat.com/archives/libvir-list/2012-September/msg01380.html


สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันต้องทำลาย / เริ่มเครือข่าย
Alex Willison

3

ฉันสามารถdnsmasq'ดู' การทำแผนที่ IP-MAC ที่เพิ่งเพิ่มเข้ามาใหม่ได้โดยเพียงแค่ส่ง-HUPสัญญาณไปยังdnsmasqกระบวนการ หลังจากนั้นการรีบูตแขกใหม่ก็เพียงพอที่จะกำหนด IP ที่ถูกต้องให้กับมันโดยไม่จำเป็นต้องรีสตาร์ทlibvirtdหรือเครือข่ายเอง

เอกสารอย่างเป็นทางการของ libvirt ( http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network ) กล่าวถึงสคริปต์ Perl ที่ไม่เป็นทางการซึ่งทำกระบวนการทั้งหมดโดยอัตโนมัติ: https://gist.github.com/bendiken/032ea1bddb9ffafe98b4

ฉันไม่ได้ลองใช้สคริปต์นี้ด้วยตัวเองเพราะฉันคิดว่าไฟล์ hosts ได้รับการอัปเดตแล้วและเพิ่งส่งสัญญาณ -HUP ก็เพียงพอแล้ว

โฮสต์กำลังเรียกใช้ Debian 7.8 และเวอร์ชันของแพ็คเกจคือ:

  • kvm 1: 1.1.2 + dfsg-6 + deb7u8
  • qemu-kvm 1.1.2 + dfsg-6 + deb7u8
  • libvirt-bin 0.9.12.3-1 + deb7u1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.