KVM / libvirt: Cách định cấu hình địa chỉ IP khách tĩnh trên máy chủ ảo hóa


31

Điều tôi muốn làm là đặt cấu hình mạng của khách (địa chỉ IP, mạng con, cổng, địa chỉ quảng bá) từ hệ thống máy chủ. Thiết lập mạng được sử dụng là trong bridgechế độ. Làm cách nào tôi có thể định cấu hình mạng từ máy chủ thay vì định cấu hình máy khách thành cấu hình mạng tĩnh?

Nếu tôi thực thi:

virsh edit vm1

Cũng có một <network>khối và tôi đã cố gắng định cấu hình giao diện mạng từ đó, nhưng tiếc là VM khách dường như không sử dụng nó và như vậy là ngoại tuyến với mạng (vì nó chỉ sử dụng cấu hình mạng tự động) ... Khách VM là cả hai, dựa trên Linux và Windows. Bất cứ sự giúp đỡ nào cũng được đánh giá cao.


2
Có phải việc chuyển địa chỉ IP qua DHCP cho thuê không phải là một lựa chọn?
MadHatter hỗ trợ Monica

Tôi đoán là vậy, nhưng tôi muốn gán VM # 1 cho IP # 1, VM # 2 cho IP # 2, v.v. (thay vì cho họ một IP ngẫu nhiên trong hợp đồng thuê của tôi). Bạn có nghĩ rằng có thể cấu hình nó như thế này với DHCP không? Nếu có, tôi rất vui khi thử phương pháp này.
beta

2
Tôi đề nghị đổi tên câu hỏi thành một cái gì đó như " KVM / libvirt: Cách định cấu hình địa chỉ IP của khách tĩnh trên máy chủ ảo hóa "
Nils Toedtmann

1
Đồng ý với @NilsToedtmann, bất kỳ chi tiết bổ sung nào về trình ảo hóa được sử dụng như HĐH cơ sở, v.v ... sẽ có lợi. Có thể có thêm các công cụ quản lý dựa trên HĐH để trợ giúp cấu hình mạng cho các hệ thống ảo hóa. Có những hướng dẫn tuyệt vời về KVMLXC để sử dụng với các hệ điều hành dựa trên SUSE có thể sử dụng YaST.
Matt

Câu trả lời:


52

Nếu bạn không muốn thực hiện bất kỳ cấu hình nào bên trong máy khách, thì tùy chọn duy nhất là máy chủ DHCP cung cấp địa chỉ IP tĩnh. Nếu bạn sử dụng bridgechế độ, đó có thể sẽ là một số máy chủ DHCP bên ngoài. Tham khảo hướng dẫn của nó để tìm hiểu làm thế nào để phục vụ cho thuê tĩnh.

Nhưng ít nhất là trong các chế độ chuyển tiếp nathoặc route, bạn có thể sử dụng tính năng tích hợp sẵn của libvirt dnsmasqd(Các phiên bản gần đây hơn của libvirtd hỗ trợ tùy chọn "dhcp-hostsfile" của dnsmasq). Đây là cách thực hiện:

Trước tiên, tìm ra địa chỉ MAC của máy ảo bạn muốn gán địa chỉ IP tĩnh:

virsh  dumpxml  $VM_NAME | grep 'mac address'

Sau đó chỉnh sửa mạng

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

Tìm <dhcp>phần, giới hạn phạm vi động và thêm mục nhập máy chủ cho máy ảo của bạn

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

Sau đó, khởi động lại VM của bạn (hoặc khởi động lại máy khách DHCP của nó, vd ifdown eth0; ifup eth0)


Cập nhật: Tôi thấy có những báo cáo rằng thay đổi có thể không có hiệu lực sau khi "chỉnh sửa mạng virsh". Trong trường hợp đó, hãy thử điều này sau khi chỉnh sửa:

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

... và khởi động lại máy khách DHCP của VM.

Nếu điều đó vẫn không hoạt động, bạn có thể phải

  • dừng dịch vụ libvirtd
  • giết bất kỳ quá trình dnsmasq vẫn còn sống
  • bắt đầu dịch vụ libvirtd

Lưu ý: Không có cách nào máy chủ KVM có thể buộc VM với hệ điều hành không xác định và cấu hình không xác định sử dụng một cấu hình mạng nhất định. Nhưng nếu biết rằng VM sử dụng một giao thức cấu hình mạng nhất định - giả sử DHCP - bạn có thể sử dụng giao thức đó. Đây là những gì bài viết này giả định.

Một số HĐH (ví dụ: một số bản phân phối Linux) cũng cho phép chuyển các tùy chọn cấu hình mạng vào máy khách, ví dụ như thông qua dòng lệnh kernel. Nhưng điều đó rất cụ thể đối với HĐH và tôi thấy không có lợi thế nào so với phương thức DHCP.


Cảm ơn tôi sẽ thử nó và báo cáo lại nếu tôi làm cho nó hoạt động theo cách đó.
beta

Mát mẻ. Nhưng bạn sẽ phải thay đổi chế độ mạng.
Nils Toedtmann

1
Tôi đến đây vì tôi có nhu cầu tương tự và tôi nghĩ tôi có thể giải thích lợi thế của việc sử dụng DHCP, ít nhất là cho trường hợp sử dụng của tôi. Tình hình được thừa nhận là bất thường. Tôi có một máy chủ di chuyển qua lại giữa hai mạng mỗi vài tuần. Nó có khoảng 10 khách. Một trong các mạng có máy chủ DHCP (khó kiểm soát đối với tôi), mạng còn lại thì không. Đó là khá nhiều quy tắc sử dụng DHCP. Tôi đang tìm cách thay đổi IP của máy chủ lưu trữ và tự động cập nhật địa chỉ IP của khách, v.v. dựa trên điều đó (Tôi đang sử dụng đầu bếp để tự động hóa, vì vậy một khi địa chỉ IP được thiết lập, tôi rất sẵn lòng).
Kevin Keane

2
Tôi có thể xác nhận rằng các thay đổi không có hiệu lực mà không phá hủy và khởi động lại mạng. Tôi cũng thấy rằng, thật lạ là tôi phải tắt máy, rồi khởi động VM. Đơn giản chỉ cần khởi động lại giao diện trong trạng thái bị hỏng.
orodbhen

Khởi động lại mạng không gia hạn hợp đồng thuê DHCP. Đối với điều này, bạn phải xóa tệp trạng thái của mạng trong / var / lib / libvirtd / dnsmasq
orodbhen


3

Tôi đã có thể thực hiện dnsmasq'xem' ánh xạ IP-MAC mới được thêm bằng cách gửi -HUPtín hiệu đến dnsmasqquy trình. Sau đó, khởi động lại máy khách mới là đủ để có IP chính xác được gán cho nó, mà không cần phải khởi động lại libvirtdcũng như chính mạng.

Tài liệu libvirt chính thức ( http://wiki.libvirt.org/page/Networking#Appelling_modutions_to_the_network ) đề cập đến tập lệnh Perl không chính thức này tự động hóa toàn bộ quá trình: https://gist.github.com/bendiken/032ea1bddb9ffafe98b4

Tôi đã không tự mình thử kịch bản này, vì tôi phát hiện ra rằng hostfile đã được cập nhật và chỉ cần gửi tín hiệu -HUP là đủ.

Máy chủ đang chạy Debian 7.8 và các phiên bản gói là:

  • kvm 1: 1.1.2 + dfsg-6 + deb7u8
  • qemu-kvm 1.1.2 + dfsg-6 + deb7u8
  • libvirt-bin 0.9.12.3-1 + deb7u1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.